2011-12-04 18 views
5

Ho uno script in cui ho impostato:set_time_limit (0) e "Tempo massimo di esecuzione" PHP

set_time_limit(0) 

ma ancora ottenere

Fatal error: Maximum execution time of 90 seconds exceeded in /home/Feed.php on line 234 

Ho anche provato a installare:

php_value max_execution_time 120 

nel file .htaccess ma non si può ancora fermare questo errore - qualche idea per cui questo non è prioritario?

+3

L'host sovrascrive l'override ?, se si posiziona 'set_time_limit (0)' all'interno del ciclo, verrà reimpostato il tempo su 0 su ciascuna iterazione. –

+1

@LawrenceCherone sei sicuro? –

+1

Giusto per far sapere che questo 'set_time_limit (XX)' ha risolto il mio problema. Forse diversi host hanno regole/configurazioni diverse. Il 'php_value max_execution_time XX' non ha funzionato. – nobug

risposta

5

Molto probabilmente, l'host esegue una copia di PHP con la patch Suhoshin installata. Questa patch fornisce un gran numero di miglioramenti operativi e di sicurezza a PHP, incluso consentire all'host di disabilitare funzioni come set_time_limit().

Esistono altri modi in cui un host può disabilitare la funzione set_time_limit(), ma questa è la più probabile. (soprattutto perché hai già escluso la modalità provvisoria)

Perché disabilitare questa funzione? Poiché una funzione PHP richiede molto tempo per l'esecuzione, in genere richiede molte risorse del server; in un ambiente di hosting condiviso, è saggio per l'host mitigare questo tipo di cose per evitare che uno script canaglia abbia un impatto sugli altri utenti.

Cosa si può fare a riguardo?

In primo luogo, sei sicuro di aver bisogno di impostare il limite di tempo? Sai perché il tuo script impiega tanto tempo per essere eseguito? Puoi lavorare intorno ad esso? Forse fare un po 'di profilazione sul tuo codice potrebbe aiutarti a trovare i colli di bottiglia e ad accelerare il programma.

In alternativa, se è davvero necessario impostare il limite di tempo, potrebbe essere necessario chiedere all'host di abilitare l'utente a farlo, oppure aggiornare il pacchetto o cambiare provider di hosting.

3

Questa funzione non ha alcun effetto quando PHP è in esecuzione in modalità provvisoria. Non v'è alcuna soluzione diversa da disattivare la modalità sicura o modificare il limite di tempo nel php.ini

+0

Non funziona in modalità provvisoria –

0

Se si è sicuri che non è in esecuzione in modalità provvisoria ...

http://php.net/manual/en/function.set-time-limit.php

"Quando chiamato, set_time_limit() riavvia il contatore del timeout da zero. "

Quindi, in teoria, è possibile ripetutamente call set_time_limit(0).

Tuttavia, è possibile per il vostro fornitore di hosting per evitare che tramite la modalità sicura, ecc

Onestamente, mi piacerebbe solo cercare di ottenere un VPS a buon mercato cui è possibile controllare le cose, se è necessario personalizzare questo tipo di cosa.

+1

Il manuale diceva che "Se impostato su zero, non è imposto alcun limite di tempo." – xdazz

+0

Sì.Ma il punto è che impostarlo su 0 non è abbastanza per lui apparentemente. Quindi usarlo per resettare il contatore può essere praticabile. Non ho mai provato ad abusarlo in quel modo, ma presumibilmente funziona. – ReadWriteCode

Problemi correlati