Verhindern Sie, dass exit() in der Funktion eines Drittanbieters beendet wird?

Lesezeit: 3 Minuten

Benutzeravatar von jezmck
jezmck

Ich rufe mehrere Funktionen (die ich nicht bearbeiten kann) nacheinander auf, aber einige der Funktionen leiten den Benutzer um, sodass ich nie zur nächsten komme.

Ich rufe eine Funktion eines Drittanbieters auf, die Aufrufe hat wp_redirect() was ich verhindern kann, aber dann ist die nächste Zeile exit; die ich nicht herausfinden kann, wie man herumkommt.

Ich hatte gehofft, das mit dem umgehen zu können ob_ funktioniert, aber bisher ohne Erfolg.

Alle Vorschläge, hacky oder nicht, werden sehr geschätzt!

Bearbeiten: Ich habe eine Idee, die ich noch nicht ausprobiert habe – irgendwie neue Prozesse hervorbringen, um diese Aufgaben auszuführen – was der beste Weg wäre, das zu tun, und darauf zu warten, dass jeder fertig ist, bevor ich fortfahre.

  • Es gibt wahrscheinlich einen Grund, warum diese anderen Funktionen exit aufrufen, und wenn Sie einen Weg finden, dies zu umgehen, können Sie am Ende die Programme von Drittanbietern beschädigen. Davon abgesehen könntest du register_shutdown_function() um das Problem zu umgehen, aber das setzt voraus, dass nur 1 Ausgang aufgerufen wird.

    – Apokryfos

    10. August 2016 um 16:11 Uhr

  • @apokryfos Sie rufen exit nur auf, weil sie umleiten. Können Sie näher auf die Verwendung eingehen register_shutdown_function()?

    – jezmck

    11. August 2016 um 7:56 Uhr


  • Es ist eine Funktion, die kurz vor dem Herunterfahren von PHP aufgerufen wird, zB wenn ein Skript exit oder die aufruft oder wenn das Skript die normale Ausführung beendet. Jeder Exit, der innerhalb der Shutdown-Funktion aufgerufen wird, ist jedoch ein echter Exit, es werden keine Shutdown-Funktionen mehr von ihm ausgelöst. Die Handbuchseiten sind wahrscheinlich so detailliert, wie Sie dafür benötigen. Und ja, es ist möglich, dass die anderen Funktionen die Weiterleitung erfordern und nicht erfolgreich abgeschlossen werden, wenn dies nicht geschieht.

    – Apokryfos

    11. August 2016 um 8:03 Uhr


  • Okay danke. Ich weiß, wozu die Umleitungen dienen, ich muss sie nicht zulassen. Es ist eine UX-Sache, und ich automatisiere den Prozess, damit sie strittig sind.

    – jezmck

    11. August 2016 um 14:03 Uhr

Ich glaube, es ist möglich, den Quellcode des PHP-Interpreters zu erhalten … mit der Exit-Funktion herumspielen und dann Ihre neue benutzerdefinierte Version von PHP neu kompilieren und auf dem Webserver installieren …

Ich fürchte, du kannst es einfach nicht. Es gibt eine Option, um die native PHP-Funktion neu zu definieren, siehe runkit_function_redefine.

Aber in den Kommentaren heißt es auch:

Sprachkonstrukte (eval, die, exit, isset, unset, echo usw.), die mit Funktionen verwechselt werden könnten, können auch mit runkit.internal_override nicht umbenannt oder neu definiert werden.

Benutzeravatar von Jonathon
Jonathan

Sie können möglicherweise verwenden runkit_function_redefine. Sie müssen sicherstellen, dass Sie interne Funktionen in Ihrer php.ini-Datei ändern können, um native/interne Funktionen ändern zu können.

Ich denke, die php.ini-Einstellung, die Sie sicherstellen müssen, ist eingeschaltet runkit.internal_override.

Ich habe das nicht getestet.

Allerdings seit exit ist ein Sprachkonstrukt, ich bin mir nicht einmal sicher, ob es möglich ist, es sogar mit der obigen Funktion zu umgehen.

Am Ende habe ich cURL verwendet, um drei synchrone Anforderungen an eine Datei mit unterschiedlichen GET-Parametern zu stellen.

Wirf eine Ausnahme in wp_redirect und umschließe den Code mit der Try-Catch-Anweisung, dann überprüfe, ob die Ausnahmenachricht die von dir festgelegte Nachricht enthält, und gebe die Antwort entsprechend zurück. Ich habe diesen Hack mit den meisten Plugins verwendet, einschließlich Woocommerce, Ultimatemember usw.

Beispiel:

ob_start();
try{
    whatever code....
}catch(\Exception $e){
}
echo ob_get_clean();

1427530cookie-checkVerhindern Sie, dass exit() in der Funktion eines Drittanbieters beendet wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy