Estaba pensando en hacer una solicitud principal con cURL, me preguntaba si este es el camino a seguir.¿La forma más fácil de capturar el tamaño del archivo remoto en PHP?
Respuesta
Sí. Como el archivo es remoto, depende completamente del valor del encabezado Content-Length
(a menos que desee descargar todo el archivo). Querrá curl_setopt($ch, CURLOPT_NOBODY, true)
y curl_setopt($ch, CURLOPT_HEADER, true)
.
Supongo que usar curl para enviar una solicitud HEAD es una buena posibilidad; algo como esto probablemente haría:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
var_dump($size);
Y le conseguirá:
float 3438
De esta manera, está utilizando una petición HEAD, y no descargar todo el archivo - todavía, que dependen de la servidor remoto envía un encabezado Content-length correcto.
Otra opción que se podría pensar acerca sería utilizar filesize
... Pero esta fallará: la documentación indica (citando):
A partir de PHP 5.0.0, esta la función puede también se puede usar con algunas envolturas de URL. Consulte List of Supported Protocols/Wrappers para obtener una lista de de los cuales los envoltorios admiten la familia de funcionalidad stat() .
Y, por desgracia, con HTTP and HTTPS wrappers, stat()
No se admite ...
Si intenta, obtendrá un error, así:
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
Lástima :-(
El uso de una solicitud HEAD y la comprobación de Content-Length
es la forma estándar de hacerlo, pero no puede confiar en ello en general, ya que el servidor podría no ser compatible con este.El encabezadoes opcional, y además el servidor podría incluso no implementar el método HEAD. Si sabe qué servidor está probando, puede probar si funciona, pero como solución general no es a prueba de balas.
Si usted no necesita una solución a prueba de balas puede simplemente hacer:
strlen(file_get_contents($url));
Esto funcionará, pero también descargará el archivo primero. Presumiblemente, él quiere saber el tamaño antes de ir a buscarlo a través de la red. – troelskn
La mejor solución que sigue el principio KISS
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
De lejos, la mejor respuesta. Bien hecho. –
Este comando no devuelve una clave 'content-length' para mí, aquí está la matriz que devuelve: ''connection' => string 'close' (longitud = 5) 'date' => string 'Tue, 03 jun. 2014 20:55:55 GMT '(longitud = 29) ' servidor '=> cadena' Microsoft-IIS/6.0 '(longitud = 17) ' x-powered-by '=> cadena' ASP.NET '(longitud = 7) ' x-aspnet-version '=> cadena' 4.0.30319 '(longitud = 9) ' cache-control '=> cadena' privada '(longitud = 7) ' content-type ' '=> string' image/gif'' –
Pregunta rápida, ¿por qué necesita array_change_key_case? – mario
- 1. PHP: Tamaño de archivo remoto sin descargar el archivo
- 2. La forma más rápida para calcular el tamaño de un archivo abierto en el código (PHP)
- 3. La forma más fácil de escribir NSData en un archivo
- 4. ¿Cuál es la forma más fácil de usar el comando HEAD de HTTP en PHP?
- 5. ¿La forma más fácil de leer datos formateados en C++?
- 6. ¿La forma más fácil de crear una GUI en Java?
- 7. La forma más fácil de leer/escribir el contenido de un archivo en Python
- 8. ¿La forma más fácil de transformar la colección en matriz?
- 9. Javascript: ¿Forma más fácil de formatear números?
- 10. ¿Cuál es la forma más fácil de obligar a Idea a generar el archivo R.Java?
- 11. Obtenga el tamaño fácil de la aplicación
- 12. La forma más fácil de obtener el código postal del nombre de la ciudad
- 13. PHP include(): Tamaño y rendimiento del archivo
- 14. ¿Cuál es la forma más fácil de determinar el tamaño de los paquetes .app de iOS durante el desarrollo?
- 15. ¿La forma más fácil de implosionar() una matriz bidimensional?
- 16. La forma más fácil de comparar matrices en C#
- 17. ¿Cuál es la forma más fácil de detectar el sistema operativo del usuario en Rails 3?
- 18. La forma más fácil de ejecutar javascript en el lado del servidor
- 19. La forma más fácil de alternar 2 clases en jQuery
- 20. La forma más fácil de rm -rf en Python
- 21. La forma más fácil de generar archivos de localización
- 22. ¿La forma más fácil de validar y leer un archivo xml en .net?
- 23. ¿Cuál es la forma más fácil y rápida de capturar la transmisión de video de la cámara con C#?
- 24. PHP obtener archivo remoto mime-tipo
- 25. ¿Cuál es la forma más fácil de leer un archivo DBF de FoxPro desde Python?
- 26. ¿La forma más fácil de tener un sitio django multilingüe?
- 27. ¿Cuál es la forma más fácil de animar una línea?
- 28. La forma más fácil de combinar una versión en un solo archivo JAR
- 29. ¿La solución de autenticación PHP más fácil de usar?
- 30. ¿Cuál es la forma más fácil de analizar un archivo INI en Java?
sí, con esto: http: // php. net/manual/es/function.get-headers.php – Merlinox