Foros del Web » Programando para Internet » PHP »

Tamaño de archivos en servidores X?

Estas en el tema de Tamaño de archivos en servidores X? en el foro de PHP en Foros del Web. Hi chicos bueno tengo una duda.... necesito un script que me de el tamaño de los archivos... bueno eso ya lo hice pero el caso ...
  #1 (permalink)  
Antiguo 11/07/2003, 18:56
Avatar de frogx3  
Fecha de Ingreso: abril-2003
Ubicación: Merida, Yucatan
Mensajes: 79
Antigüedad: 21 años
Puntos: 0
Pregunta Tamaño de archivos en servidores X?

Hi chicos bueno tengo una duda.... necesito un script que me de el tamaño de los archivos... bueno eso ya lo hice pero el caso es que si el archivo no esta en el mismo servidor donde se ejecuta el script me tira 0 bytes...y si el archivo esta en el servidor... donde se ejecuta el script si me lanza la tamaño exacto ay forma de obtener tal dato de algun servidor X?

Bueno gracias de antemano y espero me puedan hechar la mano aqui les dejo el codigo que use para hacerlo... pa que me digan que le falta...o si no se puede....
Código PHP:
$my_file "./cdex_150.exe";
$file_size filesize($my_file);
if (
$file_size >= 1073741824) {
       
$show_filesize number_format(($file_size 1073741824),2) . " GB";
} elseif (
$file_size >= 1048576) {
       
$show_filesize number_format(($file_size 1048576),2) . " MB";
} elseif (
$file_size >= 1024) {
       
$show_filesize number_format(($file_size 1024),2) . " KB";
} elseif (
$file_size >= 0) {
       
$show_filesize $file_size " bytes";
} else {
       
$show_filesize "0 bytes";
}
echo 
"File $my_file is $show_filesize <br>"
  #2 (permalink)  
Antiguo 11/07/2003, 19:20
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Pues creo que el problema es que no tienes acceso a leer el sistema de archivos de otros servidores...

Mi sugerencia es que si se trata de archivos de texto, los abras y los midas en "run-time", aunque puede ser muy tardado si son archivos muy grandes o muchos.

__________________
Manoloweb
  #3 (permalink)  
Antiguo 11/07/2003, 20:04
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Nuestro amigo Manoloweb tiene razón. Como está anotado en el manual de PHP, la función filesize() no trabaja con archivos remotos (en nuestro caso, ubicados en otro servidor.)

Para hacer este tipo de cosas, usualmente hay que recurrir a trucos poco elegantes. En esta situación, podría por ejemplo jugarse con un socket que hable con el servidor remoto y pedir las cabeceras del archivo en busca de la cabecera específica Content-Length, pero es un poco engorroso y a final de cuentas hay URLs que no retornan esta cabecera, e incluso puede presentarse el caso (improbable, es cierto) de que el servidor devuelva una cabecera con información errónea.

La única forma de saber el tamaño de un archivo remoto con seguridad es descargarlo y medirlo (da forma similar al hecho de que la única manera de estar completamente seguro de que una dirección de correo electrónica es válida es enviando un mensaje a la dirección dada.) Cualquier otra solución podría quedar corta en alguna situación particular.

Reconociendo esto, algo que podría resultar es:

Código:
<?php

// URL del archivo del que se desea conocer el tamanyo
$url = 'http://cualquiercosa/esto-es-solo-un-ejemplo.htm';

$fp = fopen ($url, "r");

$tamanyo = 0;

// Leer el archivo en segmentos de 1kb
while ($cadena = fread ($fp, 1024))
    $tamanyo += strlen ($cadena);

print "El tamaño es $tamanyo";

?>
Nota que para que esto funcione, PHP debe estar configurado de modo tal que la directiva allow_url_fopen esté habilitada en php.ini.

También cabe mencionar que podría usarse la función file_get_contents() si la versión de PHP que usas es 4.3.0 o superior. En tal caso, el código podría reducirse un poco.

Por último, coincido con la advertencia de Manoloweb en el sentido en que debes tener cuidado ya que con archivos relativamente grandes (o si la conexión entre tu servidor y el servidor remoto resulta lenta), este script puede tomar mucho tiempo en completar su tarea.
  #4 (permalink)  
Antiguo 11/07/2003, 20:35
Avatar de frogx3  
Fecha de Ingreso: abril-2003
Ubicación: Merida, Yucatan
Mensajes: 79
Antigüedad: 21 años
Puntos: 0
gracias.... ahora que lo dicen tienen razon puede un problema muy engorroso lo de la comunicacion entre los servidores a la hora de ejecutar el script....

bueno.... gracias... voy a probar con el code que me dejaste gracias guys....
  #5 (permalink)  
Antiguo 12/07/2003, 20:43
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 22 años, 6 meses
Puntos: 6
Igual y no es tu caso, pero si tienes acceso a los otros servidores puedes utilizar WDDX ( Web Distributed Data Exchange ), que fue diseñado para el intercambio de estruturas de datos complejas entre aplicaciones distintas. Pero igual te puede servir. Lo unico que tendrias que hacer es subir el script que hiciste al servidor que te enviara la informacion de los archivos que necesitas saber su tamaño, y en el servidor que reciviras los datos solo necesitas deserializar los datos enviados por el servidor que estas consultando, un ejemplo sencillo de como quedaria puede ser algo asi.
Servidor remoto: script filesize_script.php
Código PHP:
$my_file "./cdex_150.exe";
$file_size filesize($my_file);
if (
$file_size >= 1073741824) {
       
$show_filesize number_format(($file_size 1073741824),2) . " GB";
} elseif (
$file_size >= 1048576) {
       
$show_filesize number_format(($file_size 1048576),2) . " MB";
} elseif (
$file_size >= 1024) {
       
$show_filesize number_format(($file_size 1024),2) . " KB";
} elseif (
$file_size >= 0) {
       
$show_filesize $file_size " bytes";
} else {
       
$show_filesize "0 bytes";
}
echo 
wddx_serialize_vars'my_file''show_filesize' ); 
Este script lo pondrias en el servidor que enviara dato. Y en tu servidor que los leera pondrias algo asi.
Código PHP:
$url "http://servidor_remoto/scripts/filesize_script.php";
$wddx_paquete implode(' ',file$url ) );
$datos wddx_deserialize$wddx_paquete );
echo 
"File ".$datos['my_file']." is "$datos['show_filesize']."</br>\n"
la variable "url", debe de contener el url que necesitas accesar en el otro servidor para ejecutar tu rutina que determina el tamaño de los archivos, El cual te devolvera un paquete WDDX que es un archivo XML DTD. Para mas detalles visita http://www.php.net/manual/en/ref.wddx.php que habla en detalle sobre las funciones que acabo de utilizar. Hay mismo esta la liga a openwddx donde viene mas documentacion.
El detalle de esto es que tu servidor debe de tener avilitado php con soporte para wddx, si estas en windows ya viene avilitado.
Espero que esto te ayude; Si no era lo que necesitabas a hora si que ni hablar. Por lo menos te sirve para saber algo mas de php y usar el script que te pusieron unos mensaje mas arriba.
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 14:24.