Foros del Web » Programando para Internet » PHP »

Listar directorio en servidores externos

Estas en el tema de Listar directorio en servidores externos en el foro de PHP en Foros del Web. En pocas palabras: hacer opendir y readdir con rutas como: 192.168.1.100/directorio5/ y rutas externas subdominio.dominio.com Mejor explicado: Servidor1: Uso: Servidor web Plataforma: Ubuntu Server Red: ...
  #1 (permalink)  
Antiguo 23/02/2013, 08:43
Avatar de Knight_Rider  
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 14 años, 4 meses
Puntos: 4
Pregunta Listar directorio en servidores externos

En pocas palabras:

hacer opendir y readdir con rutas como: 192.168.1.100/directorio5/ y rutas externas subdominio.dominio.com

Mejor explicado:

Servidor1:
Uso: Servidor web
Plataforma: Ubuntu Server
Red: 2 (una interna, 192.168.1.50 y una externa www.dominio.com)

Servidor2:
Uso: Servidor archivos
Plataforma: DSM (Synology Rackstation)
Red: 2 (una interna, 192.168.1.100 y una externa archivos.dominio.com)

Función deseada:
1.- El servidor Web no está momentáneamente dentro de la Red interna, así que, debería poder realizar lo mismo pero mediante subdominios.

En plan de mejoras de futuro:
2.- Para evitar emplear redes externas, y no abrir puertos innecesarios como FTP, etc.. y no mermar la seguridad de la red, quiero hacer y aprovechar, que tengo de mi lado una poderosísima red interna para que el servidor 1 reciba el contenido de las carpetas del Servidor 2 que el Servidor 1 pueda solicitar a través de la intranet.

En el fondo, pienso que si alguna función acepta: http://subdominio.dominio.com/directorio debería también aceptar algo como http://192.168.1.100, no?

Actualmente tengo un codigo, pero.. sólo funciona cuando todo, se desarrolla por el mismo servidor:

El siguiente archivo se llama desde un script principal que lee de una DB los datos de: $dir, $multipli y $pack10gb (y si hubieran mas de un servidor de archivos, se añadiría a la ruta un $server_archivos, pero no es el caso,.. y no es lo mas importante ahora mismo... dado que solo habría un único servidor)

Código PHP:
//calcula el espacio ocupado en la carpeta y lo expresa en bytes para calculos precisos.
function size_bytes($path$formated true$retstring null){
    if(!
is_dir($path) || !is_readable($path)){
        if(
is_file($path) || file_exists($path)){
            
$size filesize($path);
        } else {
            return 
false;
        }
    } else {
        
$path_stack[] = $path;
        
$size 0;
        do {
            
$path   array_shift($path_stack);
            
$handle opendir($path);
            while(
false !== ($file readdir($handle))) {
                if(
$file != '.' && $file != '..' && is_readable($path DIRECTORY_SEPARATOR $file)) {
                    if(
is_dir($path DIRECTORY_SEPARATOR $file)){ $path_stack[] = $path DIRECTORY_SEPARATOR $file; }
                    
$size += filesize($path DIRECTORY_SEPARATOR $file);
                }
            }
            
closedir($handle);
        } while (
count($path_stack)> 0);
    }

    return 
$size;
}
//10GB a multiplicar por el packnum y se suma al resultado de multiplicar el numero de lotes de 10GB adicionales.
$space = (10737418240*$multipli)+(10737418240*$pack10gb); 
$size_bytes size_bytes ($dir); //Llama a la funcion tamaño de carpeta en bytes
$fl = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB"); //Array de nomenclaturas humanas
//bytes de espacio total de la carpeta
$human round ($space/pow(1024, ($i floor(log($space1024)))), $precision ) . $fl[$i];
//bytes de espacio total consumido de carpeta
$size_dir round ($size_bytes/pow(1024, ($i floor(log($size_bytes1024)))), $precision ) . $fl[$i];
$porcientobytes number_format(100/($space/$size_bytes),2);

echo 
"Tamaño consumido: " $size_dir " un " $porcientobytes "% de ".$human.".";

$directorio=opendir($dir);
echo 
"<br/>"date("d F Y H:i");
echo 
"<br><br>"
while (
$archivo readdir($directorio)){ 
 if(
$archivo=='.' or $archivo=='..'){ 
 echo 
""
 }else {
    
$enlace $dir.$archivo
    
$Fecha_updated date("d/m/Y - H:i:s."filectime($enlace));
    
$size filesize ($enlace);
    
$fn = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB"); 
  
$pesoround ($size/pow(1024, ($i floor(log($size1024)))), $precision ) . $fn[$i]; 
 
 echo 
"<ul type='square'><li>"
 echo 
"<a href=$enlace class='menu'>$archivo<br></a>"
 echo 
$Fecha_updated."<br/>";
 echo 
$peso
 echo 
"</li></ul>"
 } 
 } 
closedir($directorio); 
?> 
P.D.: Asumo que casi seguro habrá que cambiar medio codigo....
  #2 (permalink)  
Antiguo 24/02/2013, 00:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Listar directorio en servidores externos

Supongo que al conectarte a un servidor externo y obtener el listado de directorios/archivos, este viene en formato HTML y por eso no te funciona opendir; en todo caso, podrías usar, fopen, file_get_contents o cURL.

Aquí mismo, en FDW, hay un excelente manual para esas funciones, usa el buscador.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/02/2013, 05:23
Avatar de Knight_Rider  
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Listar directorio en servidores externos

Todas esas funciones fopen, file_get_contents o cURL sólo me abrirán un archivo, vamos, para estar mas seguro, que me lo he remirado, por si... por casualidad alguna nueva version había cambiado algo, incluso mirando cURL ví una función llamada open_basedir, pero ni así... en el supuesto que yo proporcionara una ruta directorio, solo me darían u error, o me mostrarían el archivo index de la carpeta mencionada, o lo que sería lo mismo, la respuesta http del servidor...
Así que no me sirve para listar directorios... y trabajar con ellos...

Así que como solución, he pensado, en que se podría ejecutar un archivo index.php (el que ya proporcioné mas arriba) en todos los directorios de cada usuario y que la respuesta recibida por el otro servidor fuera esa... ya que por suerte el Synology Rackstation puede trabajar también como servidor web al que se le puede implementar php, es, yo creo la alternativa mas sencilla.

También vi funciones como net use donde puedo darle el nombre de un servidor en la red local... eso lo probaré cuando me monte un segundo servidor en casa.

En definitva... será cuestión de probar,.. probar y probar... dejaré el tema abierto un tiempo mas, por si a alguien se le ocurre alguna idea ... mas automatizada y directa que la de ir copiando en las carpetas un archivo que me lea el directorio después de haber montado un segundo servidor php...

O sea... que si a alguien se le ocurre una opción de que el mismo servidor A lea el directorio de B como si lo estuviera leyendo de sí mismo... que me avise!

Y gracias por todo!!!

Etiquetas: directorio, externos, servidores
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 04:45.