为什么无法在php_curl中使用`CURLINFO_CONTENT_LENGTH_DOWNLOAD`获取iso文件的长度?

时间:2015-05-30 22:44:12

标签: php curl

我想在网上获取iso文件的长度

http://cdimage.debian.org/debian-cd/8.0.0/i386/iso-cd/debian-8.0.0-i386-lxde-CD-1.iso

<?php
    $szUrl = 'http://cdimage.debian.org/debian-cd/8.0.0/i386/iso-cd/debian-8.0.0-i386-lxde-CD-1.iso';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $szUrl);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLOPT_NOBODY, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $size = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    echo $size;
?>

输出为-1,代码为:如何使用php_curl正确获取iso文件的长度?
在Leggendario的回答中,我的问题的关键是设置 CURLOPT_FOLLOWLOCATION以获得正确的答案 它使我的问题与http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file不同。

1 个答案:

答案 0 :(得分:1)

来自documentation

  

<强> CURLINFO_CONTENT_LENGTH_DOWNLOAD

     

将指针传递给double以接收内容的长度   下载。这是从Content-Length:字段读取的值。以来   7.19.4,如果大小未知,则返回-1。

您必须先执行curl:

curl_exec($curl);

$size = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
echo $size;

curl_close($curl);

但要小心,因为 http://cdimage.debian.org/debian-cd/8.0.0/i386/iso-cd/debian-8.0.0-i386-lxde-CD-1.iso < / em>只是重定向到 http://gensho.acc.umu.se/debian-cd/8.0.0/i386/iso-cd/debian-8.0.0-i386-lxde-CD-1 .ISO 。您可能希望将CURLOPT_FOLLOWLOCATION设置为true。

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

否则,您将获得重定向页面的大小。