validar txt subir subida servidor para ejemplo codigo archivos archivo _files php apache file-upload

txt - ¿Por qué $_FILES estaría vacío al subir archivos a PHP?



subir archivos txt php (20)

Asegúrese de que su form tenga el siguiente atributo enctype="multipart/form-data" .

Tengo WampServer 2 instalado en mi computadora con Windows 7. Estoy usando Apache 2.2.11 y PHP 5.2.11. Cuando intento subir un archivo desde un formulario, parece que se carga, pero en PHP, el array $_FILES está vacío. No hay ningún archivo en la carpeta c:/wamp/tmp . Configuré php.ini para permitir cargas de archivos y cosas por el estilo. La carpeta tmp tiene privilegios de lectura / escritura para el usuario actual. Estoy perplejo.

HTML:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form enctype="multipart/form-data" action="vanilla-upload.php" method="POST"> Choose a file to upload: <input name="uploadedfile" type="file" /><br /> <input type="submit" value="Upload File" /> </form> </body> </html>

PHP:

<?php echo ''file count='', count($_FILES),"/n"; var_dump($_FILES); echo "/n"; ?>


Asegúrese de que su elemento de entrada tenga un atributo ''nombre''. <input type="file" name="uploadedfile" />

Si esto falta, $ _FILES estará vacío.



En cuanto al HTML, parece que has configurado esa parte correctamente. Ya tiene el enctype="multipart/form-data" que es muy importante tener en el formulario.

En cuanto a su configuración php.ini , a veces en los sistemas existen múltiples archivos php.ini . Asegúrate de estar editando el correcto. Sé que dijiste que has configurado tu archivo php.ini para subir archivos, pero ¿también has establecido que upload_max_filesize y post_max_size sean más grandes que el archivo que estás intentando cargar? Entonces deberías tener:

file_uploads = On; sounds like you already did this post_max_size = 8M; change this higher if needed upload_max_filesize = 8M; change this higher if needed

¿Su directorio: "c:/wamp/tmp" tiene permisos de lectura y escritura? ¿Recordó reiniciar Apache después de realizar los cambios de php.ini ?


Es importante agregar enctype="multipart/form-data" a su formulario, por ejemplo

<form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form>


Estaba luchando con el mismo problema y probando todo, no obteniendo informes de errores y nada parecía estar mal. Tuve error_reporting (E_ALL) Pero de repente me di cuenta de que no había revisado el registro de apache y voilà! Hubo un error de sintaxis en el script ...! (falta un "}")

Por lo tanto, a pesar de que esto es algo evidente para verificar, se puede olvidar ... En mi caso (Linux) está en:

/var/log/apache2/error.log


Estaba vacío $_FILES porque después de <form enctype="multipart/form-data" method="post">

</div> <div style="clear:both"></div>

El código inicial era como

<span class="span_left">Photos (gif/jpg/jpeg/png) </span> <form enctype="multipart/form-data" method="post"> <input name="files[]" type="file" id="upload_file" /> <input type="button" id="upload" value="Upload photo" /> </form>

Decidí modificar y

<div> <span class="span_left">Photos (gif/jpg/jpeg/png) </span> <form enctype="multipart/form-data" method="post"> </div> <div style="clear:both"></div> <input name="files[]" type="file" id="upload_file" /> <input type="button" id="upload" value="Upload photo" /> </form> <div style="clear:both"></div>

Entonces la conclusión es que después de <form enctype="multipart/form-data" method="post"> debe ser <input name, type, id y no debe ser <div> o algunas otras etiquetas

En mi situación el código correcto era

<div> <span class="span_left">Photos (gif/jpg/jpeg/png) </span> </div> <div style="clear:both"></div> <form enctype="multipart/form-data" method="post"> <input name="files[]" type="file" id="upload_file" /> <input type="button" id="upload" value="Upload photo" /> </form> <div style="clear:both"></div>


Gracias a todos por las variadas respuestas integrales. Esos son todos muy útiles. La respuesta resultó ser algo muy extraño. Resulta que a PHP 5.2.11 no le gusta lo siguiente:

post_max_size = 2G

o

post_max_size = 2048M

Si lo cambio a 2047M , la carga funciona.


He aquí otra causa que encontré: cuando se utiliza JQuery Mobile y el atributo de formulario data-ajax se establece en verdadero, la matriz FILES estará vacía. Así que establece data-ajax en falso.


Me encontré con el mismo problema y descubrí que era mi IDE el que formaba parte del problema. Estaba lanzando el depurador directamente desde el IDE (PHPStorm) en lugar de simplemente usar el navegador directamente. La URL generada por IDE fue así:

"...localhost:63342/CB_Upload/index.php?_ijt=j2hcbacqepj87bvg66ncuohvne"

y solo usando:

"...localhost/CB_Upload/index.php"

funcionó bien Mi configuración es PC / Windows 10 / WAMPSERVER 3.0.6 64bit


Nadie mencionó esto pero me ayudó y no hay muchos lugares en la red que lo mencionen.

Asegúrate de que tu php.ini establece la siguiente clave:

upload_tmp_dir="/path/to/some/tmp/folder"

Deberá consultar con su servidor web si desean que use una ruta de archivo de servidor absoluta. Debería poder ver otros ejemplos de directorio en su archivo php.ini para determinar esto. Tan pronto como lo configuré, obtuve valores en mi objeto _FILES.

Finalmente, asegúrese de que su carpeta tmp y el lugar donde mueva los archivos tengan los permisos correctos para que puedan leerse y escribirse.


Otro posible culpable es apache redirects. En mi caso, tenía httpd.conf de apache configurado para redirigir ciertas páginas de nuestro sitio a versiones http y otras páginas a https versiones de la página, si es que aún no lo estaban. La página en la que tenía un formulario con una entrada de archivo era una de las páginas configuradas para forzar ssl, pero la página designada como la acción del formulario se configuró para ser http. Entonces, la página enviaba la carga a la versión ssl de la página de acción, pero apache la redirigía a la versión http de la página y se perdían los datos de la publicación, incluido el archivo cargado.


Si está intentando cargar una matriz de archivos, puede que necesite aumentar max_file_uploads en php.ini que está configurado por defecto en 20

Nota : max_file_uploads NO se puede cambiar fuera de php.ini. Ver PHP "Error" # 50684


Si está utilizando JQuery Mobile

El uso de un formulario de varias partes con una entrada de archivo no es compatible con Ajax. En este caso, debe decorar el formulario principal con data-ajax = "false" para asegurarse de que el formulario se envíe correctamente al servidor.

<form action="upload.php" method="post" enctype="multipart/form-data" data-ajax="false"> Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form>


Si su script principal es http://Some_long_URL/index.php tenga cuidado de especificar la URL completa (con index.php explícito y no solo http://Some_long_URL ) en el campo de action . Sorprendentemente, si no, se ejecuta el script correcto, pero con en vacio $ _FILES!


Tengo el mismo problema al buscar 2 horas, es muy sencillo verificar primero la configuración de nuestro servidor.

Ejemplo:

echo $upload_max_size = ini_get(''upload_max_filesize''); echo $post_max_size=ini_get(''post_max_size'');

cualquier tipo de tamaño de archivo es :20mb , pero nuestro upload_max_size es superior a 20mb pero array es null . La respuesta es que nuestro post_max_size debe ser mayor que upload_max_filesize

post_max_size = 750M upload_max_filesize = 750M


Tengo el mismo problema y ninguno de los temas fue mi error. Verifique su archivo .htaccess, si tiene uno, si está habilitado "MultiViews". Tuve que deshabilitarlos.


Tuve un problema similar y el problema estaba en el valor incorrecto en htaccess como mencionó Shamittomar.

Cambie php_value post_max_size 10MB a php_value post_max_size 10M


Yo también tuve problemas con $ _FILES vacíos. La lista de verificación anterior no menciona MultiViews en .htaccess, httpd.conf o httpd-vhost.conf.

Si tiene MultiViews configurado en la directiva de opciones para su directorio que contiene el sitio web, $ _FILES estará vacío, aunque el encabezado Content-Length muestre que el archivo que cargué.


Aquí hay una lista de verificación para cargar archivos en PHP:

  1. Compruebe php.ini para:
    file_uploads = On
    post_max_size = 100M
    upload_max_filesize = 100M

    • Es posible que necesite utilizar .htaccess o .user.ini si está en un alojamiento compartido y no tiene acceso a php.ini .
    • Asegúrese de que está editando el archivo ini correcto: use la función phpinfo() para verificar que su configuración realmente se esté aplicando.
    • También asegúrese de no escribir mal los tamaños, debe ser de 100M no de 100MB .
  2. Asegúrese de que su etiqueta <form> tenga el enctype="multipart/form-data" . Ninguna otra etiqueta funcionará, tiene que ser su etiqueta FORM. Verifique que esté escrito correctamente . Verifique que multipart / form-data esté rodeada de STRAIGHT QUOTES, no de comillas inteligentes pegadas desde Word O desde un blog de sitio web (¡WordPress convierte las comillas simples en comillas angulares!). Si tiene múltiples formularios en la página, asegúrese de que ambos tengan este atributo. Escríbalos manualmente o intente con comillas simples escritas manualmente.

  3. Asegúrese de no tener dos campos de archivo de entrada con el mismo atributo de name . Si necesita admitir múltiples, ponga corchetes al final del nombre:

    <input type="file" name="files[]"> <input type="file" name="files[]">

  4. Asegúrese de que sus directorios tmp y upload tengan los permisos correctos de lectura y escritura establecidos. La carpeta de carga temporal se especifica en la configuración de PHP como upload_tmp_dir .

  5. Asegúrese de que los directorios de destino de archivos y tmp / upload no tengan espacios en ellos.

  6. Asegúrese de que todos los <form> de su página tengan </form> etiquetas de cierre.

  7. Asegúrese de que su etiqueta FORM tenga method="POST" . Las solicitudes GET no admiten subidas de datos de formulario / multiparte.

  8. Asegúrese de que su etiqueta de entrada de archivo tenga un atributo NAME. ¡Un atributo de ID NO es suficiente! Los atributos de ID se usan en DOM, no para cargas de POST.

  9. Asegúrese de no estar utilizando Javascript para deshabilitar su campo <input type="file"> en el envío

  10. Asegúrese de no anidar formularios como <form><form></form></form>

  11. Compruebe su estructura HTML en busca de etiquetas no válidas / superpuestas como <div><form></div></form>

  12. También asegúrese de que el archivo que está cargando no tenga caracteres no alfanuméricos.

  13. Una vez, pasé horas tratando de descubrir por qué me estaba sucediendo esto de repente. Resultó que había modificado algunas de las configuraciones de PHP en .htaccess , y una de ellas (no estoy seguro de aún) hacía que la carga fallara y $_FILES estuviera vacío.

  14. Podría intentar evitar los guiones bajos ( _ ) en el atributo name="" de la etiqueta <input>

  15. Intente cargar archivos muy pequeños para restringir si se trata de un problema de tamaño de archivo.

  16. Verifique su espacio de disco disponible. Aunque es muy raro, se menciona en este comentario de la página Manual de PHP :

    Si la matriz $ _FILES de repente se vuelve misteriosamente vacía, aunque su formulario parezca correcto, debe verificar el espacio disponible en disco para su partición de carpeta temporal. En mi instalación, todas las cargas de archivos fallaron sin previo aviso. Después de mucho rechinar de dientes, traté de liberar espacio adicional, luego de lo cual las cargas de archivos volvieron a funcionar.

Fuente para algunos de estos puntos:
http://getluky.net/2004/10/04/apachephp-_files-array-mysteriously-empty/