8 Stimmen

PHP-Redirect hält Skript auf

UPDATE

Ich habe das Problem gefunden, das mein Skript behindert hat. Offenbar hatte es nichts mit der Entschlüsselung zu tun, sondern mit meiner Umleitung. Als ich diesen Codeblock entfernte, begann das Skript schnell zu funktionieren. Ich bin mir immer noch nicht sicher, warum dies das Problem verursacht hat.

// Make sure we have an Order ID
if( ! isset($_GET['id']) && ! isset($_POST['id']) ) {
    header("Location: https://www.website.com/orders/");
    exit;
}

URSPRÜNGLICHE FRAGE:

Ich habe die Klasse Encryption verwendet, die Sie hier finden: Klasse Verschlüsselung . Ich speichere die Daten in einer MySQL-Datenbank mit dem binären Datentyp VARCHAR (früher habe ich BLOB und TINYBLOB ausprobiert).

Das Ver- und Entschlüsseln funktioniert, allerdings dauert das Entschlüsseln etwa 1 Minute. Die Verschlüsselung ist schnell.

Ich denke, ich sollte auch sagen, dass dies über eine https-Verbindung geschieht (falls das relevant ist).

Ich kann mich nicht erinnern, dass die Entschlüsselung immer so lange gedauert hat. Haben Sie eine Idee, was die Ursache dafür sein könnte? Wenn ich den Entschlüsselungsteil des PHP-Codes auskommentiere und nur die verschlüsselte Zeichenfolge als Echo zurückgebe, geht es schnell.

CODE WIE UNTEN IN DEN KOMMENTAREN VERLANGT

class Encryption
{
    const CYPHER = 'blowfish';
    const MODE   = 'cfb';
    const KEY    = 'MyPersonalKey';

    public function encrypt($plaintext)
    {
        $td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, self::KEY, $iv);
        $crypttext = mcrypt_generic($td, $plaintext);
        mcrypt_generic_deinit($td);
        return $iv.$crypttext;
    }

    public function decrypt($crypttext)
    {
        $plaintext = '';
        $td        = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $ivsize    = mcrypt_enc_get_iv_size($td);
        $iv        = substr($crypttext, 0, $ivsize);
        $crypttext = substr($crypttext, $ivsize);
        if ($iv)
        {
            mcrypt_generic_init($td, self::KEY, $iv);
            $plaintext = mdecrypt_generic($td, $crypttext);
        }

        return $plaintext;
    }
}

Hier ist der Code von der Webseite, wo ich die Variablen aus der MySQL-Zeile gesetzt habe. Ich verwende das $wpdb-Objekt von WordPress.

$order = $wpdb->get_row("SELECT * FROM orders WHERE id = ".$order_id." LIMIT 0,1");

$addons_price =      $order->addons_price;
$hooked_package =    (isset($_GET['hooked_package'])) ? $_GET['hooked_package'] : $order->hooked_package;
$arrival_date_unix = $order->arrival_date_unix;
$order_data =        unserialize($order->order_data);
$preview_total =     $order_data['preview_price'] + $addons_price + $order_data['travel_insurance'];
$normal_total =      $order_data['normal_price'] + $addons_price + $order_data['travel_insurance'];
$package_price =     $order->package_price;
$total_price =       $order->total_price;
$billing_cc =        Encryption::decrypt($order->billing_cc);

Außerdem ist hier der MySQL-Typ...

`billing_cc` varbinary(255) DEFAULT NULL

1voto

inquam Punkte 12256

Der Code, den Sie als Ihr Problem angeben, ist eine einfache bedingte Umleitung. Er sollte also nichts mit der Entschlüsselung zu tun haben. Der einzige Grund, den ich für die langsame Weiterleitung sehen kann, ist, dass der Webserver stark belastet ist, eine langsame Verbindung hat oder ein anderes Leistungsproblem aufweist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X