أسهل طريقة لانتزاع حجم الملف عن ملف PHP?
سؤال
أنا كنت أفكر رئيس الطلب مع حليقة, أتساءل إذا كان هذا هو الطريق للذهاب ؟
المحلول
نعم. منذ الملف هو بعيد، وكنت تعتمد اعتمادا كليا على قيمة رأس Content-Length
(إلا إذا كنت تريد تحميل الملف بأكمله). فأنت تريد أن curl_setopt($ch, CURLOPT_NOBODY, true)
وcurl_setopt($ch, CURLOPT_HEADER, true)
.
نصائح أخرى
والحل الأفضل الذي يتبع مبدأ KISS
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
انا التخمين باستخدام الضفيرة إلى إرسال رئيس الطلب لطيفة الإمكانية ؛ شيء كهذا قد لا :
$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);
و سوف تحصل على :
float 3438
هذه الطريقة تستخدم رئيس الطلب ، وليس تحميل الملف بأكمله -- لا يزال ، تعتمد على الملقم البعيد إرسال الصحيح رأس طول محتوى.
خيار آخر قد تفكر في استخدام filesize
...ولكن هذا سوف تفشل :الوثائق الدول (نقلا عن) :
كما PHP 5.0.0, هذه الوظيفة يمكن أن أن تستخدم أيضا مع بعض URL مغلفة.الرجوع إلى قائمة معتمدة بروتوكولات/أغلفة للحصول على قائمة التي مغلفة الدعم الأساسي() الأسرة من الوظائف.
و لسوء الحظ ، HTTP و HTTPS مغلفة, stat()
غير معتمد...
إذا كنت تحاول, سوف تحصل على خطأ, مثل هذا :
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
سيئة للغاية :-(
وعن طريق طلب HEAD والتحقق من وجود Content-Length
هي الطريقة القياسية للقيام بذلك، ولكن لا يمكن الاعتماد عليه بشكل عام، لأن الخادم قد لا يعتمد عليه. رأس Content-Length
هو اختياري، ويعزز الخادم قد لا تنفذ حتى طريقة الرأس. إذا كنت تعرف أي ملقم كنت التحقيق، ثم يمكنك اختبار ما اذا كان يعمل، ولكن كحل العام ليس اقية من الرصاص.
إذا كنت لا تحتاج إلى حل من الرصاص يمكنك القيام به فقط:
strlen(file_get_contents($url));