2012-07-06 12 views
5

Recientemente instalé un portal de descarga PHP en uno de nuestros servidores. Todo funciona bien, pero los usuarios no pueden cargar archivos de gran tamaño (~ 20 MB).¿Cómo puedo evitar que las cargas grandes de archivos Apache/PHP fallen?

que defina las siguientes configuraciones a los valores extremadamente grandes o ilimitadas:

memory_limit 
upload_max_filesize 
post_max_size 
memory_limit 

completa php.ini aquí: http://pastebin.com/NrqJvMVM

Sin embargo, todavía no se hace después de reiniciar el servidor.

¿Falta una configuración? ¿Tengo que actualizar cualquier valor en la configuración de Apache? ¿Podría un servidor de seguridad de alguna manera interferir con eso?

EDITAR: Comprobé phpinfo() y la configuración maestra aún muestra los valores anteriores. Sin embargo, el archivo de configuración C: \ Windows \ php.ini tiene los nuevos valores. ¿Estoy usando el archivo de configuración incorrecto?

Respuesta

14

puede probar la params en una secuencia de comandos, también. Tal vez esto ayude:

  1. max_execution_time = ini_set ("max_execution_time", "-1");
  2. post_max_size = ini_set ("post_max_size", "200M");
  3. memory_limit = ini_set ("memory_limit", "200M");
  4. upload_max_filesize = ini_set ("upload_max_filesize", "200M");

En .htaccess:

php_value upload_max_filesize 200M

memory_limit php_value 256M

max_execution_time php_value 18000

Aquí son buenos artículos sobre este tema: http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

¿Está Suhosin instalado en su servidor o usa fcgi ;-)?

+0

No uso Suhoshin o fcgi. Intenté agregar los valores a .htaccess, pero la carga del archivo aún no funciona. No recibo un mensaje de error ahora, pero el archivo nunca aparece en el servidor. – xsl

+0

Edité la pregunta, tal vez la información adicional te ayudará. – xsl

+0

Está funcionando ahora. Por algún motivo, php no pudo leer el archivo de configuración en el directorio de Windows. – xsl

2

Has escrito la variable post_max_size dos veces y de lo cual el valor de primero si 0 y el valor de segundo es 9999M, quita el primero y pruébalo.

+0

Lo intenté, pero no sirvió de nada. – xsl

+0

por qué aumentó tanto el valor de estas variables, simplemente configúrelas según sus necesidades, no más que eso. –

+0

El único valor realmente enorme es el tamaño de carga del archivo (9999 MB). Necesito un tamaño de carga ilimitado, pero 9999 MB es suficiente. – xsl

3

Tal vez, this artículo puede ayudarle. Puede añadir params a .htaccess

+0

Gracias, pero creo Tengo todos esos ajustes establecidos. – xsl

+0

Cuando estaba trabajando en grandes cargas, encontré este applet http://jumploader.com/ Que también puede usar php. Tal vez esto puede ser bueno para su proyecto. – Kerberos

1

Tal MAX_FILE_SIZE no se establece correctamente ...

<form enctype="multipart/form-data" action="index.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="filedata" type="file" /> 
<input type="submit" value="Send file" /> 
</form> 
+0

El portal de descarga ha estado funcionando en otros servidores, por lo que creo que el problema no se debe al código en sí. – xsl

1

Usted debe encontrar el archivo php.ini correcta =)

2

estoy usando el archivo de configuración incorrecta.

Bueno, phpinfo() te dice cuál estás utilizando. Mire Configuration File (php.ini) Path y Loaded Configuration File justo cerca de la parte superior de la salida.

6

Todas las configuraciones para su instalación se encuentran en el archivo php.ini. A veces, las directivas de apache .htaccess files pueden anular esta configuración o incluso en los propios scripts.

siguientes ajustes que tenemos que modificar -

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Los ajustes de configuración en detalle a continuación.

  • upload_max_filesize y post_max_size

    archivos suelen estar destinados en el servidor web en un formato conocido como 'multipart/form-data'. Post_max_size establece el límite superior de la cantidad de datos que una secuencia de comandos puede aceptar de esta manera. Idealmente, este valor debería ser mayor que el valor que estableció para upload_max_filesize.

    Es importante darse cuenta de que upload_max_filesize es la suma de los tamaños de todos los archivos que está cargando. post_max_size es el upload_max_filesize más la suma de las longitudes de todos los otros campos en el formulario más cualquier encabezado mime que el codificador pueda incluir. Dado que estos campos suelen ser pequeños, a menudo se puede aproximar el tamaño máximo de carga al tamaño máximo de publicación.

    De acuerdo con la documentación de PHP, puede establecer MAX_UPLOAD_LIMIT en su formulario HTML para sugerir un límite para el navegador.

  • memory_limit

    Cuando el motor PHP está manejando una entrada de correos que necesita para seguir algunos de los datos entrantes en la memoria. Esta directiva solo tiene efecto si ha utilizado la opción --enable-memory-limit en el momento de la configuración. Establecer un valor demasiado alto puede ser muy peligroso porque si se manejan varias cargas al mismo tiempo, toda la memoria disponible se agotará y otras secuencias de comandos no relacionadas que consumen mucha memoria también podrían afectar a todo el servidor.

  • max_execution_time y max_input_time

    Estos ajustes permiten definir el tiempo de vida máximo de la secuencia de comandos y el tiempo que el guión debe pasar en aceptar la entrada. Si se transfieren varios mega bytes de datos, max_input_time debe ser razonablemente alto. Puede anular la configuración en el archivo ini para max_input_time llamando a la función set_time_limit() en sus scripts.

Comentarios Adicionales

  • configuración de Apache

    El servidor web Apache tiene una directiva de configuración LimitRequestBody que restringe el tamaño de todos los datos POST independientemente del lenguaje de scripting web en uso. Algunas instalaciones de RPM configuran el cuerpo de solicitud de límite en 512 Kb. Deberá cambiar esto a un valor mayor o eliminar la entrada por completo.

  • Otras opciones

    Si va a manejar un gran número de transferencias de archivos simultáneas en su sitio web considere el uso de un componente del lado del servidor Perl o Java. PHP también es nuestro lenguaje de programación web favorito, pero Perl y Java están ligeramente adelantados en lo que respecta a la carga de archivos.

Consulte también:

  1. Upload large File upto 100MB using php
  2. upload large files using php, apache
  3. PHP: Uploading large files fail
+0

Gracias por sus respuestas perspicaces, espero que reciba los votos a favor que merece. Lamentablemente, ya resolví el problema hace unos días y acepté una respuesta que me ayudó a hacerlo. – xsl

+0

Sin problemas. He dado una respuesta exhaustiva porque las respuestas actuales no proporcionaban mucha información. –

1

he estado en su situación en el pasado y la mejor solución que encontré fue el uso de un tercero biblioteca para dividir los archivos en fragmentos en el lado del cliente y poner todo de nuevo en el r en el servidor. He encontrado esto: http://www.plupload.com/

Muy útil y efectivo. Funciona con una variedad de tecnologías diferentes, por lo que puede funcionar en la gran mayoría de las máquinas de los clientes. (flash, silverlight, archivo html5 api aso ...) ¡Salud!

+0

Gran ejemplo de cómo manejar esta descarga de código + completo: http://webdev-blog.com/ajax-upload-script-with-custom-folders/ – m1crdy

Cuestiones relacionadas