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($space, 1024)))), $precision ) . $fl[$i];
//bytes de espacio total consumido de carpeta
$size_dir = round ($size_bytes/pow(1024, ($i = floor(log($size_bytes, 1024)))), $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");
$peso= round ($size/pow(1024, ($i = floor(log($size, 1024)))), $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....