php - 使用 curl 从 SSL 下载图像?

标签 php ssl curl

如何从 curl(https 站点)下载图像?

文件已保存在我的计算机上,但为什么它是空白的 (0KB)?

function save_image($img,$fullpath){
    $ch = curl_init ($img);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
    $rawdata=curl_exec($ch);
    curl_close ($ch);

    $fp = fopen($fullpath,'w');
    fwrite($fp, $rawdata);
    fclose($fp);
}

save_image("https://domain.com/file.jpg","image.jpg");

最佳答案

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

实际上应该是:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

所以 curl 知道它应该返回数据而不是回显它。

此外,有时您必须做更多的工作才能让 curl 接受 SSL 证书:
Using cURL in PHP to access HTTPS (SSL/TLS) protected sites

编辑:

鉴于您的使用情况,您还应该按照 Alix Axel 的建议将 CURLOPT_HEADER 设置为 false。

在 SSL 方面,我希望您能花时间阅读我建议的链接,因为有几种不同的方法来处理 SSL,如果数据不敏感,Alix 推荐的修复方法可能没问题,但是确实否定了安全性,因为它强制 CURL 接受任何服务器证书。

关于php - 使用 curl 从 SSL 下载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5045384/

相关文章:

php - 使用 PHP ZipArchive 将文件作为变量

javascript - 如何使用ajax上传图片

ssl - 本地主机上的 Behat cURL SSL 证书错误

Tomcat 运行,端口 80 连接被拒绝错误

php - PHP cURL访问失败至远程Docker Hub/注册表

javascript - 在 php/jquery 中替换或删除字符串中的双引号、单引号

php - 我应该使用 PHP 代码还是 MySQL 存储过程来创建高效的奖励积分系统?

ssl - 让 Jetty 发送正确的 SSL 证书

ssl - 使用 OpenSSL 验证证书

ftp - 在 TLS 服务上使用 QFtp 访问文件