[英]cURL PHP not working if CURLOPT_RETURNTRANSFER set true
[英]php Curl confilict CURLOPT_FILE and CURLOPT_RETURNTRANSFER in docker
当我使用带有CURLOPT_FILE
和CURLOPT_RETURNTRANSFER
选项的 curl 时,文件为空,没有任何 curl 错误:
$fp = fopen($saveTo, 'w+');
$ch = curl_init($fileUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'ccc.text');
curl_exec($ch);
卷曲错误:没有错误
echo curl_strerror(curl_errno($ch)); //No error
通过删除CURLOPT_RETURNTRANSFER
结果为真。
我在 php 5.6 和 7.2 中使用 apache 和 php-fpm 7.2 在 docker 中使用 nginx 对其进行测试。
在将CURLOPT_RETURNTRANSFER
CURLOPT_FILE
为文件句柄之前,需要将 CURLOPT_RETURNTRANSFER 设置为true
。
与PHP 手册中的此评论进行比较:
似乎在设置 CURLOPT_RETURNTRANSFER 之前设置 CURLOPT_FILE 不起作用,大概是因为 CURLOPT_FILE 取决于设置的 CURLOPT_RETURNTRANSFER。
所以尝试不同的顺序:
$fp = fopen($saveTo, 'wb');
$ch = curl_init($fileUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'ccc.text');
$result = curl_exec($ch);
另请参阅 PHP 手册中的这些注释: CURLOPT_FILE to STDOUT和fclose以获取有关如何将输出恢复到 STDOUT 以及在 curl 完成后需要关闭文件指针/流句柄的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.