Input file en un formulario

Tengo un simple formulario con un input file y un submit, nada más. Quiero enviar un archivo al hacer el submit pero mi sorpresa es que al hacerlo no pasa el archivo. Si por ejemplo pongo una caja de texto y meto datos estos si pasan. Después de revisar mucho el código y usarlo en un dominio diferente al original he visto que es un problema de incompatibilidad con la versión php del servidor (en este caso arsys) ya que en local o en otro dominio eto funciona sin problemas.
He intentado recoger los datos con el $_FILES pero nada.
A ver si hay otra manera para poder recoger los datos de un archivo, no entiendo el porque no chuta y encima el servicio técnico poca ayuda da.
5

5 Respuestas

0 pts.
La subida de archivos está controlada en el php.ini, si lo tienen activo funciona, y si no no...
Los tres valores a configurar son:
file_uploads = On
upload_tmp_dir = /tmp
upload_max_filesize = 2M
Si no lo tienen activado, no podrás subir archivos.
Muchas gracias, me pondré en contacto con el servicio técnico y se les comentaré a ver si así se puede arreglar esto.
Muchas gracias,
165.700 pts.
El archivo que intentas subir se guarda en la carpeta temporal del servidor, por ello, si en el servidor no le asignan suficiente espacio en esa carpeta, imposibilitan la subida de archivos. La carpeta temporal no se puede modificar mediante un script php.
Para averiguar si está permitido subir archivos puedes hacer uso de las siguientes funciones:
if (ini_get("file_uploads")) {
// Si está permitido
$tamaño_maximo = ini_get("upload_max_filesize");
} else {
// No está permitido
}
El uso de $_FILES no debería darte ningún problema, es correcto. La versión 4 de php también admite $HTTP_POST_FILES.
Ya has comprobado que tu aplicación está bien, solo te falta comprobar si en el servidor está permitido subir archivos y el tamaño.
4.625 pts. Amplios Conocimientos y Experiencia en PHP-MySQL...
El código esta bien escrito. Ademas lo probé en mi servidor y funciona bien. El problema esta en la configuración del servidor. No debe haber permiso de escritura en el directorio temporario (cosa que me parece imposible) o bien en la configuración del php.
Habría que ver los siguientes parámetros en el php.ini:
- memory_limit
- max_input_time
- post_max_size
- upload_max_filesize
- max_execution_time
El valor de MAX_FILE_SIZE del campo hidden no puede ser mayor que el tamaño del archivo que se especifica en la variable upload_max_filesize
Según veo, tiene la version 4.3 del php. Asi que no hace falta usar HTTP_POST_FILE... sino directamente $_FILE[".."]
Yo creo que el problema esta en los parámetros de configuración:
Por ej veo que max_input_time tiene -1... ese es el tiempo máximo en segundos que el script puede invertir en analizar datos recibidos, no estoy seguro si con -1 significa que no hay tiempo limite o que. Eso podría ser el problema.
Pero por lo demás no veo ningún problema...
Otra cosa puede ser en php. Conf sobre el
Servidor apache ver la directiva LimitRequestBody.
Cualquier cambio en configuración del php, lo tienen que hacer los administradores del servidor.
Lo que si... no es un problema de código...
Hola,
Sigo igual, te copio el código de una simple página que he hecho solo para que al subir el archivo me imprima lo que he subido:
<?
if($ok=="ok")
{
echo "-->".$HTTP_POST_FILES["archivo"]["name"];
echo "<br>-->".$HTTP_POST_FILES["archivo"]["tmp_name"];
}
?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<form name="formulario" method="post" action="prueba.php" enctype="multipart/form-data">
<input type="hidden" name="ok" value="ok">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="file" name="archivo">
<img src="prueba.jpg">
<input type="submit" name="guardar" value="dale">
</form>
</BODY>
</HTML>
Esto lo puedes ver en http://www.rockestatal.com/prueba.php
No entiendo el porque no me pasa la variable file, he mirado la configuración del php y parece correcta, es esta:
http://rockestatal.com/info1.php
Es muy raro porque en otros servidores funciona, no entiendo por donde pueden venir los problemas.
Muchas gracias por la ayuda,
David
En la etiqueta <form... del htm asegurate que sea post y agregale: enctype="multipart/form-data" Además agregá un campo hidden asi:
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
De esta forma nunca tuve problemas... Si la página a la que manda el formulario se carga rapido (es decir.. no demora como si estuviera subiendo el archivo) el problema se debería solucionar de esta forma.
Luego en el php tienes:
$HTTP_POST_FILES["nombre_del_campo"]["name"]
el nombre del archivo
y ["nombre_del_campo"]["tmp_name"] el archivo en su ubicacion.
3.225 pts.
¿Me podrías enviar tus códigos?
Hola,
Este es el código, es muy simple:
<?
if($ok=="ok")
{
echo "-->".$archivo_name;
$posicion="prueba.jpg";
move_uploaded_file ($archivo,$posicion);
}
?>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<form name="formulario" method="post" action="prueba.php" enctype="multipart/form-data">
<input type="hidden" name="ok" value="ok">
<input type="file" name="archivo">
<img src="prueba.jpg">
<input type="submit" name="guardar" value="dale">
</form>
</BODY>
</HTML>
Creo que es culpa de servidor, a ver si puedo ponerme a mirar que me lo arreglen los de arsys.
Gracias
Pues efectivamente en tu código no veo ningún error. Sin embargo, hay otras formas para subir archivos. Te paso este código para que lo pruebes y veas si jala.
---------
// Subiendo archivo...
if ($archivo != "")
{
$fp = fopen($archivo,"rb");
while(!feof($fp))
{
$conte .= fread($fp,1024);
}
fclose($fp);
/* En algunos casos se el servidor requiere colocar la ruta absoluta donde quieres guardar el archivo, además, recuerda que en el directorio donde quieres guardar el archivo, PHP debe tener permisos de escritura, sobre todo sobre servidores linux. */
$tfile="/ruta_abosulta/$archivo_name";
$fp2 = fopen($tfile,"w");
fwrite($fp2,$conte);
fclose($fp2);
}// Termina de subir archivo
---------
5.550 pts.
Para subir archivos debes configurar el php.ini,
Los tres valores a configurar son:
upload_max_filesize = 2M
file_uploads = On
upload_tmp_dir = /tmp
Debes hablar con los del servicio técnico para que revisen esta configuración.
Me han pasado la configuración del php y sale correcto, aquí la puedes ver:
http://rockestatal.com/info1.php
No se si hay otra cosa que pueda fallar, a ver si me puedes echar un cable.
Gracias!
Lo único que se me ocurre que pueda pasar si la configuración del correo esta bien, es que el espacio en disco en el servidor debe estar limitado para la carpeta en donde se suben los archivos.
Habla con los de servicio técnico y preguntales si esta carpeta tiene capacidad para el archivo que deseas subir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas