当前位置: 首页 > 知识库问答 >
问题:

PHP Curl获取下载文件大小

郝冥夜
2023-03-14

我在两个不同的服务器上使用这个脚本

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查找日期:2012年6月12日星期二07:04:35 GMT服务器:Apache/2.2.16(Debian)X-Powered-By:PHP/5.3.3-7 squeeze13过期时间:1981年11月19日星期四08:52:00 GMT缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0 Pragma:无缓存位置:http://stor1076.uploaded.to/dl/b3411ded-0f45-4efc-b705-8c8ac89b5e41更改:接受编码连接:关闭内容类型:text/html HTTP/1.1 200 OK服务器:nginx/1.0.5日期:2012年6月12日星期二07:04:35 GMT内容类型:视频/x-msvideo内容长度:733919232上次修改:2012年5月29日星期二15:10:07 GMT连接:保持活动内容处置:附件;filename=“Saw.[西班牙语.DVDRip].[XviD-Mp3].by.SDG.avi”接受范围:字节

非工作状态:

HTTP/1.1 302找到日期:星期二,12六月2012 07:05:26GMT服务器:Apache/2.2.16(Debian)X-供电通过:PHP/5.3.3-7挤压13过期:星期四,11月19日1981 08:52:00GMT缓存控制:无存储,无缓存,必须重新验证,后-check=0, pre-check=0 Pragma: no缓存位置:http://stor1164.uploaded.to/dl/22c3d242-365d-4e1e-b903-f1e2b81812c2变化:接受编码连接:关闭内容类型:文本/html

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

另外,我做了一个curl\u getinfo($ch,CURLINFO\u HTTP\u code)并给出了结果:

工作一:200

非工作一:302

有什么想法吗?

共有2个答案

东弘扬
2023-03-14

好的,这是一个开放的问题。谢谢各位。

乐正远航
2023-03-14

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

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

因此,您的设置不同。我不知道它们到底是如何一起运行的,但这提供了一些见解,并可能帮助您解决这个问题:http://kbeezie.com/view/apache-with-nginx/

 类似资料:
  • 问题内容: 基本上,我想确定是否应该使用AJAX下载文件,具体取决于文件大小。 我猜这个问题也可以表述为:我如何仅获取ajax请求的标头? 编辑 :评论中的ultima-rat0告诉了我两个已经被问到的显然与这个相同的问题。它们非常相似,但是都需要jQuery。我想要一个非jQuery解决方案。 问题答案: 您可以手动获取XHR响应头数据: http://www.w3.org/TR/XMLHttp

  • cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接

  • X2.2.0新增 sp_get_file_download_url($file,$expires=3600) 功能: 获取文件下载链接 参数: $file: 数据库保存的文件路径 $expires:文件过期时间(七牛) 返回: 类型string,文件下载链接 使用: $url = sp_get_file_download_url('portal/23232.png');

  • 问题内容: 我正在从Web服务器下载整个目录。它可以正常工作,但是我无法弄清楚如何在下载之前获取文件大小以进行比较(如果服务器上是否已更新)。可以像从FTP服务器下载文件一样完成此操作吗? @Jon:感谢您的快速回答。它可以工作,但是Web服务器上的文件大小略小于下载文件的文件大小。 例子: 与CR / LF转换有关系吗? 问题答案: 我转载了您所看到的: 输出此: 我在这里做错了什么?os.st

  • 我有一个文件表示为块的列表,目标是下载所有块,加入并保存为一个文件。 它应该适用于大文件 应该是跨浏览器解决方案 null null null null 但我仍然无法实现我的目标与涵盖的需求… 如果有人有经验,最好的解决方案,我恳请分享它在这里。谢谢

  • cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接