PDA

Bekijk Volledige Versie : max_execution_time in php.ini lijkt niet te werken - timeout na 3 minuten



Christophe1
08/09/12, 21:49
Dag iedereen

Een php-script dat records van een xls-bestand in een database importeert, wordt steeds na exact 3 minuten vroegtijdig beëindigd met als resultaat een error 500. In de logs vind ik "Script timed out before returning headers".

Ik dacht aan de "max_execution_time" en eventueel de "max_input_time" in php.ini. Maar... welke waarde ik ook ingeef; 0, 30, 180, 300... Steeds wordt het script na exact 3 minuten beëindigd.

Ik pas wel degelijk de juiste php.ini aan en herstart telkens apache. phpinfo() toont telkens correct de nieuw ingegeven waarde.

Zie ik eventueel een andere tijdslimiet over het hoofd?

Alvast bedankt voor de hulp!

Mvg
Christophe

t.bloo
09/09/12, 00:13
Misschien iets in een .htaccess? Misschien een extern script dat lange runs op brute wijze killed? Dergelijke scripts zijn er in vele vormen. Als het voor "returning headers" is dan kan het ook nog zijn "max_input_time".

Christophe1
09/09/12, 00:19
Bedankt voor je antwoord, t.bloo!

Het gaat om een klein zelfgeschreven scriptje. Niks externs en er komt ook geen .htaccess aan te pas...
max_input_time heb ik eveneens aangepast naar tijden groter dan 3 minuten. Heeft niet geholpen.

Zojuist een doorbraak; script loopt ondertussen ruim 6 minuten na aanpassen van de algemene timeout-instelling van apache in /etc/httpd/conf/extra/httpd-default.conf van, raar maar waar, '60' naar '120'. Ik ga even verder in deze richting.

joriz
10/09/12, 10:37
Wat gebeurd er als je het script direct aanroept via PHP en dus niet via Apache?
Direct aanroepen zal er namelijk voor zorgen dat PHP max_execution_time in meeste gevallen negeert. Krijg je dan nog steeds een foutmelding?
Toont de error_log van PHP nog wat?

Flaxe_eu
10/09/12, 10:47
wat je ook kan doen is de output buffer uit zetten als je een grote while of for loop gebruikt.


klein voorbeeld



ob_start();

foreach ($array as $val){
// doe vanalles
echo $val."verwerkt..<br>";

ob_flush();
flush();
usleep(100);
}




en in je htacces even dit neer zetten



php_value output_buffering "0"


nu krijg je ook heel mooi de output live te zien op je scherm en je hebt geen last van execution time :D

Yourwebhoster
10/09/12, 10:47
Stuur anders een PB met je login gegevens ed, dan kijk ik wel even wat het kan zijn.

SebastiaanStok
10/09/12, 19:52
"Script timed out before returning headers".

Dit zegt eigenlijk al was het probleem is, je script doet er te lang over om headers te sturen.
De webserver stuurt de headers pas als hij aan de inhoud begint met iets als echo.

Websites zijn hier eigenlijk niet voor gemaakt, je kan het beter het bestand uploaden en dan op de achtergrond laten verwerken.
Als je perse feedback nodig hebt kan je het ook de achtergrond uitvoeren en dan je achtergrond script laten terugsturen hoeveel al heeft verwerkt.

Als je over PHP 5.3 beschikt kan je ook gebruik maken van https://github.com/symfony/Process