Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/02/2013, 08:43
Avatar de Knight_Rider
Knight_Rider
 
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 14 años, 5 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....