Dies ist nicht eine der regulären Fragen, wenn Sleep für Timeout oder solche Sachen gezählt wird. Ok, hier ist das Problem: Ich habe die max_execution_time für PHP als 15 Sekunden eingestellt und im Idealfall sollte diese Zeit überschritten werden, wenn sie das festgelegte Limit überschreitet, tut dies aber nicht. Apache wurde nach der Änderung der php.ini-Datei neu gestartet und ein ini_get ('max_execution_time') ist in Ordnung. Manchmal läuft das Skript bis zu 200 Sekunden, was verrückt ist. Ich habe keinerlei Datenbankkommunikation. Das ganze Skript sucht nach Dateien auf dem Unix-Dateisystem und weist in einigen Fällen auf eine andere JSP-Seite um. Es gibt keinen Schlaf() für das Skript.PHP max_execution_time nicht Zeitüberschreitung
ich berechnen die Gesamtlaufzeit des PHP-Skript wie folgt aus:
Zu Beginn des Skripts I gesetzt:
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
und die Endzeit ($ _ gEndTime) wird auf ähnliche Weise berechnet.
Die Gesamtzeit wird in einer Shutdown-Funktion berechnet, dass ich registriert habe:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
Hinweis: ich nicht $ _SERVER verwenden kann [ 'REQUEST_TIME'], weil meine PHP-Version nicht kompatibel ist. Das ist scheiße - ich weiß.
1) Nun, meine erste Frage ist offensichtlich, warum läuft mein PHP-Skript auch nach dem eingestellten Timeout-Limit?
2) Apache hat die Timeout-Anweisung, die 300 Sekunden ist, aber die PHP-Binärdatei liest nicht die Apache-Konfiguration und dies sollte kein Problem sein.
3) Gibt es eine Möglichkeit, dass PHP PHP in einen Schlafmodus versetzt?
4) Berechne ich die Ausführungszeit falsch? Gibt es einen besseren Weg, dies zu tun?
Ich bin an dieser Stelle ratlos. PHP-Assistenten - bitte helfen.
Edit: Ich habe gerade herausgefunden, dass die Stream-Vorgänge sind nicht die Ursache mit ein paar Protokollen. Die Verzögerung ist innerhalb des Skripts nur zufällig, auch wenn keine Streaming-Vorgänge ausgeführt werden. Kontextwechsel kann nur der Grund sein. Aber ich habe immer noch keine klare Antwort. Ich schaute Real max_execution_time for PHP on linux auf, aber ich bin nicht sicher, dass ich das ausprobieren möchte. Irgendwelche anderen Vorschläge?
Ich glaube, dass Dateisystem-Operationen auch nicht in Zeitlimit Berechnungen gezählt werden. – lonesomeday
Wissen Sie, Sie können 'microtime (true)' verwenden, um einen 'float' direkt zurück zu bekommen ... – deceze
@lonesomeday: Sind Sie sicher? –