Je pensais faire une demande de tête avec cURL, je me demandais si c'est le chemin à parcourir?Le moyen le plus simple de saisir la taille du fichier distant dans PHP?
Répondre
Oui. Comme le fichier est distant, vous dépendez complètement de la valeur de l'en-tête Content-Length
(sauf si vous voulez télécharger le fichier entier). Vous voulez curl_setopt($ch, CURLOPT_NOBODY, true)
et curl_setopt($ch, CURLOPT_HEADER, true)
.
Je suppose que l'utilisation de curl pour envoyer une requête HEAD est une possibilité intéressante; quelque chose comme cela ferait sans doute:
$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);
Et vous obtiendrez:
float 3438
De cette façon, vous utilisez une requête HEAD, et non le téléchargement du fichier entier - encore, vous dépendent du Le serveur distant envoie un en-tête Content-length correct.
Une autre option que vous pourriez penser à serait d'utiliser filesize
... Mais cela ne fonctionne pas: la documentation indique (citant):
PHP 5.0.0, cette La fonction peut également être utilisée avec certains wrappers d'URL. Référez-vous à List of Supported Protocols/Wrappers pour une liste dont les wrappers supportent stat() famille de fonctionnalités.
Et, malheureusement, avec HTTP and HTTPS wrappers, stat()
est pas pris en charge ...
Si vous essayez, vous obtiendrez une erreur, comme ceci:
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
Dommage :-(
L'utilisation d'une requête HEAD et la recherche de Content-Length
constituent la manière standard de le faire, mais vous ne pouvez pas vous y fier en général, car le serveur peut ne pas le prendre en chargeL'en-têteest facultatif et, de plus, le serveur pourrait même ne pas implémenter la méthode HEAD. Si vous connaissez le serveur que vous testez, vous pouvez tester si cela fonctionne, mais en règle générale, il n'est pas à l'épreuve des balles.
Si vous n'avez pas besoin d'une solution pare-balles vous pouvez juste faire:
strlen(file_get_contents($url));
Cela fonctionnera, mais il faudra également télécharger le fichier en premier. Vraisemblablement, il veut connaître la taille avant de le récupérer sur le réseau. – troelskn
La meilleure solution qui suit le principe KISS
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
De loin la meilleure réponse. Bien fait. –
Cette commande ne retourne pas une clé 'contenu-longueur' pour moi, voici le tableau qu'il retourne: ''connection' => chaîne 'close' (longueur = 5) 'date' => chaîne 'mar, 03 Jun 2014 20:55:55 GMT '(longueur = 29) ' server '=> chaîne' Microsoft-IIS/6.0 '(longueur = 17) ' x-powered-by '=> chaîne' ASP.NET '(longueur = 7) ' x-aspnet-version '=> chaîne' 4.0.30319 '(longueur = 9) ' cache-control '=> chaîne' privée '(longueur = 7) ' content-type '=> chaîne' image/gif'' –
Question rapide, pourquoi faut-il array_change_key_case? – mario
- 1. Le moyen le plus simple d'incrémenter une date en PHP?
- 2. Quel est le moyen le plus simple d'utiliser la commande HEAD de HTTP en PHP?
- 3. Quel est le moyen le plus simple de découper de gros fichiers XAML dans mon application?
- 4. le fichier php télécharge plus de 200mb
- 5. J'ai déjà installé PHP, quel est le moyen le plus simple (le meilleur) pour installer GDLib?
- 6. Le moyen le plus simple de concaténer NSString et int
- 7. Dans SharePoint, quel est le moyen le plus simple de créer un fichier "schema.xml" personnalisé?
- 8. Le moyen le plus simple de trier les nœuds DOM?
- 9. Meilleur/le plus simple/le moyen le plus rapide d'obtenir un chemin relatif entre deux fichiers?
- 10. moyen le plus efficace de saisir un nom de table dans la chaîne suivante
- 11. Le moyen le plus rapide pour saisir le nom de domaine/hôte en utilisant javascript
- 12. Quel est le meilleur, uploader le plus simple fichier ajax?
- 13. Quel serait le moyen le plus simple de traiter un fichier texte en utilisant JSP?
- 14. Le moyen le plus simple de valider une entrée sur un fichier de mots?
- 15. Fichier chown php dans le serveur distant ssh2
- 16. Le moyen le plus simple d'injecter des tags google anayltics dans des pages arbitraires?
- 17. Quel est le moyen le plus simple de faire de la négation dans les déclencheurs?
- 18. Le moyen le plus simple d'empêcher tous les threads Java de disparaître dans IO?
- 19. Le moyen le plus simple/le meilleur de rendre le fichier généré disponible au téléchargement dans ASP.Net MVC
- 20. Le moyen le plus simple d'obtenir l'emplacement actuel du pointeur de données pour mysql_fetch_assoc loop?
- 21. Quel est le moyen le plus simple d'utiliser le code source C dans une application Java?
- 22. Enregistrer le fichier img distant sur le serveur, avec php
- 23. Quel est le moyen le plus simple de construire Python26.zip pour la distribution intégrée?
- 24. Code du modèle le plus simple
- 25. tête readfile dans le serveur distant PHP
- 26. Le moyen le plus simple de filtrer la console Eclipse Texte de sortie
- 27. Le moyen le plus efficace de Python de choisir la plus longue chaîne dans la liste?
- 28. Le moyen le plus simple de déterminer si la connexion Internet iPhone est disponible?
- 29. Le moyen le plus rapide de savoir si l'hôte distant est joignable
- 30. Le moyen le plus simple d'invoquer un service Web via SOAP sur ASP.NET
oui, avec ceci: http: // php. net/manual/fr/function.get-headers.php – Merlinox