Foros del Web » Programando para Internet » PHP »

Problemas al subir fichero al servidor

Estas en el tema de Problemas al subir fichero al servidor en el foro de PHP en Foros del Web. Porque puede ser que no se suban los ficheros al servidor? En local funciona bien, los sube a la carpeta /tmp/ en raiz tanto en ...
  #1 (permalink)  
Antiguo 15/02/2006, 03:50
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Exclamación Problemas al subir fichero al servidor

Porque puede ser que no se suban los ficheros al servidor?

En local funciona bien, los sube a la carpeta /tmp/ en raiz tanto en local como en el servidor (se supone). La carpeta tiene todos los permisos tanto arriba como abajo.

Accedo remotamente tanto a local como en servidor para buscar el nombre temporal del archivo con find -name "*nombre_temporal*", y en local lo encuentra, pero en el servidor no.

¿Que puede pasar? Ayuda por favor! es bastante urgente, llevo ya varias semanas con el error, y la pagina deberia estar funcionando.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #2 (permalink)  
Antiguo 15/02/2006, 04:16
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
¿Podrías decirnos la versión de tu PHP? ¿Puedes pegar el código de tu script aquí? ¿El SO del servidor?

Todas esas cosas nos pueden ayudar para saber por donde empezar a buscar tu error.

Saludos.
  #3 (permalink)  
Antiguo 15/02/2006, 04:43
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Informacion sobre el servidor:

http://www.fada.es/info.php
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #4 (permalink)  
Antiguo 15/02/2006, 04:53
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Parte del fichero donde es muuuuy posible que este el error:
Código PHP:
                                $foto_name $_FILES['file_foto']['name'];
                
$foto_size $_FILES['file_foto']['size'];
                
$foto_temp $_FILES['file_foto']['tmp_name'];
                
$foto_def $foto_temp;                
                
$foto_type $_FILES['file_foto']['type'];
                
                @
system('thumbs '.$foto_temp.' '.$thumb_width.' '.$thumb_height.' '.$foto_temp.'t');

                
// Cambiar tamaño de la foto si excede el ancho
                
$img imagecreatefromjpeg($foto_temp);
                
$y round(imagesy($img)*$pic_width_noticia/imagesx($img));
    
                
system('thumbs '.$foto_temp.' '.$pic_width_noticia.' '.$y.' '.$foto_temp.'r');
                
$foto_def .= "r";
                
$foto_size filesize($foto_def);
                echo 
addslashes($foto_def);
                
$query "INSERT INTO fichero (nombre, descripcion, tamano, datos, thumb, mimetype, ancho, alto) VALUES ('".
                     
$foto_name."', 'Foto de noticia: ".$titular."', ".$foto_size.", LOAD_FILE('".addslashes($foto_def)."'), LOAD_FILE('".
                         
addslashes($foto_temp)."t'), '".$foto_type."', ".$pic_width_noticia.", ".$y.")";
                
mysql_query($query); 
El error lo da en LOAD_FILE('".addslashes($foto_def)."') porque el archivo no existe.

"thumbs" es un programa en c que es el que copia el archivo (y redimensiona si es una imagen) En local funciona perfectamente, de todas formas he puesto tambien una pregunta en el foro de c a ver si es por ese programa...

Una cosa muy importante. Este codigo ha funcionado bien durante bastante tiempo, el problema ha surgido cuando en el servidor se ha tenido que actualizar el apache. Por eso pense que era un problema de rutas, pero la verdad es que no se donde puede estar el fallo, que no he conseguido solucionar. Ah! y el codigo no es mio, que lo he tenido que retomar de un compañero de trabajo que ya no esta.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #5 (permalink)  
Antiguo 15/02/2006, 05:52
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
No tengo mucho tiempo para ver ver el código pero a simple vista no veo errores, pero hay algo nos puede ayudar, adelante de la función system tiene un @ esto es para que cuando se produzca un error no lo muestre, prueba sacando el @ y di nos si larga un error.

Saludos.
  #6 (permalink)  
Antiguo 15/02/2006, 06:08
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Aunque lo quite no dara ningun error, el servidor esta configurado para no hacerlo, jeje. Es complicado cambiarlo, porque se le suele costar, y es posible que se bloquee el servidor, de todas formas estoy en ello desde el principio para ver que error me lanza, jeje.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #7 (permalink)  
Antiguo 15/02/2006, 08:57
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Primero... yo te diría que pruebes quitando ese @ y poniendo en la primera linea del script esto
Código PHP:
error_reporting(E_ALL); 
Si no lanza ningún error, buscamos por otra parte.

Segundo... ¿Estas seguro que el archivo llega al servidor? Si llega ¿Estas seguro que el problema no ese programa en C?...

Saludos.

PD: No veo ningún tipo de validación sobre el archivo y veo que agregas datos a la DB... al subir un archivo y tener problemas el script esta metiendo basura en la DB, ¿Verdad? Deberías arreglarlo.
  #8 (permalink)  
Antiguo 15/02/2006, 09:23
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
No se si he colocado bien esa funcion, porque no lanza ningun error.

La he puesto al principio de todo, y la he probado tal y como me la has puesto, y tambien pasandole el numero 2047 tal y como pone en php.net

Lo digo porque le he puesto a la funcion system un nombre de programa que no existe... tal como system(xxx); y no me ha dado ningun error.



Es muy posible que el problema sea ese programa de C, aunque me resulta muy extraño, porque ya te digo que en local funciona bien...




En referencia a como esta hecho la pagina... Yo no la he hecho, y no estoy nada de acuerdo en la manera en que esta planteada... Para empezar mete los archivos enteros en la base de datos, y te puedes imaginar lo enorme que se esta haciendo. Total, que al joderse, y al despedir al hombre que la hizo, me toca a mi repararla. Y seguramente me tocara tambien replantear la pagina, porque una base de datos de esa magnitud no es manejable. Pero en fin, ese es otro tema, jeje.


Por cierto. MUCHAS GRACIAS por toda la ayuda que me estas prestando
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #9 (permalink)  
Antiguo 16/02/2006, 04:39
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Definitivamente el programa de C no debe ser... En local funciona, y antes de recompilar el servidor tambien funcionaba. Apuesto a que es un tema de rutas, o incluso de permisos de escritura, lo que pasa es que no consigo hallar la solucion...

Los archivos se sulen subir a /tmp/ verdad? con un nombre de archivo parecido a phpDFj09Kl o algo asi. Esos datos son modificables (carpeta donde se sube, etc)? donde estan esos datos para comprobar que en el servidor con correctos?

Cuándo desaparece si no lo copias? Esta claro que ni siquiera los sube en una primera instancia, asi que si no existe, tampoco lo puedo copiar...

Sinceramente estoy muy perdido, necesito ayuda por favor! Gracias
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #10 (permalink)  
Antiguo 16/02/2006, 07:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Los archivos se sulen subir a /tmp/ verdad? con un nombre de archivo parecido a phpDFj09Kl o algo asi. Esos datos son modificables (carpeta donde se sube, etc)? donde estan esos datos para comprobar que en el servidor con correctos?
En la documentación oficial de PHP sobre "upload" de archivos veras todas esas directivas de php.ini que definen donde se almacenan temporalmente tus archivos que subes por HTTP vía script PHP.

Concretamente la directiva:
upload_tmp_dir = ....

Es la que indica el "path" (ruta) donde quedan tus archivos en tu servidor .. puedes cambiarlo si quieres e incluso definirlo en tus script con:

Por supuesto .. si cambias estas rutas, debes asegurarte que tienen permisos de escritura suficientes.

Cita:
Cuándo desaparece si no lo copias? Esta claro que ni siquiera los sube en una primera instancia, asi que si no existe, tampoco lo puedo copiar...
mm ¿Por qué no usas las librerias GD como en parte las usas para procesar tu imagen y las funciones nativas de PHP para tal fin ?..

Por otro lado .. fijate en este tutorial como procesar tu imagen para dejarlo en "binario" sobre un campo de tu BBDD .. Yo realmente no he usado nunca "LOAD_FILE" de SQL .. pero bueno .. si funciona será mejor. Siempre he usado un fopen() de PHP para abrir mi archivo hacia una variable y de ahí componer mi sentencia SQL (previa aplicación de los "addslasshes()" y demás).

http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/

Un saludo,
  #11 (permalink)  
Antiguo 16/02/2006, 07:32
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Lo que estoy intentando es solucionar el problema sin tocar demasiado como esta hecho. Es un proyecto grande, y no seria cuestion de una tarde cambiarlo todo. De todas formas creo que al final voy a tenerlo que hacer... jeje.

Gracias cluster, mirare a ver el php.ini, por si acaso hay algo cambiado.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #12 (permalink)  
Antiguo 16/02/2006, 12:36
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Cita:
Iniciado por oskarl
y no seria cuestion de una tarde cambiarlo todo
Tal vez sea lo mas saludable en tu caso, tenes varios puntos en contra, el primero es que no encontramos el error y apuesto que el error es ese programa externo, y el segundo es que en un tiempo mas y se te va a terminar yendo de las manos, o por lo menos eso creo.

Saludos.
  #13 (permalink)  
Antiguo 20/02/2006, 02:16
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Conozco el porque

Pues resulta que es un problema de permisos, pero es bastante extraño.

Estaba tan harto que hice el formulario para subir archivos mas simple que os podais imaginar, para comprobar si subia o no subia los archivos, y de paso puse el servidor para que lanzara errores.

El archivo se subia, pero no podia copiarlo por tema de permisos, pero es extraño, porque los permisos de la carpeta tmp son totales, es decir, un chmod 777.

Lo que voy a hacer es cargarme ese dominio, el espacio y todo, y volver a hacerlo, porque la prueba en otros dominios del mismo servidor funciona a la perfeccion...

Muchas gracias por la ayuda!!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #14 (permalink)  
Antiguo 20/02/2006, 16:20
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 14 años, 7 meses
Puntos: 9
Acabo de vivir un problema similar. Contra todo sentido común las carpetas con permisos 777 me estuvieron dando problemas por horas.

Le cambié a la carpeta su permiso a 755 y los archivos PHP en su interior con permisos 644 y todo está jalando de maravilla.

Espero que esto te ayude. Fueron horas de amargos ensayos y errores que me llevaron hasta lo más rebuscado de las cosas y al final fue tan sencillo como eso.

Saludos.
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 05:00.