Curl PHP从动态链接获取/下载文件

时间:2012-02-18 09:30:28

标签: php file dynamic curl download

需要使用来自动态生成链接的cURL下载

link:something.com/fileid=hgkjfdhgfhdg

如果访问直接链接,则显示下载框(文件保存选项)。

但是如果使用CURL或file_get_contents,则只返回文件名。

$URL = https://somewebsite.com/fileid=hgkjfdhgfhdg
$fp = fopen("test.txt", 'w');
$c = curl_init($URL);
curl_setopt($c, CURLOPT_FILE, $fp);  
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);  
$contents = curl_exec($c);
$info = curl_getinfo($c);
curl_close($c); 
fclose($fp);
来自动态链接(test.txt)的

文件名已经知道。

网址= https://storage-ec2-32.sharefile.com/download.ashx?dt=dtca3192857a45452c84bd14e7500c7f46

2 个答案:

答案 0 :(得分:1)

问题是由于您连接到HTTPS URL并且cURL库无法找到证明ShareFile证书真实性所需的根CA证书包。因此,cURL在安全方面起作用并在启动文件传输之前中止连接。

解决此问题的最佳方法是将php.ini中的curl_cainfo PHP配置开关设置为包含您需要的所有CA证书的文件的绝对路径(根据{{3 }),然后重新启动服务器。

如果您无法执行此操作,则可以通过添加

完全禁用SSL证书验证
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

到您的代码,就在$contents = curl_exec($c);行的上方。

要小心这最后的解决方案是不安全的,并且可能会在中间攻击中为人类打开大门 - 但是将它作为最后的手段使用。

答案 1 :(得分:0)

首先,您应该将CURLOPT_HEADER设置为0以防止输出中的标头。其次,你确定你打开的文件是可写的吗?您应该检查fopencurl_setopt的结果。