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.