【问题标题】:what does curlopt_binarytranfer exactly mean?curlopt_binarytransfer 到底是什么意思?
【发布时间】:2011-05-15 08:36:22
【问题描述】:

我不明白有什么区别

CURLOPT_RETURNTRANSFER AND
CURLOPT_BINARYTRANSFER

我写了一个脚本来检查它

<?php
$image_url = "http://localhost/curl/img1.png";
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
header("Content-type: image/jpeg");
print $image;
?>

在这种情况下,我会在浏览器中显示图像 如果我删除该行

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

我仍然可以在浏览器中显示图像。

现在如果我删除该行

header("Content-type: image/jpeg");

然后在浏览器中显示 iget 二进制数据(看起来像垃圾)在这两种情况下我是否删除 curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 或者我不删除。 那么这个选项CURLOPT_BINARYTRANSFER 有什么不同呢?

【问题讨论】:

    标签: php libcurl


    【解决方案1】:

    如果我正确理解此 PHP 错误报告和解决方案,PHP 似乎不再使用 CURLOPT_BINARYTRANSFER。

    https://bugs.php.net/bug.php?id=55635

    【讨论】:

    • 您理解正确,提交中的NEWS file diff 表示“不再使用CURLOPT_BINARYTRANSFER。该常量仍然存在以实现向后兼容性,但什么也不做”
    【解决方案2】:

    通过这种卷曲,我们正在研究两个传输:

    1. 数据从目标主机传输到我们的 PHP 主机
    2. 它是从我们的 PHP 主机发送到我们的浏览器的。

    通过删除header("Content-type: image/jpeg");,您拒绝让浏览器知道应该如何解释后面的内容。这与CURLOPT_BINARYTRANSFER无关,影响第一次传输。

    【讨论】:

    • 那么 CURLOPT_BINARYTRANSFER 能起到什么作用呢?可以举个例子吗?
    • 从您的链接中我可以理解的是,人们在理解 CURLOPT_BINARYTRANSFER 方面已经尝试了更多的东西。
    • @lovesh,真的。它实际上是 PHP 所必需的,因此它知道如何处理返回的结果。但责任在于卷曲。所以,基本上,PHP 是在告诉 curl:每当你要获取二进制数据时,告诉我,这样我就不会搞砸了。但是,PHP 在判断返回的数据是否应该被视为二进制或文本方面的智能和复杂性随着时间的推移而波动(一些版本引入了使其恶化的错误,而一些版本则对其进行了改进)。因此,通过某些构建,您可以在不使用该选项的情况下获得结果。但为了安全起见,您最好始终警告 PHP。
    猜你喜欢
    • 2017-08-07
    • 2017-07-20
    • 2014-09-23
    • 2014-07-25
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多