Foros de daboweb
MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: DocBrown en 04 de Diciembre de 2006, 10:54:08 pm
-
Buenas, estoy volviéndome loco con un script para subir archivos a un servidor con un formulario. Tengo los permisos de las carpetas pertinentes en 777 pero el is_uploaded_file() me devuelve false y no tira. Este mismo script lo usé en diferentes sitios sin ningún problema y no sé qué hacer, la verdad. ¿alguna idea?
-
Solo se me ocurre que pegues el código completo y a ver si alguien encuentra algún error o algo :)
-
Ahí va:
//nombre aleatorio para la foto
$caracteres="abcdefghijklmnopqrstuvwxyxABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$NumCaracteres=strlen($caracteres);
$nombreFoto="";
for($i=0;$i<10;$i++){
$num=rand(0,$NumCaracteres-1);
$nombreFoto.=$caracteres[$num];
}
$referencia=$_POST["referencia"];
//proceso de imágenes
$foto=$_FILES["foto"]["name"];
$ruta_foto="imagenes/".$foto;
$temporal=$_FILES["foto"]["tmp_name"];
if(is_uploaded_file($temporal)){
switch($_FILES["foto"]["type"]){
case "image/jpeg":
case "image/pjpeg":
move_uploaded_file($temporal,$ruta_foto);
$imagen=imagecreatefromjpeg($ruta_foto);
//chmod($ruta_foto,0777);
$original_x=imagesx($imagen);
$original_y=imagesy($imagen);
if($original_x>1024 || $original_y>1024){
$final_x=1024;
$final_y=round(($original_y * $final_x) / $original_x);
}else{
$final_x=$original_x;
$final_y=$original_y;
}
$final=imagecreatetruecolor($final_x,$final_y);
imagecopyresampled($final, $imagen, 0, 0, 0, 0, $final_x, $final_y, $original_x, $original_y);
imagejpeg($final,$ruta_foto);
break;
default: echo "No se va a procesar la foto. Debe estar en formato JPEG. ";
}
}else{
echo "Error al subir la foto.";
exit();
}
La creación aleatoria del nombre la hace correctamente, y he comprobado que en el formulario de envío los nombres de los input son correctos. El problema me viene en el if, que no lo cumple. No sé, es una cosa muy rara porque en la misma carpeta del mismo servidor hace unos días funcionaba y he recomprobado los permisos 17000 veces. ¿Será de la configuración del servidor?
-
El script así al primer vistazo lo veo bien... ¿No será un problema de las librerías GD?
-
Las librerías GD son para el manejo de imágenes no? Si es así no es ese el problema. Directamente no cumple la condición del if y salta al else. Estoy que no sé qué hacer. ¿Puede ser alguna configuración de servidor que no permita la subida de archivos por formulario?
-
Comprueba que esté file_uploads=On en el fichero de configuración php.ini
-
Pues sí, está en On. Ya no sé si cortarme las venas o dejármelas largas :cry:
-
Asegurate de que el fichero que quieres subir no supere el tamaño establecido en el campo "hidden" del formulario, ni el de la línea "upload_max_filesize" en el php.ini
-
Y un par de cosas más:
-Prueba descomentando esta línea del script -> //chmod($ruta_foto,0777);
-Echa un vistazo a este otro script (http://www.webmasterlibre.com/2006/06/29/comprobar-el-soporte-para-gd-en-tu-servidor/), para ver si dispones de las librerías GD (y si es así, revisa que sean la versión 2).
-
el upload_max_filesize está en 10M y estoy probando con unas pocas KB, las librerías GD están activadas (2.0.28) y el chmod lo comenté y descomenté varias veces. De cualquier forma, el tema de las librerías me daría errores en el proceso de las imágenes, pero no llega ahí, me da el mensaje que pongo en el else, es decir que no me cumple el "is_uploaded_file", con lo que está descartado el tema de librerías GD
-
Ok. El problema tal y como lo planteas puede apuntar a varias posibles causas:
-Permisos (lo descartamos porque veo que ya los has cambiado, tanto en los directorios como en los scripts).
-Problemas con el fichero (como me imagino que habrás probado con varias imágenes, también lo descartamos).
-Configuración del php.ini (los descartamos, pero de todas formas echa un vistazo a la directiva "upload_tmp_dir").
-Error en el formulario de envío (se podría descartar porque hace unos días te funcionaba, pero si quieres pega el código aquí y lo miramos).
Si hace unos días te funcionaba todo perfectamente y no has tocado nada, la verdad es que es raro que de pronto te deje de funcionar. Yo probaría a utilizar algun otro script para subir ficheros (para asegurarme de si es cosa del código o de la configuración).
Ya nos comentarás...
Suerte.
-
el upload_tmp_dir está en 'local value' '/hsphere/local/home/carpeta_del_sitio/tmp' y 'master value' en '/tmp'.
También me estoy dando cuenta de una cosa. Pongo los permisos en 777 y al volver a mirarlos, no sé, al día siguiente por ejemplo, vuelven a estar en 775 ¿?
No sé, el mismo script lo tengo alojado en otro servidor de pruebas y funciona a la perfección
-
¿Cual es la versión del intérprete? (si no lo sabes, lo puedes comprobar con la función "phpinfo" --->Ej: <? phpinfo(); ?>)
Para que funcione tu script, debe ser 4.0.1 o superior.
-
Es la 4.4.4
-
Bueno, pues misteriosamente ahora funciona. Así sin hacer nada :???:
-
Me alegro, esperamos a ver si se mantiene en orden y llegado el caso lo comentas y ya cerrariamos el tema.
Un saludo
-
Puedes cerrarlo ya si quieres. Si vuelve a dar problemas a lo bobo otra vez lo dejo todo y me dedico a la cría del cerdo vietnamita :-d
-
:mrgreen: :mrgreen: ok amigo... ;-)