Foros del Web » Programando para Internet » PHP »

FTP con PHP

Estas en el tema de FTP con PHP en el foro de PHP en Foros del Web. Buenas a todos, estoy buscando si alguna alma caritativa me puede echar una mano y decirme como puedo listar los archivos y directorios de un ...
  #1 (permalink)  
Antiguo 14/09/2011, 05:18
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
FTP con PHP

Buenas a todos, estoy buscando si alguna alma caritativa me puede echar una mano y decirme como puedo listar los archivos y directorios de un FTP, con el código que he conseguido, me conecta y me lista los directorios y archivos como un array, pero no mas ya que no puedo moverme por ellos ni nada, ¿como puedo hacer para poder usar como si me conectase por el FTP de la web? Gracias a todos de antemano.

Mi codigo:

Código PHP:
# FUNCIONES FTP
# CONSTANTES 
# Cambie estos datos por los de su Servidor FTP
$servidor_ftp ="SERVIDOR";//IP o Nombre del Servidor
$PORT "21"//Puerto
$usuario_ftp ="USUARIO"//Nombre de Usuario
$contrasenya_ftp "CONTRASEÑA"//Contraseña de acceso
//define("MODO",true); //Activa modo pasivo

# FUNCIONES

// configurar una conexion o abortar
$id_con ftp_connect($servidor_ftp) or die("No ha sido posible conectarse a $servidor_ftp");

// intento de inicio de sesion
if (@ftp_login($id_con$usuario_ftp$contrasenya_ftp)) {
    echo 
"Conectado como $usuario_ftp@$servidor_ftp\n";
} else {
    echo 
"No ha sido posible conectarse como $usuario_ftp\n";
}

//Obtenemos el directorio actual
$directorio ftp_pwd($id_con);

//Obtenemos el listado del directorio actual
$lista = array();
$lista ftp_nlist($id_con,$directorio);

//Mostramos sus contenidos
echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO / (RAÍZ)</CENTER></B>";

echo 
"<pre>";
print_r($lista);
echo 
"</pre>";


//Cambiamos al directorio /pub
if(!ftp_chdir($id_con,"public_html")){
    echo 
"Se ha producido un error al entrar en el directorio /public_html";
    exit;
}

//Almacenamos el directorio actual
$directorio2 ftp_pwd($id_con);

//Obtenemos el listado del directorio actual
$list = array();
$list ftp_nlist($id_con,$directorio2);

//Mostramos su contenido
echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO /pub</CENTER></B>";

echo 
"<pre>";
print_r($list);
echo 
"</pre>"

Última edición por tonslinz; 14/09/2011 a las 05:26
  #2 (permalink)  
Antiguo 14/09/2011, 06:24
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 17 años, 11 meses
Puntos: 14
Respuesta: FTP con PHP

Aquí tienes todas las funciones de FTP
http://php.net/manual/en/ref.ftp.php

Por ejemplo, con ftp_chdir podrás cambiar de directorio.

Saludos
__________________
No hay cuerda desafinada sino músico progresivo
  #3 (permalink)  
Antiguo 14/09/2011, 07:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: FTP con PHP

No entiendo muy bien el objeto de listar por ftp tu public_html, mejor podrias hacerlo por http.

De todas maneras algo asi te va a funcionar, aunque requiere de bastantes mejoras

Código PHP:
Ver original
  1. <?php
  2. ini_set('display_errors', 0);
  3. $servidor_ftp = '127.0.0.1';
  4. $usuario_ftp = 'xxx';
  5. $clave_ftp = 'xxx';
  6. $conectar_ftp = ftp_connect($servidor_ftp);
  7. $loguin_ftp = ftp_login($conectar_ftp, $usuario_ftp, $clave_ftp);
  8. $cambiar = $_GET['cambiar'];
  9. $script = $_SERVER['PHP_SELF'];
  10. function es_directorio($directorio) {
  11.    global $conectar_ftp;
  12.    if (ftp_chdir($conectar_ftp, $directorio)) {
  13.       ftp_chdir($conectar_ftp, '..');
  14.       return true;
  15.    } else {
  16.       return false;
  17.    }
  18. }
  19.  
  20. function listar_dir($ruta) {
  21.    global $conectar_ftp,$servidor_ftp;
  22.    $elementos = ftp_nlist($conectar_ftp, $ruta);
  23.    foreach($elementos as $archivo) {
  24.       if ($archivo!='.'&&$archivo!='..') {
  25.          if (es_directorio($archivo)) {
  26.             echo "<a href='$script?cambiar=$archivo'>$archivo</a> [directorio]<br>";
  27.          } else {
  28.             echo "$archivo<br>";
  29.          }
  30.       }
  31.    }
  32. }
  33. if(isset($cambiar)){
  34. listar_dir($cambiar);
  35. }else{
  36. listar_dir('/');
  37. }
  38. ?>

el display_errors debe estar en 0 porque ftp_chdir() siempre genera un warning cuando $archivo no sea un directorio

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 14/09/2011, 07:36
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: FTP con PHP

Se podría usar un condicional para arreglar eso?

if(is_dir($path))..
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #5 (permalink)  
Antiguo 14/09/2011, 07:57
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: FTP con PHP

Siempre y cuando el servidor FTP esté alojado donde el servidor PHP... sí.

Si es externo, no funcionaria xD
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 14/09/2011, 08:02
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: FTP con PHP

xD

claro.. u.u
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #7 (permalink)  
Antiguo 15/09/2011, 06:00
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: FTP con PHP

Cita:
Iniciado por emprear Ver Mensaje
No entiendo muy bien el objeto de listar por ftp tu public_html, mejor podrias hacerlo por http.
¿a que te refieres con lo de hacerlo por http? lo que quiero es que un usuario meta su usuario y contraseña y se conecte a su espacio en el servidor y que pueda ver todo lo que tiene y navegar por el como si fuese un sFtp que es lo que se usa normalmente para conectarse.
  #8 (permalink)  
Antiguo 15/09/2011, 06:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: FTP con PHP

Lo que te indico Smolky entonces es correcto.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 20/09/2011, 12:03
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: FTP con PHP

ya encontre solucion mas o menos, este es el codigo que aun se puede mejorar, solo me falta como saber diferenciar archivos de carpetas y como hacer lo de volver a la carpeta anterior, se aceptan ayudas!


ConectarFTP.php
Código PHP:
<?
# FUNCIONES FTP
# CONSTANTES 
# Cambie estos datos por los de su Servidor FTP
$servidor_ftp ="server";//IP o Nombre del Servidor
$PORT "21"//Puerto
$usuario_ftp ="user"//Nombre de Usuario
$contrasenya_ftp "contra"//Contraseña de acceso
//define("MODO",true); //Activa modo pasivo

# FUNCIONES

// configurar una conexion o abortar
$id_con ftp_ssl_connect($servidor_ftp) or die("No ha sido posible conectarse a $servidor_ftp");

// intento de inicio de sesion
if (@ftp_login($id_con$usuario_ftp$contrasenya_ftp)) {
    echo 
"Conectado como $usuario_ftp@$servidor_ftp\n";
} else {
    echo 
"No ha sido posible conectarse como $usuario_ftp\n";
}

//Obtenemos el directorio actual
$directorio ftp_pwd($id_con);

echo 
"hol".$directorio;
//Obtenemos el listado del directorio actual
$lista = array();
$lista ftp_nlist($id_con,$directorio);

//Mostramos sus contenidos
echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO / (RAÍZ)</CENTER></B>";


echo 
"<ul>";
foreach(
$lista as $in => $valor) { 
   echo 
"<li><a href='/listar.php?dire=" .$valor."'>".$valor."</a></li>";
}
echo
"</ul>";
?>
Listar.php
Código PHP:
$archi=$_GET['dire'];

if(!
ftp_chdir($id_con,$archi)){
    echo 
"Se ha producido un error al entrar en el directorio /public_html";
    exit;
}

//Almacenamos el directorio actual
$directorio2 ftp_pwd($id_con);

//Obtenemos el listado del directorio actual
$list = array();
$list ftp_nlist($id_con,$directorio2);

//Mostramos su contenido
echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO /pub</CENTER></B>";

echo 
"<ul>";
echo 
"<li><a href='/listar.php?dire=/'>Inicio</a></li>";
foreach(
$list as $in => $valor) { 
   echo 
"<li><a href='/listar.php?dire=" .$valor."'>".$valor."</a></li>";
}
echo
"</ul>";
?> 

Etiquetas: ftp, html, usuarios
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 15:48.