Come aumentare il timeout della transazione? Voglio caricare video, ma non vengono caricati video di grandi dimensioni?
Genera errore The process *** exceeded the timeout of 60 seconds.
Come aumentare il timeout della transazione? Voglio caricare video, ma non vengono caricati video di grandi dimensioni?
Genera errore The process *** exceeded the timeout of 60 seconds.
Risposte:
Devi modificare alcune impostazioni nel tuo php.ini:
upload_max_filesize = 2M
;or whatever size you want
max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds
La posizione del tuo PHP.ini dipende dal tuo ambiente, maggiori informazioni: http://php.net/manual/en/ini.list.php
Dovresti essere in grado di farlo anche durante il runtime usando
set_time_limit(100);
http://php.net/manual/en/function.set-time-limit.php
o nel tuo vhost-config
php_admin_value max_execution_time 10000
Avere un limite di tempo di esecuzione globale che è BASSO è principalmente una buona idea per motivi di prestazioni su applicazioni non così affidabili. Quindi potresti voler consentire solo a quegli script di funzionare più a lungo che assolutamente necessario.
ps: non dimenticare post_max_size e upload_max_filesize (come la prima risposta già detta)
Per completare la risposta di Hannes.
Devi modificare alcune impostazioni nel tuo php.ini:
upload_max_filesize = 2M
;or whatever size you want
max_execution_time = 60
; also, higher if you must
Se qualcuno vuole mettere un numero illimitato (non so perché ma se vuoi), puoi impostare il tempo a 0:
Devi modificare alcune impostazioni nel tuo php.ini:
upload_max_filesize = 0
max_execution_time = 0
E se non sai dov'è il tuo php.ini. Puoi fare un file "name.php" nel tuo server e inserire:
<?php phpinfo(); ?>
E sul tuo sito web, puoi vedere la configurazione del tuo php.ini ed è contrassegnato dove si trova.
Se non riesci ad accedere al tuo php.ini, hai altre due opzioni.
Puoi impostare questa riga direttamente nel tuo file "name.php" ma non trovo upload_max_filesize per questa opzione:
set_time_limit(0);
O in ".htaccess"
php_value upload_max_filesize 0
php_value max_execution_time 0
se quello che devi fare è specifico solo per 1 o 2 pagine suggerisco di usare set_time_limit in modo che non abbia effetto sull'intera applicazione.
set_time_limit(some_values);
ma naturalmente questi 2 valori (post_max_size e upload_max_filesize) sono soggetti a verifica.
puoi impostarlo tramite la funzione ini_set
ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');
o direttamente nel file php.ini come risposta sopra di Hannes, o anche impostarlo in .htaccess come sotto
php_value upload_max_filesize 2M
php_value post_max_size 20M
In aggiunta alle risposte precedenti, puoi usare la set_time_limit()funzione:
http://php.net/manual/en/function.set-time-limit.php
passare 0come argomento farà eseguire lo script senza limiti di tempo.
Se ti capita di utilizzare il server Microsoft IIS , oltre a php.ini impostazioni menzionate da altri, potrebbe essere necessario aumentare le impostazioni di timeout di esecuzione per l'applicazione PHP FastCGI in IIS Server Manager:
Passaggio 1) Apri Gestione server IIS (di solito sotto Gestione server nel menu Start, quindi Strumenti / Gestione Internet Information Services (IIS) ).
Passaggio 2) Fare clic sulla connessione principale (non specifica per un particolare dominio).
Passaggio 3) Nella sezione IIS , trova Impostazioni FastCGI (mostrate di seguito).
Passaggio 4) Qui, fai clic con il pulsante destro del mouse sull'applicazione PHP e seleziona Modifica ... .
Passaggio 5) Verificare i timeout (mostrati di seguito).
Nel mio caso, i timeout predefiniti qui erano 70 e 90 secondi; il primo dei quali causava un errore interno del server 500 su script PHP che impiegava più di 70 secondi.
So che stai chiedendo specificamente del timeout PHP, ma quello che nessun altro sembra aver menzionato è che può esserci anche un timeout sul server web e può essere molto simile al timeout PHP.
Quindi se hai provato:
E hai verificato con la funzione phpinfo () che max_execution_time è effettivamente aumentato, quindi potresti provare ad aggiungerlo a .htaccess che assicurerà che Apache stesso non scada:
RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]
Maggiori informazioni qui: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/
Prima controlla il php.inipercorso del file con phpinfo(); e poi ha cambiato i PHP.INIparametri:
upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30
ha riavviato Apache
set_time_limit(0); // safe_mode is off
ini_set('max_execution_time', 500); //500 seconds
Nota : puoi anche usare il comando per trovare php.iniin Linux
locate `php.ini`
Se non puoi modificare php.ini (sul tuo server ad esempio) puoi provare a modificare i parametri php.ini dal tuo codice php. Provare:
ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');
Se non funziona, prova anche a impostare "set_time_limit" allo stesso modo, oltre a ciò direi che la tua unica opzione è contattare il tuo host. Queste impostazioni non possono essere modificate in modalità provvisoria.
Verifica se sei in modalità provvisoria, in caso contrario imposta il limite di tempo (valore locale) su quello che desideri:
if(!ini_get('safe_mode')){
echo "safe mode off";
set_time_limit(180);// seconds
phpinfo();// see 'max_execution_time'
}
* Non è possibile impostare il limite di tempo in questo modo se la modalità provvisoria è "attiva".
opzionale: se imposti la configurazione su php.ini ma non riesci ancora a caricarlo
-questa è la funzione php per controllare il codice di errore
$error_type = [];
$error_type[0] = "There is no error";
$error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
$error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
$error_type[3] = "The uploaded file was only partially uploaded.";
$error_type[4] = "No file was uploaded.";
//$error_type["5"] = "";
$error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
$error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
$error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
//------------------------------
//--> show msg error.
$status_code = $_FILES["uploadfile"]["error"];
if($status_code != 0){
echo $error_type[$status_code];
exit;
}
Puoi anche impostare un tempo massimo di esecuzione nel tuo .htaccessfile:
php_value max_execution_time 180
Per aumentare davvero il limite di tempo preferisco prima ottenere il valore corrente. set_time_limitnon sempre aumenta il limite di tempo. Se il valore corrente (ad esempio da php.inio precedentemente impostato) è maggiore del valore utilizzato nella chiamata corrente di set_time_limit, diminuirà il limite di tempo!
Allora cosa succede con un piccolo aiutante come questo?
/**
* @param int $seconds Time in seconds
* @return bool
*/
function increase_time_limit(int $seconds): bool
{
return set_time_limit(max(
ini_get('max_execution_time'), $seconds
));
}
// somewhere else in your code
increase_time_limit(180);
Vedi anche: Ottieni max_execution_time nello script PHP