2010-10-29 14 views
14

Ho un'app di php che chiama una classe chiamata Client. Ogni tanto ricevo una sorta di errore di timeout. All'inizio pensavo che fosse SQL ma punta il dito verso la classe stessa.PHP: tempo di esecuzione massimo di 30 secondi superato

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\Connections.php on line 3

<?php 
    session_start(); 
    class Connections { //line 3 

Qualcuno sa cosa sta succedendo qui?

grazie,

Billy

+2

Si prega di inviare il codice completo che potrebbe farlo. Inoltre, puoi estendere il tempo di script con 'ini_set ('max_execution_time', 14000);' – Sarfraz

risposta

40

script PHP hanno un tempo massimo di avere il permesso di esecuzione per, come dichiarato nel file php.ini.

È possibile aggirare questo se si vuole veramente aggiungendo la seguente riga:

ini_set('max_execution_time', 123456); 

dove 123456 è il numero di secondi che il limite di essere.

È inoltre possibile utilizzare la funzione set_time_limit, che ho appena scoperto e suppongo faccia la stessa cosa. Comunque ho sempre fatto il primo.

È possibile modificarlo nel file php.ini, ma è possibile che si stia utilizzando lo script per eseguire un'operazione batch o qualcosa del genere. Non vorrai uno script PHP a cui un utente finale acceda per rimanere lì sospeso per 30 o più secondi, quindi è meglio lasciarlo al valore predefinito o addirittura abbassarlo nel file php.ini, e impostazione di max_execution_time in base alle necessità.

Come evidenziato nel commento qui sotto, è possibile impostare il valore di max_execution_time su 0 per impedire che l'errore si verifichi sempre, ma visto che è giusto dire che almeno per una richiesta Web, non si dovrebbe farlo. Per l'interprete della riga di comando php, tuttavia, questo comportamento è l'impostazione predefinita.

Se si riscontra questo problema per cose che sono che si suppone siano utilizzate dagli utenti finali tramite una richiesta Web, potrebbe essere necessario eseguire alcune operazioni di profilazione per individuare la vera causa. Se stai facendo query MySQL, inizia attivando lo slow query log. È particolarmente utile per farti sapere quando hai dimenticato un indice o se stai facendo qualcos'altro inefficiente.

Puoi anche spingere alcune cose nello $s = microtime(true); yourstuff(); var_dump(microtime(true)-$s); per ottenere una panoramica vaga di quali bit stanno rallentando le cose, ma assicurati di non lasciarne nessuna in seguito!

Se si sta ancora lottando per trovare la causa principale, impostare xdebug sul computer locale ed eseguire il profiler. L'estensione è disponibile come binario di Windows precompilato (anche se sembra esserci una schiera di versioni confuse). È possibile controllare i risultati dell'esecuzione del profiler utilizzando wincachegrind.

+13

'ini_set (" max_execution_time ", 0)' significa no massimo (non consigliato però) – robjmills

+0

ciao, puoi rispondere [questo] (http : //stackoverflow.com/questions/28457538/sql-trigger-after-insert-update-another-table-with-conditions), grazie – stom

Problemi correlati