2012-07-08 16 views
27

Estoy buscando cuál es el mejor valor para establecer los valores predeterminados en PHP. He visto muchos puntos contradictorios sobre max_input_time.Carga de archivos PHP afectada o no por max_input_time?

Esta respuesta dice que él cree que al subir el archivo no se cuenta hacia temporizadores: https://stackoverflow.com/a/3758522/518169

Mientras que en la documentación oficial de PHP, no está diciendo una gran advertencia de color rojo:

max_input_time sets the maximum time, in seconds, the script is allowed to receive input; this includes file uploads. For large or multiple files, or users on slower connections, the default of 60 seconds may be exceeded

Fuente: http://php.net/manual/en/features.file-upload.common-pitfalls.php, última actualización: vie, 06 jul 2012

Así que de esto parece que max_input_timeafecta carga de archivos y para asegurarse de que los visitantes puedan subir digan archivos de 20 MB incluso desde conexiones lentas o móviles, ¡el valor predeterminado de 60 definitivamente no es suficiente!

¿A qué recomiendas establecer este valor? 300?

Además, ¿hay alguna relación entre max_execution_time y max_input_time? Por ejemplo, como ese max_execution_time necesita ser más grande que max_input_time?

+0

Tuve algunos problemas con la carga de archivos grandes y el tiempo de espera de Apache, pero con PHP no. –

+0

Es bastante interesante tener los mismos problemas durante bastante tiempo en uno de mis proveedores de hosting y aunque todo en la configuración de PHP parece legítimo, las cargas grandes en conexiones más lentas resultan en 'HTTP/1.1 500 Internal Server Error'. Ahora que he visto esa cita en la primera respuesta, me estoy empezando a preguntar cuál es el verdadero negocio. Estaré pendiente de este hilo y trataré de desenterrar algo solo. – brezanac

Respuesta

20

Después de una rápida evaluación comparativa No creo que max_input_time tenga alguna relación con el manejo de grandes cargas por usuarios con conexiones lentas.

De http://us3.php.net/manual/en/info.configuration.php#ini.max-input-time

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. It is measured from the moment of receiving all data on the server to the start of script execution.

estoy usando PHP 5.3.8 y se utiliza la siguiente configuración .htaccess

php_value max_input_time 5 
php_value max_execution_time 1 
php_value upload_max_filesize "2048M" 
php_value post_max_size "2048M" 

Mi script de prueba es:

<?php 
if (!empty($_FILES)) { 
    echo '<pre>'; 
    var_dump($_FILES); 
    echo '</pre>'; 
} 
?> 
<form enctype="multipart/form-data" method="POST"> 
    File: <input name="userfile" type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 

Con varios prueba mi archivo 1.5G toma alrededor de 16-17 segundos para subir, 4-5 segundos para procesar, y tiempo de ejecución es esencialmente 0.

Con max_input_time 5 se completa el guión. Con esto configurado en 4 obtenemos PHP Fatal error: Maximum execution time of 4 seconds exceeded in Unknown on line 0, referer: http://localhost/test-upload.php

También parece que max_execution_time no tiene relación ya que lo mantuvimos en 1 durante todas las pruebas.

+0

Exactamente lo que estaba buscando. ¡Gracias! –

+6

Solo quiero decir, esta respuesta es incorrecta. En casos raros, la conexión lenta le dará error de tubería rota. Lo acabo de arreglar hoy, y es para configurar max_input_time a 600. Y estoy buscando ahora cómo calcular max_input_time, pero solo veo la respuesta incorrecta. –

+0

@ BenP.P.Tung, esto es importante. Por favor agregue más detalles. – Pacerier

5

Dependerá de cómo se vincule el PHP al servidor web.

Técnicamente es posible que el servidor web invoque PHP tan pronto como tenga los encabezados de solicitud, en cuyo caso PHP va a manipular los datos esperando que los datos POST aparezcan en Internet hasta que pueda completar las variables de solicitud (es muy posible que se exceda max_input_time). Pero más comúnmente, el servidor web retrasará la invocación de PHP hasta que tenga la solicitud completa (es mucho menos probable que se exceda max_input_time).

+2

¿Desea leer más sobre este tema? Esta es la primera vez que me encuentro con un reclamo de que el procesamiento de PHP se invoca justo al comienzo de la solicitud, lo que afecta a 'max_input_time'. Gracias. – brezanac

+0

@symcbean, ** ¿Qué implementación ** hace eso? No parece una buena forma de crear capas de aplicaciones, ya que el script PHP ahora debería molestarse con cosas como la conexión rota a la mitad, etc. – Pacerier

+0

Puedo confirmar que esto sucede. Obtenía un error de 500 en archivos grandes que tardaban más de 60 segundos en cargarse.Cambié solo max_input_time y lo solucionó. No solo eso, el manual php ahora tiene una redacción diferente a la citada anteriormente. Ahora dice que el tiempo comienza "en el momento en que se invoca PHP en el servidor", en lugar de "desde el momento en que se reciben todos los datos en el servidor". Puede leerlo aquí: http://goo.gl/FTfsD3. Lo extraño es el error en los registros de PHP que se ha alcanzado max_execution_time, incluso cuando lo configuré en 10000. – dallin

7

Realicé un amplio estudio en max_input_time. El tiempo de transferencia de red no es un factor.PHP como manejador de Apache (mod_php) o Nginx/PHP-FPM -pair arrojó resultados similares: PHP obtiene el archivo cargado una vez que se completa la transferencia y el servidor web entrega los datos. En mis pruebas 2 segundos max_input_time fue suficiente para manejar una carga de 800 MiB.

Todos los detalles están en http://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html

1

A partir de PHP 5.4, la carga de archivos PHP sin duda pueden ser afectados por max_input_time. Hace poco recibí un error de 500 en archivos que tardaron más de 60 segundos en cargarse. Cambié este valor único en mi php.ini y desapareció.

Además, la redacción en el manual es diferente ahora de lo que se cita en la respuesta aceptada. Ahora dice:

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. Timing begins at the moment PHP is invoked at the server and ends when execution begins.

Estaba usando PHP 5.4.16 nts e IIS 7.5. Aparentemente, PHP se invoca antes de que se cargue el archivo.

Una cosa interesante a tener en cuenta es que mis registros de errores de PHP dieron el error equivocado. Indicaron "Error fatal de PHP: tiempo máximo de ejecución de 10000 segundos excedido en ...". No importaba en qué estableciera max_execution_time, daría el mismo error con el nuevo número.

Cuestiones relacionadas