• Jueves 14 de Noviembre de 2024, 18:10

Autor Tema:  Ftp En Php -subir Archivos-  (Leído 2400 veces)

Kyrylys

  • Miembro activo
  • **
  • Mensajes: 80
    • Ver Perfil
Ftp En Php -subir Archivos-
« en: Lunes 19 de Febrero de 2007, 19:28 »
0
hola me gustaia que me echaseis un ojo a esto a ver si entre todos encontramos una solución.
estoy haciendo la parte de subir archivos a un servidor en unix a través de php.
el problema es que sólo me sube el archivo si está en el mismo directorio que la web.

trabajo con wamp y el servidor tiene una version  php 4.3.9

yo lo que quiero es que al pasarle un archivo mediante un input type="file"
me deje subirlo desde cualquier directorio de pc, que para algo deja examinar ;)
pero como digo solo me deja si esta en el mismo directorio.


Código: Text
  1. <?php
  2. require ("global.php");
  3. echo("conectando a ftp.........$ftp_server  $ftp_user  $ftp_pass");
  4.  
  5. $conn_id = ftp_connect($ftp_server);
  6.  
  7. // login with username and password
  8. $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
  9.  
  10. if(!$login_result)
  11. {
  12.    echo("no conecta");
  13. }
  14. else {echo("\n conecta!!!!!!!!<br>");}
  15. ftp_pasv($conn_id,TRUE);
  16. //root del server donde sta alojado
  17. $root=$HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  18.  
  19.  
  20. $local_file=$_REQUEST["archivo"];
  21. echo $local_file;
  22.  
  23. $server_path=$root;
  24.  
  25.  
  26. if (ftp_put($conn_id,"html/".$local_file,$local_file,FTP_BINARY))
  27. {
  28.   echo ("Se ha subido el archivo".$local_file);
  29. }
  30. else
  31. {
  32.    echo ("\nWWWWWaaaaaacccccCCCCCKKKKkkkk<br>".$server_path."<br>".$local_file);
  33.  }
  34. // close the connection*/
  35. ftp_close($conn_id);
  36. ?>
  37.  

he probado con dirname y basename y basename me lo identifica bien, pero de dirname me devuelve . -un punto-
alguna hipótesis?
gracias


su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Ftp En Php -subir Archivos-
« Respuesta #1 en: Martes 20 de Febrero de 2007, 01:22 »
0
Yo te puedo dar otra solucion mas linda  pero es en Perl... no se si te sirva, pero primero:

No se supone que tienes que ir al directorio (cwd) antes de subier el fichero?
Si no conecta... por que el programa sigue corriendo y no para?

Código: Text
  1. #!/usr/bin/env perl
  2. use strict;
  3. use Net::FTP;
  4. my $ftp_server = "algun_servidor.com";
  5. my ($usuario, $password) = ('usuario', 'password123');
  6. my $ftp = Net::FTP->new($ftp_server, Debug => 0) or die "No se pudo conectar a $ftp_server: $@\n";
  7. $ftp->login($usuario, $password) ir die "Login error ", $ftp->message;
  8. $ftp->cwd("/html") or die "CWD /html : ", $ftp->message;
  9. $ftp->put("fichero") or die "put fichero: ", $ftp->message;
  10. $ftp->quit;
  11.  
  12.  
Claro, esto no esta diseñado para CGI, habria que usar CGI (una 7 lineas mas o menos, no se)

Pero espero que te de una idea  :)
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Kyrylys

  • Miembro activo
  • **
  • Mensajes: 80
    • Ver Perfil
Re: Ftp En Php -subir Archivos-
« Respuesta #2 en: Martes 20 de Febrero de 2007, 09:58 »
0
gracias, pero aún no me he metido con perl  :losiento:

de todas formas la conexión la hace sin ningún problema, el problema es que solo sube si el archivo está en el mismo directorio del gestor_ftp, si le dices que lo coja de otro directorio (escritorio, mis documentos, o la carpeta que sea) es cuando no lo sube y da el waaack!!

Citar
No se supone que tienes que ir al directorio (cwd) antes de subier el fichero?
cwd?? no entendí esa parte. y si, lo que quiero es pasarle el directorio en el que esté el archivo dentro de todo el pc
-siento reiterarme-


su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Ftp En Php -subir Archivos-
« Respuesta #3 en: Martes 20 de Febrero de 2007, 21:17 »
0
Buno, lo de Perl no importa, solo era un ejemplo... solo queria mostrar la estructura.

CWD quiere decir change work directory pero para poner un fichero en X lugar se puede hacer (no se si con esa libreria de PHP) directamente con ftp_put puesto que tienes que dar el nombre local (del fichero) y el que tomara en el servidor ftp.

Código: Text
  1. <?php
  2. require ("global.php");
  3. echo("conectando a ftp... $ftp_server  $ftp_user  $ftp_pass"); //esto no es seguro!!!!
  4.  
  5. $conn_id = ftp_connect($ftp_server);
  6.  
  7. // login with username and password
  8. $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
  9.  
  10. if(!$login_result)
  11. {
  12.   echo("no conecta");
  13.   //aqui deberi de terminal el programa, depronto con exit, no se como lo trabajes.
  14. }
  15. else {echo("\n conecta!!!!!!!!<br>");}
  16. ftp_pasv($conn_id,TRUE);
  17. //root del server donde sta alojado
  18. $root=$HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  19.  
  20.  
  21. $local_file=$_REQUEST["archivo"];
  22. echo $local_file;
  23.  
  24. $server_path=$root;
  25.  
  26.  
  27. if (ftp_put($conn_id,"html/".$local_file,$local_file,FTP_BINARY)) // mira bien esta parte...
  28. {
  29.  echo ("Se ha subido el archivo".$local_file);
  30. }
  31. else
  32. {
  33.   echo ("\nWWWWWaaaaaacccccCCCCCKKKKkkkk<br>".$server_path."<br>".$local_file);
  34.   //Nuevamente, el programa continua, y no muere... esto es un bug
  35. }
  36. // close the connection*/
  37. ftp_close($conn_id);
  38. ?>
  39.  
Otra solucion ( en PHP  :P  )
http://inebria.com/phpftp/ftp.phps
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Kyrylys

  • Miembro activo
  • **
  • Mensajes: 80
    • Ver Perfil
Re: Ftp En Php -subir Archivos-
« Respuesta #4 en: Martes 20 de Febrero de 2007, 23:52 »
0
gracias su - ahor te entiendo un poco mejor, gracias por aclararme lo de que seguia corriendo xd

y también por el link, mañana lo miraré con más detenimiento ^^

suelo tratarlo con
Código: Text
  1. die()
  2.  
ya le pondre, de hecho sé que el código necesita un poco de "brillo" por ahora sólo es un testeo.

El tema de la seguridad.. bueno lo trato desde otra página, más o menos la estructura es ésta:

hay un login que comprueba que exista un user y un pass, en caso de que esté setteado lo desssetea, si va mal die, si no sigue hasta una página que tiene un menú, en una de esas casillas esta el link que va a un formulario de subir archivos ( que es el que tiene el input type="file") y esto que he dejado aquí es el gestor del formulario.
en el formulario compruebo de nuevo que el user y el pass seteados estén en la bd

más tarde aunmentaré más la seguridad comprobando que no hay dos sesiones simultáneas del mismo user, que si haces 3 intentos de meter un user/pass válido te banee durante un periodo de tiempo...

Pero vámos que hoy por hoy me interesa esto, y lo demás poco a poco que bastante ambiciosos me salen los proyectos con el poco tiempo que llevo con php... XD

muchas gracias otra vez, espero sacar un hueco mañana para probar y decir como va


Kyrylys

  • Miembro activo
  • **
  • Mensajes: 80
    • Ver Perfil
Re: Ftp En Php -subir Archivos-
« Respuesta #5 en: Miércoles 7 de Marzo de 2007, 18:26 »
0
bueno al final lo consegui ^^
está un poco diferente pero funciona
aqui les dejo los códigos

Codigo para el formulario
Código: Text
  1. <?php
  2. echo("\n\n<form name=\"gestor_ftp\" method=\"post\" enctype=\"multipart/form-data\" action=\"gestor_ftp.php\">");
  3. echo("
  4. <table border=\"5\" cellpadding=\"0\" cellspacing=\"0\" valign=\"center\" align=\"center\" style=\"position:relative; top:50px; left:0px;\">
  5. <tr>
  6.   <td><input type=\"file\" name=\"archivo\"/><td>
  7.       <td>
  8.         <select name=\"accion\">
  9.         <option value=\"imagen\">Imagen</option>
  10.         <option value=\"pdf\">PDF</option>
  11.         </select>
  12.         </td>
  13.   <td><input type=\"submit\" name=\"Enviar\" value=\"Subir\"></td>
  14. </tr>
  15. </table></form>");
  16. ?>
  17.  


Codigo del gestor
Código: Text
  1. <?php
  2. header("Refresh: 3; URL=http:/URL/main.php");//al acabar de subir redireccionara a la main
  3. require ("global.php");// aqui se define el user,pass etc
  4. // Primero creamos un ID de conexión a nuestro servidor  
  5. $conn_id = ftp_connect($ftp_server);
  6. // login
  7. $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
  8. if(!$login_result)
  9. {
  10.    echo("no conecta");
  11.    die();
  12. }
  13. else{
  14.     //si sube a IMG o PDF
  15.       $accion=$_REQUEST["accion"];
  16.       switch ($accion) {
  17.         case imagen:
  18.         $tipo="/IMG/";
  19.         break;
  20.         case pdf:
  21.         $tipo="/PDF/";
  22.         break;}
  23.        // Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
  24.         // Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
  25.         // el nombre del archivo
  26.         $file = $_FILES["archivo"]["name"];
  27.         // Este es el nombre temporal del archivo mientras dura la transmisión
  28.         $temporal = $_FILES["archivo"]["tmp_name"];
  29.         echo "Subiendo Archivo ...<br />";
  30.     echo "<br />$local<br />";
  31.         // Juntamos la ruta del servidor con el nombre real del archivo
  32.         // Tomando en cuenta la ruta de nuestro root
  33.       //$path es el lugar "raiz" donde se subirán los archivos
  34.       //$tipo es la subcarpeta donde se colocará el archivo
  35.       //$file es el archivo a subir
  36.     $path="URL RAIZ";
  37.         $ruta = $path . $tipo . $file;
  38.                  // Verificamos si ya se subio el archivo temporal
  39.                 if (is_uploaded_file($temporal)){
  40.                         // copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
  41.                         copy($temporal, $ruta);
  42.             echo("El archivo ".$file." se subió con éxito al servidor <br />");
  43.             /*
  44. //al estar con case no funciona porque lo toma todo como si fuese imagen
  45.                                                        if ($tipo="/IMG/")
  46.               {
  47.               echo(" imágenes.\n<br />");
  48.               }  
  49.               else if ($tipo="/PDF/")
  50.               {
  51.               echo(" archivos en .pdf.\n<br />");
  52.               }  */
  53.             echo("La página volverá a la pantalla de inicio de Administración");            
  54.                 }
  55.                 // Sino se pudo subir el temporal
  56.                 else {
  57.                         echo "no se pudo subir el archivo " . $local;
  58.                 }
  59.      
  60.         //echo "Ruta: " . $ruta;
  61. }
  62.  
  63. ?>
  64.  
como puede verse está pensado para subir a diferentes carpetas dentro de un servidor, pueden ser IMG, Documentos, Pdf...etc