Foros del Web » Programando para Internet » PHP »

problema con upload

Estas en el tema de problema con upload en el foro de PHP en Foros del Web. Hola a todos, Tengo un script donde hago uploads $archivo_nombre = $_FILES['txtFile']['name']; if(!empty($archivo_nombre)) { $archivo = $_FILES["txtFile"]; $archivo_tmp = $_FILES["txtFile"]["tmp_name"]; $binario_contenido = addslashes(fread(fopen($archivo_tmp, "rb"), filesize($archivo_tmp))); ...
  #1 (permalink)  
Antiguo 09/12/2004, 09:23
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
problema con upload

Hola a todos,
Tengo un script donde hago uploads


$archivo_nombre = $_FILES['txtFile']['name'];
if(!empty($archivo_nombre))
{
$archivo = $_FILES["txtFile"];
$archivo_tmp = $_FILES["txtFile"]["tmp_name"];
$binario_contenido = addslashes(fread(fopen($archivo_tmp, "rb"), filesize($archivo_tmp)));
$binario_nombre=$_FILES['txtFile']['name'];
$binario_peso=$_FILES['txtFile']['size'];
$binario_tipo=$_FILES['txtFile']['type'];

$dir = $_SERVER['DOCUMENT_ROOT'].$upload_path."/";
$dir .= $_FILES['txtFile']['name'];

Este lo uso para subir fotos y videos.

El problema esque me da error siempre que quiero subir archivos mayores de 2 M.


Warning: fopen("", "rb") - Inappropriate ioctl for device in /usr/domain/gezond/www/data/easylearning/beheer/questions/file_upload.php on line 16

Warning: stat failed for (errno=2 - No such file or directory) in /usr/domain/gezond/www/data/easylearning/beheer/questions/file_upload.php on line 16

Warning: fread(): supplied argument is not a valid File-Handle resource in /usr/domain/gezond/www/data/easylearning/beheer/questions/file_upload.php on line 16
Uploading niet succesvol,probeer opnieuw...

Decir que la linea 16 donde me da error es esta

$binario_contenido = addslashes(fread(fopen($archivo_tmp, "rb"), filesize($archivo_tmp)));

A que puede ser debido esto y como puedo solucionarlo??

Muchas gracias
__________________
saludos
  #2 (permalink)  
Antiguo 09/12/2004, 09:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,
Cita:
fopen("", "rb")
Pues parece que $archivo_tmp te esta tomando una cadena vacia, es decir, no te esta subiendo el fichero. Usa is_uploaded_file() para ver si se subio correctamente.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/12/2004, 02:25
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
Hola josemi,
Primero gracias por contestar.

Dices que $archivo_tmp me toma una cadena vacia pero no es asi porque cuando subo ficheros menos pesados o fotos si que los sube.

En mi script si que tengo puesto el is_uploaded_file():

if (!move_uploaded_file($archivo_tmp,$dir))
{
die("Uploading niet succesvol,probeer opnieuw...");
}
else
{
header("location:http://". $_SERVER['HTTP_HOST']. $path ."/beheer/questions/$return_uploadsite?file=$archivo_nombre");
}
Y me sigue dando el error.

Puedes darme otra idea???

Gracias


Te pongo todo el script por si acaso


session_start();

if(!session_is_registered('idgroup')){
header("location:http://". $_SERVER['HTTP_HOST']. $path ."/beheer/login_beheer.php", FALSE);
}

$archivo_nombre = $_FILES['txtFile']['name'];
if(!empty($archivo_nombre))
{
$archivo = $_FILES["txtFile"];
$archivo_tmp = $_FILES["txtFile"]["tmp_name"];
$binario_contenido = addslashes(fread(fopen($archivo_tmp, "rb"), filesize($archivo_tmp)));
$binario_nombre=$_FILES['txtFile']['name'];
$binario_peso=$_FILES['txtFile']['size'];
$binario_tipo=$_FILES['txtFile']['type'];

$dir = $_SERVER['DOCUMENT_ROOT'].$upload_path."/";
$dir .= $_FILES['txtFile']['name'];

if (!move_uploaded_file($archivo_tmp,$dir))
{
die("Uploading niet succesvol,probeer opnieuw...");
}
else
{
header("location:http://". $_SERVER['HTTP_HOST']. $path ."/beheer/questions/$return_uploadsite?file=$archivo_nombre");
}

}
else
{
$binario_contenido = "";
$binario_nombre="";
}

?>
__________________
saludos
  #4 (permalink)  
Antiguo 10/12/2004, 02:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Dices que $archivo_tmp me toma una cadena vacia pero no es asi porque cuando subo ficheros menos pesados o fotos si que los sube.
Mira http://www.php.net/manual/en/feature...n-pitfalls.php . Puede que tu PHP no soporte el tamaño del fichero.
Cita:
En mi script si que tengo puesto el is_uploaded_file():
if (!move_uploaded_file($archivo_tmp,$dir))
{
die("Uploading niet succesvol,probeer opnieuw...");
}
else
{
header("location:http://". $_SERVER['HTTP_HOST']. $path ."/beheer/questions/$return_uploadsite?file=$archivo_nombre");
}
Y me sigue dando el error.
Eso no is_uploaded_file() (www.php.net/is_uploaded_file), es move_uploaded_file(). El is_uploaded_file() lo deberias poner en lugar de !empty($archivo_nombre).

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 14/12/2004, 08:31
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
Lo siento josemi pero sigue sin funcionar

Alguna otra idea??

Gracias
__________________
saludos
  #6 (permalink)  
Antiguo 14/12/2004, 08:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Mira http://www.php.net/manual/en/feature...n-pitfalls.php . Puede que tu PHP no soporte el tamaño del fichero.
¿Has comprobado eso? Si dices que te funciona con ficheros pequeños entonces es culpa del tamaño del fichero.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 14/12/2004, 08:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En muchas configuraciones de PHP (sobre todo en modo seguro - safe mode) no vas a poder hacer directamente:

$archivo_tmp = $_FILES["txtFile"]["tmp_name"];
$binario_contenido = addslashes(fread(fopen($archivo_tmp, "rb"), filesize($archivo_tmp)));

En esos casos, tendrías que mover tu archivo a su destino definitivo:
Código PHP:
move_uploaded_file($_FILES["txtFile"]["tmp_name"],$_FILES["txtFile"]["name"]); 
Sólo la función move_uploaded_file() tiene permisos para "mover" o leer el archivo desde la ruta que queda al subirlo por HTTP vía PHP (upoload) .. Si lo deseas puedes aplicar un "if()" como te comentó josemi sobre si "subió" el archivo .. entonces .. lo moves y realizas el resto de procesos.

y de ahí tomar la ruta que quedó el archivo para "abrilo" con:
Código PHP:
$binario_contenido addslashes(fread(fopen(($_FILES["txtFile"]["name"], "rb"), filesize(($_FILES["txtFile"]["name"])));
// haces todo lo que tengas que hacer con el archivo ... 
A su vez . .si no requieres ya ese archivo "temporal" ahí .. lo borras con:
Código PHP:
unlink($_FILES["txtFile"]["name"]); 
Otro detalle (al margen) .. deberías usar los arrays superglobales $_SESSION para referirte a tus variabels de sesión ..

A su vez . .despues de un header() que redireccionas deberías usar un exit; el objetivo es que termine la ejecución de tu script en ese punto .. eso te puede plantear otro tipo de problemas inesperados a futuro ..

Código PHP:
if(!session_is_registered('idgroup')){
header("location:http://"$_SERVER['HTTP_HOST']. $path ."/beheer/login_beheer.php"FALSE);
exit;

Un saludo,

Última edición por Cluster; 14/12/2004 a las 08:59
  #8 (permalink)  
Antiguo 14/12/2004, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ops! .. no había leido el comentario:

Cita:
Pues parece que $archivo_tmp te esta tomando una cadena vacia, es decir, no te esta subiendo el fichero. Usa is_uploaded_file() para ver si se subio correctamente.
Bueno .. dejo mi anterior comentario .. en realizad debería usarse como lo propongo para evitar problemas con PHP y configuraciones menos permisivas.

Por lo demás .. de que tamaños hablamos cuando dice que no funciona? .. sube el archivo o no sube completo? .. Por qué Mysql en su definición de tabla para el campo "binario" también define tamaño (si estás usando mi "tutorial" publicado en este foro sobre archivos binarios .. ahí mismo dejé comentarios al respecto)

Un saludo,

Un saludo,
  #9 (permalink)  
Antiguo 16/12/2004, 07:02
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
Gracias a los dos pero he probado todo lo que me dijisteis y nada.
Revisando uno de los threads encontre esto

http://www.forosdelweb.com/f18/problema-subir-archivo-215775/

Aqui dicen que puede ser el LimitRequestBody y que hay quer configurarlo en php.conf o http.conf de apache.

pero he mirado en mis archivos y no encuentro el LimitRequestBody

Si mis archivos php estan en un servidor con soporte php deberia configurarlos ahi?? y como??

Gracias
__________________
saludos
  #10 (permalink)  
Antiguo 16/12/2004, 09:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
LimitRequestBody

Si mal no recuerdo es para Apache versión 2.x .. y el php.conf sólo lo he visto en PHP bajo Linux..

Pero .. lo que no has definido bien es hasta que tamaño de archivo te deja subir tu actual configuración de PHP/Apache.

Un saludo,
  #11 (permalink)  
Antiguo 16/12/2004, 09:35
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
http://www.php.net/manual/en/feature...oad.errors.php , ahi tienes lo que significan los codigos de error de $_FILES["txtFile"]["error"]. Asi sabras si es problema del tamaño.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 17/12/2004, 03:19
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
Cluster

No lo se bien pero archivos de 500 y 600 kb suben bien.
Los archivos que me dan error son de 2 Mb.
__________________
saludos
  #13 (permalink)  
Antiguo 17/12/2004, 05:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Intenta revisar los links que josemi te ha dado . .ahí veras directivas de PHP que ajustan cosas como:

upload_tmp_dir
upload_max_filesize

y otras directivas que debes ver que valor tienen en tu caso ..

Por ejemplo . .la última por defecto suele estar a 2 Mbytes .. así que estás justo en el límite del ejemplo que indicas de archivo que no te sube ..

Si tienes acceso a tu php.ini podrás aumentar dicho valor .. sino, tendrás que consultar a tu administrador para que lo haga.

Un saludo,
  #14 (permalink)  
Antiguo 17/12/2004, 06:32
Avatar de Kalili  
Fecha de Ingreso: enero-2002
Ubicación: Gate 69
Mensajes: 210
Antigüedad: 15 años, 11 meses
Puntos: 0
Teneis razon
Consulte el php.ini de mi servidor y el upload_max_filesize estaba a 2M
Dicen que por problemas de seguridad lo tienen puesto a ese tamano max.
Van a mirar a ver si pueden aumentarlo.

Gracias por todo y espero que sea ese el problema
__________________
saludos
  #15 (permalink)  
Antiguo 17/12/2004, 06:59
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Gracias por todo y espero que sea ese el problema
Si, ese es.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:06.