需要使用来自动态生成链接的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
答案 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以防止输出中的标头。其次,你确定你打开的文件是可写的吗?您应该检查fopen
和curl_setopt
的结果。