繁体   English   中英

docker中的php Curl冲突CURLOPT_FILE和CURLOPT_RETURNTRANSFER

[英]php Curl confilict CURLOPT_FILE and CURLOPT_RETURNTRANSFER in docker

当我使用带有CURLOPT_FILECURLOPT_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 STDOUTfclose以获取有关如何将输出恢复到 STDOUT 以及在 curl 完成后需要关闭文件指针/流句柄的更多信息。

暂无
暂无

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

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