PHP Curl获取下载文件大小


PHP Curl to get a download filesize

我在两个不同的服务器中使用此脚本:

function curlGetFileInfo($url, $cookies="default"){
global $_config;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'serverpath/cookies/'.$cookies.'.txt');
$data = curl_exec($ch);
curl_close($ch); 
if ($data === false) { 
    return 0;
}
//echo $data;   
$info['filename'] = get_between($data, 'filename="', '"');
$info['extension'] = end(explode(".",$info['filename']));
if (preg_match('/Content-Length: ('d+)/', $data, $matches)) {
  $info['filesize'] = (int)$matches[1];
}
return $info;
}
这些服务器具有相同的PHP版本

和相同的PHP-Curl版本。以下是 curl 结果的两个不同标头:

工作一:

HTTP/1.1 302 找到日期: 星期二, 12 六月 2012 07:04:35 GMT 服务器: Apache/2.2.16 (Debian) X-Powered-by: PHP/5.3.3-7+squeeze13 过期: 周四, 19 十一月 1981 08:52:00 GMT 缓存控制: 无存储, 无缓存,必须重新验证,检查后=0,预检查=0 杂注:无缓存 位置: http://stor1076.uploaded.to/dl/b3411ded-0f45-4efc-b705-8c8ac89b5e41 变化: 接受编码 连接: 关闭 内容类型: 文本/html HTTP/1.1 200 OK 服务器: nginx/1.0.5 日期: 2012年6月12日 星期二 07:04:35 GMT 内容类型:视频/x-ms视频 内容长度:733919232 最后修改日期: 2012 年 5 月 29 日星期二 15:10:07 GMT 连接: 保持活动状态 内容处置:依恋; 文件名="锯。[西班牙语.DVDRip]。[XviD-MP3].by.可持续发展目标.avi"接受范围: 字节

非工作一:

HTTP/1.1 302 找到日期: 星期二, 12 六月 2012 07:05:26 GMT 服务器: Apache/2.2.16 (Debian) X-Powered-by: PHP/5.3.3-7+squeeze13 过期: 周四, 19 十一月 1981 08:52:00 GMT 缓存控制:无存储、无缓存、 必须重新验证,检查后=0,预检查=0 杂注:无缓存 位置: http://stor1164.uploaded.to/dl/22c3d242-365d-4e1e-b903-f1e2b81812c2 变化: 接受编码 连接: 关闭 内容类型: 文本/html

Cookie 设置为正常(登录),其他简单的 Curl 函数工作正常。

另外,我做了一个curl_getinfo($ch, CURLINFO_HTTP_CODE),给了我这个结果:

工作一:200

非工作一:302

知道吗?

在工作上,您似乎正在运行Apache和nginx。您可以看到有两个 HTTP 响应:

HTTP/1.1 302 找到日期: 星期二, 12 六月 2012 07:04:35 GMT 服务器: Apache/2.2.16 (Debian) HTTP/1.1 200 OK Server: nginx/1.0.5

因此,您的设置会有所不同。我不知道它们究竟是如何一起运行的,但这提供了一些见解,并可能有助于您解决它:http://kbeezie.com/view/apache-with-nginx/

好的,这是一个open_basedir问题。谢谢大家。