Frage

Ich dachte an einen Kopf Anfrage mit curl tun, frage mich, ob dies der Weg zu gehen?

War es hilfreich?

Lösung

Ja. Da die Datei entfernt ist, sind Sie völlig abhängig von dem Wert des Content-Length Header (es sei denn, Sie die ganze Datei herunterladen möchten). Sie wollen curl_setopt($ch, CURLOPT_NOBODY, true) und curl_setopt($ch, CURLOPT_HEADER, true).

Andere Tipps

Die beste Lösung, die das KISS-Prinzip folgt

$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];

Ich vermute, mit curl eine HEAD-Anfrage zu senden ist eine schöne Möglichkeit; so etwas wie dies würde wahrscheinlich tun:

$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);

Und erhalten Sie:

float 3438

Auf diese Weise Sie eine HEAD-Anforderung verwendet wird, und nicht die gesamte Datei heruntergeladen - nach wie vor hängen Sie auf dem Remote-Server einen richtigen Content-Length-Header senden

.


Eine weitere Option, die Sie über vielleicht denken wäre an filesize verwenden ... Aber wird dies scheitern : In der Dokumentation (Zitat) :

  

Ab PHP 5.0.0 kann diese Funktion   auch mit einigem URL-Wrapper verwendet werden.   Siehe href="http://php.net/manual/en/wrappers.php" rel="noreferrer"> Liste der unterstützten zum für eine Liste   von denen Wrapper unterstützen stat ()   Familie der Funktionalität.

Und leider mit HTTP und HTTPS-Wrapper wird stat() nicht unterstützt ...

Wenn Sie versuchen, werden Sie eine Fehlermeldung erhalten, wie folgt:

Warning: filesize() [function.filesize]: stat failed 
    for http://sstatic.net/so/img/logo.png

Schade: - (

Mit einer HEAD-Anforderung und Überprüfung für Content-Length ist der normale Weg, es zu tun, aber man kann auf sie in der Regel nicht verlassen, da der Server nicht unterstützen könnte. Der Content-Length Header ist optional, und der Server ferner vielleicht nicht einmal die HEAD-Methode implementieren. Wenn Sie wissen, welche Server Sie Sondieren, dann können Sie testen, ob es funktioniert, aber als allgemeine Lösung ist es nicht kugelsicher.

Wenn Sie nicht über eine kugelsichere Lösung brauchen Sie nur tun können:

strlen(file_get_contents($url));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top