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. 
   
 


