Ben, cURL ile bir kafa isteği yapmayı düşünüyordum bu gitmek için yol olup olmadığını merak?
Ben bir HEAD isteği güzel bir olasılık göndermek Kıvrılmaları kullanarak tahmin ediyorum; Böyle bir şey muhtemelen yapacağını:
$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);
Ve seni alacak:
float 3438
Bu şekilde, bir HEAD isteği kullanarak, ve tüm dosya indirirken değil - yine de, doğru bir içerik-uzunluk başlığı göndermek uzak sunucuya bağlıdır.
Another option you might think about would be to use filesize
... But this will fail : the documentation states (quoting) :
As of PHP 5.0.0, this function can also be used with some URL wrappers. Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.
Ve, ne yazık ki, HTTP and HTTPS wrappers ile stat()
desteklenmez ...
Eğer denerseniz, bu gibi bir hata alırsınız:
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
Çok kötü :-(
HEAD isteği kullanma ve kontrol Content-Length
bunu yapmak için standart bir yoldur, ancak sunucu bunu desteklemiyor olabilir bu yana, genel olarak ona güvenemez. Content-Length
başlığı isteğe bağlıdır, ve sunucu bile HEAD metodunu uygulamak olmayabilir ilerletmek. Eğer sondalama olduğunuz sunucu biliyorsanız, o zaman çalışır eğer test edebilirsiniz, ama genel bir çözüm gibi kurşun geçirmez değildir.