¿Cómo aumentar el tiempo de espera de ejecución en php?

101

¿Cómo aumentar el tiempo de espera de las transacciones? Quiero subir videos, pero ¿videos de gran tamaño no cargados?

Arroja error The process *** exceeded the timeout of 60 seconds.

Aamir
fuente
1
Defina "tiempo de espera de transacción". ¿Qué no funciona dónde?
Pekka
1
¿Por qué crees que se agotó el tiempo de espera de la "transacción"?
Tu sentido común
videos cortos subidos con éxito. pero el video largo no se subió, creo que se acabó el tiempo.
Aamir
ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('max_execution_time', '200M'); ini_set ('max_input_time', '200M'); ini_set ('límite de memoria', '200M'); set_time_limit (65536);
Aamir
1
es mejor dividir el archivo antes de cargarlo. Hay muchas aplicaciones que se pueden utilizar. Prefiero plupload.
bksi

Respuestas:

127

Necesita cambiar alguna configuración en su 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 ubicación de su PHP.ini depende de su entorno, más información: http://php.net/manual/en/ini.list.php

Hannes
fuente
lo siento, no tengo idea de lo que quieres decir con eso :(
Hannes
@Aamir, debe tener permiso de su servidor web para cambiar la configuración de su servidor web. A menudo, no te dejan cambiar cosas así.
hellozimi
¿Puedo cambiar upload_max_filesize y max_execution_time en el archivo htaccess?
Aamir
2
@Col, no estoy de acuerdo, él quiere hacer los cambios sobre la marcha y no en toda la aplicación, así que pregunta cómo puede hacerlo. E incluso si preguntara cómo puede simplemente cambiar algunas cosas en php.ini, puede ser una pregunta de novato, pero una pregunta legítima de todos modos.
Hannes
1
@IulianOnofrei está bien, solo sentí la necesidad de señalar eso: D, pero tal vez si no sabes qué es, todavía es bueno buscarlo ... "Aquellos que no pueden aprender de la historia están condenados a repetirla" y todo eso …
Hannes
56

También debería poder hacerlo durante el tiempo de ejecución usando

set_time_limit(100);

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

o en su vhost-config

php_admin_value max_execution_time 10000

Tener un límite de tiempo de ejecución global BAJO es principalmente una buena idea por razones de rendimiento en aplicaciones no tan confiables. Por lo tanto, es posible que desee permitir que solo esos scripts se ejecuten durante más tiempo del absolutamente necesario.

ps: no te olvides de post_max_size y upload_max_filesize (como ya se dijo en la primera respuesta)

Christoph Strasen
fuente
Si lo configura, el sueño será ignorado
Snake Eyes
20

Para completar la respuesta de Hannes.

Necesita cambiar alguna configuración en su php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Si alguien quiere poner un número ilimitado (no sé por qué, pero si lo desea), puede establecer el tiempo en 0:

Necesita cambiar alguna configuración en su php.ini:

upload_max_filesize = 0 

max_execution_time = 0

Y si no sabe dónde está su archivo php.ini. Puedes hacer un archivo "name.php" en tu servidor y poner:

<?php phpinfo(); ?>

Y en su sitio web, puede ver la configuración de su php.ini y está marcado donde está.

Editar el 9 de enero de 2015:

Si no puede acceder a su php.ini, tiene dos opciones más.

Puede establecer esta línea directamente en su archivo "name.php" pero no encuentro upload_max_filesize para esta opción:

set_time_limit(0);

O en ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
Lynxi
fuente
9

Si lo que necesita hacer es específico solo para 1 o 2 páginas, sugiero usar set_time_limit para que no afecte a toda la aplicación.

set_time_limit(some_values);

pero, por supuesto, estos 2 valores (post_max_size y upload_max_filesize) están sujetos a investigación.

puede configurarlo a través de la función ini_set

ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');

o directamente en el archivo php.ini como la respuesta anterior de Hannes, o incluso configúrelo en .htaccess como a continuación

php_value upload_max_filesize 2M
php_value post_max_size 20M
Komang
fuente
5

Además de las respuestas anteriores, puede usar la set_time_limit()función:

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

pasar 0como argumento hará que su script se ejecute sin límite de tiempo.

Tomasz Kowalczyk
fuente
set_time_limit () no tiene nada que ver con la carga de archivos
su sentido común
1
Esto no es lo suficientemente preciso Col. Shrapnel. Mientras que en entornos Unix, el tiempo máximo de ejecución se compara con el tiempo de CPU acumulado utilizado por php-thread, en los sistemas Windows se utiliza el tiempo absoluto. La carga se realiza principalmente en "tiempo de inactividad" (IO-Wait). Pero, como puede ver, las cargas pueden detenerse cuando demora demasiado.
Christoph Strasen
4

Si está utilizando el servidor IIS de Microsoft , además de php.ini configuración mencionada por otros, es posible que deba aumentar la configuración del tiempo de espera de ejecución para la aplicación PHP FastCGI en el Administrador del servidor IIS:

Paso 1) Abra el Administrador del servidor IIS (generalmente bajo Administrador del servidor en el menú Inicio, luego Herramientas / Administrador de servicios de información de Internet (IIS) ).

Paso 2) Haga clic en la conexión principal (no específica de ningún dominio en particular).

Paso 3) En la sección IIS , busque Configuración de FastCGI (que se muestra a continuación).

ingrese la descripción de la imagen aquí

Paso 4) en la misma, haga clic en la aplicación PHP y seleccione Editar ... .

Paso 5) Verifique los tiempos de espera (que se muestran a continuación).

ingrese la descripción de la imagen aquí

En mi caso, los tiempos de espera predeterminados aquí fueron de 70 y 90 segundos; el primero de los cuales estaba causando un error interno del servidor 500 en los scripts PHP que demoraron más de 70 segundos.

Miguel
fuente
3

Tuvo un error tipográfico: ini_set ('max_input_time', '200M') - el conjunto de valores debe ser un int, como ini_set ('max_input_time', '200')

tanatoide
fuente
2

Sé que está preguntando específicamente sobre el tiempo de espera de PHP, pero lo que nadie más parece haber mencionado es que también puede haber un tiempo de espera en el servidor web y puede verse muy similar al tiempo de espera de PHP.

Entonces, si lo ha intentado:

  1. Aumento del tiempo de espera en php.ini agregando una línea: max_execution_time = {número de segundos, es decir, 60 por un minuto}
  2. Aumentar el tiempo de espera en su propio script agregando: ini_set ('max_execution_time', '{número de segundos, es decir, 60 por un minuto}');

Y ha comprobado con la función phpinfo () que max_execution_time se ha incrementado, entonces es posible que desee intentar agregar esto a .htaccess, lo que se asegurará de que Apache no se agote el tiempo de espera:

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

Más información aquí: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/

Paul Feakins
fuente
2

Primero verifique la php.iniruta del archivo por phpinfo(); y luego cambió los PHP.INIparámetros:

upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30

reiniciado Apache

set_time_limit(0); // safe_mode is off

ini_set('max_execution_time', 500); //500 seconds

Nota : también puede usar el comando para buscar php.inien Linux

locate `php.ini`
Ashfaq Muhammad
fuente
1

Si no puede editar php.ini (en su servidor, por ejemplo), puede intentar cambiar los parámetros de php.ini desde su código php. Tratar:

ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');

Si eso no funciona, intente también configurar 'set_time_limit' de la misma manera, más allá de eso, diría que su única opción es contactar a su anfitrión. Esta configuración no se puede modificar en modo seguro.

Juan
fuente
3
Hannes recibió esto un minuto antes de que yo publicara, y señala correctamente que ini_set no debe establecer set_time_limit (), como se indica en esta respuesta, sino poniendo los segundos entre corchetes. Hannes votado a favor.
John
1

Pruebe si está en modo seguro; de lo contrario, establezca el límite de tiempo (valor local) a lo que desea:

if(!ini_get('safe_mode')){

    echo "safe mode off";
    set_time_limit(180);// seconds

    phpinfo();// see 'max_execution_time'
}

* No puede establecer un límite de tiempo de esta manera si el modo seguro está activado.

TV-C-15
fuente
1

opcional: si configuras config sobre php.ini pero aún no puedes cargar

-esta es la función php para verificar el código de error

$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;
}
Ruthe
fuente
0

También puede establecer un tiempo máximo de ejecución en su .htaccessarchivo:

php_value max_execution_time 180
Visión
fuente
0

Para aumentar realmente el límite de tiempo, prefiero obtener primero el valor actual. set_time_limitno siempre aumenta el límite de tiempo. Si el valor actual (p. Ej., De php.inio establecido anteriormente) es mayor que el valor utilizado en la llamada actual de set_time_limit, disminuirá el límite de tiempo!

Entonces, ¿qué pasa con un pequeño ayudante como este?

/**
 * @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);

Ver también: Obtener max_execution_time en un script PHP

algoritmo
fuente