Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/12/2004, 03:45
Avatar de redlor
redlor
 
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 19 años, 4 meses
Puntos: 0
Ya voy viendo la luz con los ftp!!

A ver, otra vez yo. Solucione el problema del ftp.
[http://desaweb.forosdelweb.com/showthread.php?t=250653].
Es pa pegarme chocazos contra la pared, porque estaba tratando de acceder a una dirección q no es ftp.

He tratado de implementar una función a la que le pase una URI (ftp ó file), distinga de qué tipo es y en función de eso recorra el árbol de irectorios de una forma u otra. En directoios locales hago una búsqueda acotada, le paso un nivel máximo en el árbol de directorios y los devuelvo en un array.Para los directorios ftp (véase ftp.rediris.es) me gustaría hacerlo de la misma forma de manera recursiva, pero a lo máximo que he llegao es a listarlos con nlist.

De nuevo el problema de los warnings. Si un usaurio se equivoca en la dirección de un directorio o de un ftp me muestra un warning y quiero evitarlo. Podría?

Bueno, ahí va mi código por si os vale pa algo. Chao y echadma una manita si podeís cn lo q me queda.

<?php

function DevolverArbolDeDirectorios($start, $nivel)
{
$tree = array();

if(!is_file($start) && !is_dir($start)){
$connex = ftp_connect($start) or die("No se puede establecer la conexión");
$resultado_login = ftp_login ($connex,"anonymous","");

//Obtengo el directorio de conexión: Inicialmente /
$start_directory = ftp_pwd($connex);

if ((!$connex) || (!$resultado_login)) {
echo "No se ha podido establecer la conexión con el sevidor ftp!";
exit;
}
else
$tree = Fetch_FTP($connex, $start_directory, $nivel);
}
else{
$tree = Fetch_File_Tree($start, $nivel);
}

return $tree;
}

//Esta función devuelve el árbol de directorios
function Fetch_FTP($connex, $start_directory, $nivel)
{
$newdir = ftp_chdir($connex, $start_directory);

if(ftp_chdir($connex, $start_directory))
{
//Si se trata de un directorio...
}
else
{
$list = ftp_nlist($connex, $directory); //Me devulave un array con los archivos
}

return $list;
}

/* Devuelve un array con todos los ficheros del directorio indicado como parámetro.
* Esta búsqueda está acotada por el parámetro $nivel que indica la máxima profundida de búsqueda.
*/
function Fetch_File_Tree($start, $nivel)
{
if( $dir = opendir($start))
{
$tree = array();

while( FALSE !== ($file = readdir($dir)) )
{
if($file != "." && $file != "..")
{
$absolute_file = $start .'/'.$file;
if($nivel == 0)
{
//Si es de nivel 0, lo tomo si es un archivo y rompo la recursividad
if(is_file($absolute_file)){
$tree[] = $absolute_file;
}
}
else
{ //Hacemos recursividad, restando cada vez un nivel
//En caso de seleccionar todos los ficheros (nivel -1) nunca alcanzaremos el 0, por lo
//que la recursividad permitirá alcanzar todas las hojas del árbol de directorios
if(is_file($absolute_file)){
$tree[] = $absolute_file;
}
else{
//Se trata de un directorio
$tree[] = $absolute_file;
$tree = array_merge($tree, Fetch_File_Tree($absolute_file, $nivel-1));
}
}
}
}
}
else
{
return FALSE;
}

sort($tree);
return $tree;
}

?>

y como he dicho llamaría de forma indiferente a DevolverArbolDeDirectorios con un directorio o dir ftp y una cota de búsqueda.

Última edición por redlor; 01/12/2004 a las 03:48