subir returns name files error ejemplo archivos php html

returns - post input file php



PHP-vacíe $_POST y $_FILES-al cargar archivos más grandes (5)

Tengo un problema siguiente, tengo un formulario HTML que carga un archivo con información adicional. Pero permite cargar archivos que solo tienen menos de 10 MB. Pero cuando el usuario intenta subir algo más grande, tanto $ _POST como $ _FILES están vacíos (esperaba que $ _POST tuviera algunos valores y $ _FILES tuviera algunos valores, pero indicaría que hay un error de carga).

Hay algunas preguntas (vacías $ _POST, $ _FILES) así, pero no encontré ninguna solución o explicación para ello.

Forma HTML:

<form enctype="multipart/form-data" method="post" action="upload.php"> <p> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> <input type="file" name="image" /> </p> <p> <input type="text" name="other_field" /> </p> </form>

upload.php

print_r($_POST); // array() print_r($_FILES); // array() exit;

Funciona bien, si el tamaño del archivo es inferior a 10 MB (el límite de tamaño del archivo es de 10 MB), y no quiero aumentarlo, solo quiero capturar un error en PHP.

Actualizado (explicación / solución) del sitio PHP

Desde el sitio de PHP (me perdí esta sección): http://us.php.net/manual/en/ini.core.php#ini.post-max-size

Establece el tamaño máximo de datos de publicación permitidos. Esta configuración también afecta la carga de archivos. Para cargar archivos grandes, este valor debe ser mayor que upload_max_filesize. Si el script de configuración habilita el límite de memoria, memory_limit también afecta a la carga de archivos. En general, memory_limit debe ser mayor que post_max_size. Cuando se usa un número entero, el valor se mide en bytes. La notación abreviada, como se describe en esta pregunta frecuente, también se puede usar. Si el tamaño de los datos de publicación es mayor que post_max_size, los superglobals $ _POST y $ _FILES están vacíos. Esto se puede rastrear de varias maneras, por ejemplo pasando la variable $ _GET al script que procesa los datos, es decir, y luego verificando si $ _GET [''processed''] está establecido.


Como se señala en la pregunta editada $ _POST y $ _FILES están vacíos cuando PHP descarta datos en forma silenciosa (sucede cuando los datos reales son más grandes que post_max_size). Como el encabezado HTTP y $ _GET permanecen intactos, se pueden usar para detectar los descartes.

Opción a)

if(intval($_SERVER[''CONTENT_LENGTH''])>0 && count($_POST)===0){ throw new Exception(''PHP discarded POST data because of request exceeding post_max_size.''); }

Opción b)
Agregue un parámetro GET que indique si los datos POST están presentes.



Hay algunos límites, tanto en el lado del cliente como del servidor.

En el lado del cliente, el campo MAX_FILE_SIZE no es de mucha utilidad, tal vez el navegador lo tome como una pista; sino que los navegadores siguen sus límites configurados.

En el lado del servidor, verifique php.ini para:

upload_max_filesize = 5M post_max_size = 5M max_input_time = ...

También revise el registro de Apache para ver notas sobre el cuerpo POST descartado o tal.


Puede verificar los errores de carga con:

if ($_FILES[''images''][''error''] !== UPLOAD_ERR_OK) { die("Upload failed with error code " . $_FILES[''images''][''error'']); }

Los códigos de error están definidos php.net/manual/en/features.file-upload.errors.php .


Puedo mencionar que si procesas formulario como a continuación

if(isset($_POST[''submit''])

si post_max_size es menor que los datos publicados, entonces $ _POST [''submit''] estará vacío