Solución:
El problema descrito aquí fue resuelto por mí hace bastante tiempo, pero realmente no recuerdo cuál fue la razón principal por la que las cargas no funcionaban. Había varias cosas que debían arreglarse para que la carga pudiera funcionar. He creado una lista de verificación que puede ayudar a otras personas que tienen problemas similares y la editaré para que sea lo más útil posible. Como dije antes en el chat, estaba trabajando en un sistema integrado, por lo que algunos puntos pueden omitirse en sistemas no integrados.
-
Cheque
upload_tmp_dir
en php.ini. Este es el directorio donde PHP almacena archivos temporales mientras se cargan. -
Cheque
open_basedir
en php.ini. Si se define, limita los derechos de lectura / escritura de PHP a la ruta especificada y sus subdirectorios. Asegurarse de queupload_tmp_dir
está dentro de este camino. -
Cheque
post_max_size
en php.ini. Si desea cargar archivos de 20 Mbyte, pruebe con algo un poco más grande, comopost_max_size = 21M
. Esto define el tamaño más grande del mensaje POST que probablemente esté utilizando durante la carga. -
Cheque
upload_max_filesize
en php.ini. Esto especifica el archivo más grande que se puede cargar. -
Cheque
memory_limit
en php.ini. Esa es la cantidad máxima de memoria que puede consumir un script. Es bastante obvio que no puede ser menor que el tamaño de carga (para ser honesto, no estoy muy seguro de ello, PHP probablemente se está almacenando en búfer mientras copia archivos temporales). -
Asegúrese de estar comprobando el archivo php.ini correcto que es uno de los que utiliza PHP en su servidor web. La mejor solución es ejecutar el script con la directiva descrita aquí http://php.net/manual/en/function.php-ini-loaded-file.php (
php_ini_loaded_file
función) -
Verifique con qué usuario se ejecuta php (vea aquí cómo hacerlo: ¿Cómo verificar con qué usuario se ejecuta php?). He trabajado en diferentes distribuciones y servidores. A veces lo es
apache
, pero a veces puede serroot
. De todos modos, verifique que este usuario tenga derechos para leer y escribir en el directorio temporal y el directorio en el que está cargando. Verifique todos los directorios en la ruta en caso de que esté cargando en un subdirectorio (por ejemplo/dir1/dir2/
-marque ambosdir1
ydir2
. -
En plataformas integradas, a veces es necesario restringir la escritura al sistema de archivos raíz porque se almacena en una tarjeta flash y esto ayuda a extender la vida útil de esta tarjeta. Si está utilizando scripts para habilitar / deshabilitar la escritura de archivos, asegúrese de habilitar la escritura antes de cargar.
-
Tuve serios problemas con el monitoreo de carga de PHP> 5.4 basado en sesiones (como se describe aquí http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/) en algunas plataformas. Pruebe algo simple al principio (como aquí: http://www.dzone.com/snippets/very-simple-php-file-upload). Si funciona, puede probar mecanismos más sofisticados.
-
Si realiza algún cambio en php.ini, recuerde reiniciar el servidor para que se vuelva a cargar la configuración.
Luché con este problema durante mucho tiempo … Mi solución fue modificar el archivo php.ini, en la carpeta que contenía el script php. Esto fue importante, ya que modificar php.ini en la raíz no resolvió el problema (tengo un php.ini en cada carpeta para un control granular). Las entradas relevantes en mi php.ini se veían así … (es probable que el output_buffering no sea necesario para este problema)
output_buffering = On
upload_max_filesize = 20M
post_max_size = 21M