2011-05-15 133 views
8

我不明白的是什么,我写了一个脚本来检查它curlopt_binarytranfer究竟意味着什么?

<?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; 
?> 

在这种情况下,我得到在浏览器 显示的图像,如果我删除行

CURLOPT_RETURNTRANSFER AND 
CURLOPT_BINARYTRANSFER 

的区别

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

我仍然得到在浏览器中显示的图像。

,现在如果删除

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

然后的iget二进制数据显示在浏览器(看起来像垃圾)在这两种情况下i是否删除 curl_setopt线($ CH,CURLOPT_BINARYTRANSFER,1); 或我不删除。 那么这个选项CURLOPT_BINARYTRANSFER做出什么区别?

回答

3

有了这种卷曲的,我们正在寻找转移:从目标主机

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

通过删除header("Content-type: image/jpeg");您否认浏览器应该如何解释内容的线索。这与CURLOPT_BINARYTRANSFER无关,影响首次转账。

+0

然后可以CURLOPT_BINARYTRANSFER做出什么样的影响?你能给个例子吗? – lovesh 2011-05-15 09:28:12

+0

我从你的链接中可以理解的是,人们在理解CURLOPT_BINARYTRANSFER时尝试了更多的东西。 – lovesh 2011-05-15 21:16:59

+1

@lovesh,真的。它实际上是PHP需要的,所以它知道如何处理返回的结果。但责任在于卷曲。所以,基本上,PHP正在告诉curl:*无论何时你要获取二进制数据,告诉我所以我不会把它弄糟。但是,PHP凭借自己的智能和复杂性来判断返回的数据是否应该被视为二进制文本或文本随着时间的推移而波动(某些版本引入了使其恶化的错误,并且一些版本改进了它)。所以,对于一些版本,您可以在不使用该选项的情况下获得结果。但为了安全起见,你最好总是警告PHP。 – 2011-05-15 21:32:54

8

它看起来像CURLOPT_BINARYTRANSFER不再被PHP使用,如果我正确理解这个PHP错误报告和解决方案。

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

+0

你正确地理解它,在[NEWS文件DIFF](http://git.php.net/?p=php-src.git;a=blobdiff;f=NEWS;h=7028faf2500381b61bada2c9f1ac50c4a25339c5;hp=2e83f29921f180ae55382f061e1fd48a1a664626; hb = 33d3eb1e43134deb3e108108f62febdabc8a0aa1; hpb = aeaa4b3da6261b87bae2f80b8507f9081ca4cd55)在提交中说“CURLOPT_BINARYTRANSFER不再使用。该常量仍然存在,以保持向后兼容性,但是什么都不做” – user 2014-11-27 21:54:34

相关问题