shell_exec () Zeitlimitverwaltung & exec ()

7

Ich führe ein Drittanbieter-Skript mit einer Wrapper-Klasse, die ich geschrieben habe, die shell_exec() und Pipes in eine Datei aufruft, die ich später mit PHP-Code analysiere. Ich sollte erwähnen, dass das funktioniert, aber ich versuche, die Funktionalität zu verbessern, nachdem ich auf einen Anwendungsfall gestoßen bin, an den ich nicht gedacht hatte.

Wie ist es am besten, die Zeitüberschreitung bei shell_exec () zu verwalten? Ich dachte daran, es in ein try() catch() zu wickeln, aber ich bin mir nicht sicher, wie ich am besten mit der Zeitkomponente umgehen soll.

Ich habe hier ein paar Fragen zu shell_exec() und exec() gelesen und es scheint, dass man durch Rückgabe von Ausgabe-Parametern an exec() eine Rückgabe erhalten kann, aber das hängt davon ab, dass das Skript mit einem endet Rückgabestatus Plus in meiner Mini-Test-Seite, ich kann es nicht scheinen, um irgendeine Ausgabe zurückzugeben!

Die andere Option, über die ich nachdachte, war die Verwendung eines modalen Dialogs mit einem Spinner im Ajax-Stil, während das Skript funktionierte, und das Setzen eines manuellen Timeouts in Javascript. Das gab dem Benutzer dann eine Modelldialogmeldung über das Fehlschlagen / Timeout und Beenden.

Gibt es für diesen Anwendungsfall akzeptierte Methoden?

Mein Mini-Test bestand aus den folgenden,

%Vor%

Verwenden Sie diese Frage als ref,   Kann kein PHP-Skript mit PHP-Exec ausführen

Ссылка

    
David Yell 04.08.2010, 17:07
quelle

3 Antworten

7

Ich würde vorschlagen, dass Sie sich mit proc_open befassen. Sie können es so konfigurieren, dass es eine Stream-Ressource zurückgibt, einen Timer manuell hält und wenn der Timer abläuft, bevor der Prozess abgeschlossen ist, können Sie ihn mit proc_terminate beenden. Wenn der Vorgang abgeschlossen ist, bevor der Timer abgelaufen ist, können Sie proc_close und dann stream_get_contents verwenden, um die Daten zu erfassen, die andernfalls in stdout geschrieben worden wären.

Siehe Ссылка

    
Ryan Tenney 04.08.2010, 17:15
quelle
15
___ answer3408000 ___

Ich würde vorschlagen, dass Sie sich mit %code% befassen. Sie können es so konfigurieren, dass es eine Stream-Ressource zurückgibt, einen Timer manuell hält und wenn der Timer abläuft, bevor der Prozess abgeschlossen ist, können Sie ihn mit %code% beenden. Wenn der Vorgang abgeschlossen ist, bevor der Timer abgelaufen ist, können Sie %code% und dann %code% verwenden, um die Daten zu erfassen, die andernfalls in stdout geschrieben worden wären.

Siehe Ссылка

    
___ qstnhdr ___ shell_exec () Zeitlimitverwaltung & exec () ___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ antwort13287902 ___

Ich schreibe ein funktionierendes Stück Code für eine solche Aufgabe. Die Funktion gibt den Exit-Code zurück (0 - OK, & gt; 0 - Fehler) und schreibt stdout, stderr in die Referenzvariablen.

%Vor%     
___ qstntxt ___

Ich führe ein Drittanbieter-Skript mit einer Wrapper-Klasse, die ich geschrieben habe, die %code% und Pipes in eine Datei aufruft, die ich später mit PHP-Code analysiere. Ich sollte erwähnen, dass das funktioniert, aber ich versuche, die Funktionalität zu verbessern, nachdem ich auf einen Anwendungsfall gestoßen bin, an den ich nicht gedacht hatte.

Wie ist es am besten, die Zeitüberschreitung bei shell_exec () zu verwalten? Ich dachte daran, es in ein %code% zu wickeln, aber ich bin mir nicht sicher, wie ich am besten mit der Zeitkomponente umgehen soll.

Ich habe hier ein paar Fragen zu %code% und %code% gelesen und es scheint, dass man durch Rückgabe von Ausgabe-Parametern an %code% eine Rückgabe erhalten kann, aber das hängt davon ab, dass das Skript mit einem endet Rückgabestatus Plus in meiner Mini-Test-Seite, ich kann es nicht scheinen, um irgendeine Ausgabe zurückzugeben!

Die andere Option, über die ich nachdachte, war die Verwendung eines modalen Dialogs mit einem Spinner im Ajax-Stil, während das Skript funktionierte, und das Setzen eines manuellen Timeouts in Javascript. Das gab dem Benutzer dann eine Modelldialogmeldung über das Fehlschlagen / Timeout und Beenden.

Gibt es für diesen Anwendungsfall akzeptierte Methoden?

Mein Mini-Test bestand aus den folgenden,

%Vor%

Verwenden Sie diese Frage als ref,   Kann kein PHP-Skript mit PHP-Exec ausführen

Ссылка

    
___ tag123shellexecute ___ ShellExecute ist eine Win32-API-Funktion zum Starten von Dokumentdateien ___ answer40283447 ___

Ich habe versucht mit %code% , aber es gibt keine Möglichkeit, den Prozess danach zu beenden. Außerdem blockiert %code% den Stream, selbst wenn wir Stream_set_blocking unter Windows verwenden, also musste ich stattdessen fread verwenden. Außerdem funktioniert proc_terminate unter Windows nicht richtig, also musste ich eine alternative Kill-Funktion verwenden.

Ich habe mir das ausgedacht, es sollte jetzt sowohl unter Windows als auch unter Linux funktionieren:

%Vor%     
___
Vladislav Ross 08.11.2012 11:12
quelle
0

Ich habe versucht mit popen() , aber es gibt keine Möglichkeit, den Prozess danach zu beenden. Außerdem blockiert stream_get_contents() den Stream, selbst wenn wir Stream_set_blocking unter Windows verwenden, also musste ich stattdessen fread verwenden. Außerdem funktioniert proc_terminate unter Windows nicht richtig, also musste ich eine alternative Kill-Funktion verwenden.

Ich habe mir das ausgedacht, es sollte jetzt sowohl unter Windows als auch unter Linux funktionieren:

%Vor%     
Renan Decarlo 27.10.2016 11:26
quelle

Tags und Links