2011-05-15 126 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

相關問題