繁体   English   中英

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

[英]Curl PHP getting/download file from dynamic link

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

链接: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

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

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

如果您无法执行此操作,则可以通过添加来完全禁用SSL证书验证

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

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

提防最后的解决方案是不安全的,并且可能会在中间攻击时向人敞开大门-将其用作最后的手段。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM