Foros del Web » Programando para Internet » PHP »

no puedo subir archivo por ftp

Estas en el tema de no puedo subir archivo por ftp en el foro de PHP en Foros del Web. Hola Sobre el siguiente código no consigo subir la foto. Siempre obtengo "fallo al escribir" Ya no se donde mirar porque ni en la documentación ...
  #1 (permalink)  
Antiguo 17/12/2005, 07:44
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 14 años, 4 meses
Puntos: 3
Pregunta Problema al subir archivos con ftp_put

Hola
Sobre el siguiente código no consigo subir la foto. Siempre obtengo "fallo al escribir"

Ya no se donde mirar porque ni en la documentación de php ni en google encuentro una causa justificada.

El archivo remoto he probado a ponerle permisos 777 y da igual

Código PHP:
if (!$id_ftp=ConectarFTP()) //comprobado que se conecta bien al servidor 
   
{   echo "No se puede conectar al servidor.";
       return;
   }

$archivo_remoto1="foto.jpg";
$archivo_local1="c:\foto.jpg"// comprobada que la foto existe
if (!ftp_put($id_ftp,$archivo_remoto1,$archivo_local1,FTP_BINARY)) 
   {   echo 
"fallo al escribir";
   }
ftp_quit($id_ftp); //Cierra la conexion FTP 
  #2 (permalink)  
Antiguo 17/12/2005, 23:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 14 años, 4 meses
Puntos: 3
La verdad es que por mas vueltas que le doy no acabo de ver la razón porque a mi entender eso está bien.

He probado a cambiar subir un archivo que allí no existe y me pasa igual.
También he probado a escribir directamente el archivo que quiero subir y da igual.

Lo que si he visto después de darle muchas vueltas (no creo que tenga que ver con eso) es que para elegir el archivo utilizo un control file en un formulario. Este formulario envía la información a otra página donde se debería subir ese archivo.

Allí escojo algo como "c:\Document & Settings\usuario\Mis Documentos\p.jp" y luego veo que lo que se procesa (y por consiguiente lo que se envía a la página de subir archivos es "c.\\Document & Settings\\usuario\\Mis Documentos\\p.jpg" cosa que tampoco entiendo, pero desde luego no ayuda aunque no tiene que ver con mi problema pues aunque meta yo directamente el path bien "c:\Document & Settings\usuario\Mis Documentos\p.jpg" el resultado sigue siendo el mismo.

No lo comprendo
  #3 (permalink)  
Antiguo 18/12/2005, 00:10
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 14 años, 4 meses
Puntos: 3
Se me ha ocurrido que podría ser una pista el log del servidor
Cita:
Jul 21 10:56:35 servidor proftpd[2305] servidor ProFTPD 1.2.10 (stable) (built do mrt 22 18:28:32 CET 2001) standalone mode STARTUP
Jul 21 10:57:15 servidor proftpd[2309] servidor (servidor[192.168.0.253]): FTP session opened.
Jul 21 10:57:15 servidor proftpd[2309] servidor (servidor[192.168.0.253]): mod_delay/0.4: delaying for 9 usecs
Jul 21 10:57:15 servidor proftpd[2309] servidor (servidor[192.168.0.253]): USER Gedeon: Login successful.
Jul 21 10:57:15 servidor proftpd[2309] servidor (servidor[192.168.0.253]): mod_delay/0.4: delaying for 1349 usecs
Jul 21 10:57:15 servidor proftpd[2309] servidor (servidor[192.168.0.253]): FTP session closed.
Viendo esto entiendo que el servidor no ha llegado ni a enterarse de que se intentaba una actualización de un archivo. De hecho dice que el usuario se logea correctamente, luego el delay y luego cierra la sesión.

¿Hay alguna claúsula en php.ini que me pueda estar dando problemas si no tiene el valor correcto?

Por cierto debo decir que no tengo ningún problema para actualizar datos con cute-ftp y smart-ftp.

¿?
  #4 (permalink)  
Antiguo 19/12/2005, 10:19
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 14 años, 4 meses
Puntos: 3
no puedo subir archivo por ftp

Hola
El otro día puse un post sobre esto pero no obtuve respuestas y creo que se debe a que puse mucha información y quedó muy espeso así que pongo esto descartando las pruebas que hice a ver si alguien me encuentra la solución

Quiero subir el archivo c:\p.jpg a una carpeta llamada galeria

Código PHP:
if (!$id_ftp=ConectarFTP()) 
{ echo 
"No se puede conectar al servidor. n";
   return;
} else {
   
$Resul[email protected]ftp_chdir($id_ftp,"Galeria");
   if (!
$Resul) {
      echo 
"fallo al bajar a Galeria";
      return;
   }
   
$archivo_remoto1="p.jpg";
   
$archivo_local1="c:\p.jpg";
   
$Resul=ftp_put($id_ftp,$archivo_remoto1,$archivo_local1,FTP_BINARY);
   if (!
$Resul) {
      echo 
"fallo al escribir";
      echo 
$id_ftp."-".$Resul;
   }
   
ftp_quit($id_ftp);

Siempre me escribe "fallo al escribir" y debajo "id resource=#2"-1

De donde entiendo que ha conectado y ftp_put ha devuelto el valor '1'. Además si en el chdir pongo un directorio que no existe obtengo el error así que eso demuestra que se conecta y si el nombre está bien hace chdir a ese directorio sin problemas.

Naturalmente no se ha grabado nada y en el log del servidor aparece el login, un delay y el quit, pero ningún intento de subir nada.

He probado con dos servidores, uno mío y otro de un amigo y en ambos igual.

¿Alguien tiene una idea de por donde van los tiros?
  #5 (permalink)  
Antiguo 19/12/2005, 11:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
El otro día puse un post sobre esto pero no obtuve respuestas y creo que se debe a que puse mucha información y quedó muy espeso así que pongo esto descartando las pruebas que hice a ver si alguien me encuentra la solución
Pues aquí terminé de espesar el tema .. Si ves que no obtienes respuestas, por favor continua con el hilo de tus mensajes e insiste en ellos.

Un saludo,
  #6 (permalink)  
Antiguo 19/12/2005, 12:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías indicar todo el código que usas y explicar que quieres hacer realmente.

Hablas que tienes un:
Cita:
Lo que si he visto después de darle muchas vueltas (no creo que tenga que ver con eso) es que para elegir el archivo utilizo un control file en un formulario. Este formulario envía la información a otra página donde se debería subir ese archivo.
Si el "control file" te refires a un campo file de un formulario HTML .. El "upload" del archivo sube al servidor por HTTP (no por FTP!!!!).

Como uno suele estar "acostumbrado" a ver y usar "FTP" para subir archivos al servidor .. cuando vé en el manual de PHP que hay funciones de "FTP" se empeña uno en usarlas. NO es así .. ese es un error de "conceptos" .. Cuando subes un archivo por un "formulario" HTML .. lo haces por HTTP. PHP lo recibe y lo procesa para: a) dejarlo en el mismo servidor que corre PHP .. b) moverlo a otro servidor por el protocolo que corresponda .. por ejemplo FTP.

Si el archivo lo vas a dejar en el mismo servidor que corre PHP .. no tiene sentido usar funciones de FTP.

Revisa la documentación oficial de PHP:
http://www.php.net/manual/en/features.file-upload.php

Por lo demás igualmente podrías "tomar" el archivo desde donde PHP lo deja temporalmente (lo indica tu php.ini en su directiva upload_tmp_dir ...) hacia donde quieras por FTP usando tus funciones .. pero tomando como "origen" la variable que contiene el archivo (su nombre temporal y ruta donde está): $_FILES['file']['tmp_name'] ..

Si no te queda claro esto .. indicalo .. por qué es necesario que sepas lo que estás intentando hacer y como funciona todo esto .. sino irás probando por el mál camino o intentando hacer cosas que NO son posibles.

Un saludo,
  #7 (permalink)  
Antiguo 19/12/2005, 12:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si quieres seguir intentando por FTP tu Uplodad (útil si tocas con un servidor en "Safe mode") .. usa este ejemplo:

http://www.forosdelweb.com/showpost....05&postcount=5

Un saludo,
  #8 (permalink)  
Antiguo 20/12/2005, 03:35
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 14 años, 4 meses
Puntos: 3
Hola
Primero gracias por responder

En este formulario elijo una foto local que quiero subir al servidor. La elección es enviada a otra rutina que se encarga de subirla

Código PHP:
<form action='Grabafoto.php' method='get' enctype='multipart/form-data'>
  <
table width='100%'  border='0'>
     <
tr>
        <
tdSeleccione la foto
           
<input type='file' name='FotoLocal'>
        </
td>
    </
tr>
    <
tr>
        <
td><div align='center'>
               <
input type='submit' name='Submit' value='Publicar'>
        </
td>
    </
tr>
  </
table>
</
form
Esta es la rutina grabafoto.php donde se recibe el nombre del archivo que quiero subir.
Código PHP:
$FotoLocal=$_GET['FotoLocal']; //nombre del archivo original local 

define("SERVER","192.168.0.253"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","Gedeon"); //Nombre de Usuario
define("PASSWORD","123456"); //Contraseña de acceso
define("PASV",true); //Activa modo pasivo

$FotoRemota="Foto11.jpg";

if (!
$id_ftp=ConectarFTP()) 
   {   echo 
"No se puede conectar al servidor. \n";
       return;
   }
   
ftp_chdir($id_ftp,"Galeria");
$Resul=ftp_put($id_ftp,$fotoRemota,$FotoLocal,FTP_BINARY);
if (!
$Resul
   {   echo 
"fallo al escribir";
   } 
ftp_quit($id_ftp); //Cierra la conexion FTP

function ConectarFTP()
{
   
$id_ftp=ftp_connect(SERVER,PORT); 
   
$r=ftp_login($id_ftp,USER,PASSWORD); 
   
$r=ftp_pasv($id_ftp,PASV);
   return 
$id_ftp;

He comprobado que conecta bien (de hecho aparece en el log del servidor) y también que hace bien el chdir (si pongo una carpeta que no existe da error), también termina bien la conexión, pero no consigo que me haga el ftp_put (de hecho ni siquiera llega a aparecer el intento en el log del servidor).

Siempre obtengo "fallo al escribir".

¿Puede ser porque el archivo de la foto esté abierto? (pues se está visualizando en la página anterior)

No veo diferencia con el código que me has puesto como ejemplo.

Un saludo y gracias por responder.
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 19:27.