Foros del Web » Programando para Internet » PHP »

Ya voy viendo la luz con los ftp!!

Estas en el tema de Ya voy viendo la luz con los ftp!! en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/12/2004, 03:45
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 20 años
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
  #2 (permalink)  
Antiguo 01/12/2004, 07:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pero .. el Warning donde lo obtienes?

En principio con la función:
error_reporting()

Puedes controlar los mensajes de error .. para .. incluso no mostrar ninguno.

También tienes el operador:
@

Que usado delante de una función puede eliminar el "mostrar" mensajes de error de esa función concreta para controlaro si esta devuelve un "booleano" (true/false) con tus or die() .. o if() (condicionales en general).

Pero, .. habría que ver donde exactamente te ocasina el "warning" por qué tal vez puedas hacer otro tipo de validaciones a esa ruta o lo que corresponda para no llegar al extremo de tener que controlar los "mensajes de error" cuando tal vez correponda aplicar otro tipo de validaciones a nivel de "socket" u otro tipo.

Un saludo,
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 22:35.