PHP curl是一種在Web開發中經常用到的網絡傳輸工具,而它的二進制使用則更是讓人頭疼。二進制數據是由0和1組成的一種數據表示方法,通常直接輸出會產生數據污染,因此需要轉換或者按照一個規則進行處理。Curl也不例外,它的二進制數據的處理也需要我們特殊對待,下面我們來一一講解。
首先是如何發送二進制數據,我們可以使用Curl中的CURLOPT_POSTFIELDS選項。這個選項的傳參要求是一個數組,數組元素的格式是array('key'=>'value'),其中value可以是字符串或者數組(數組內的字符串會被自動合并成一個字符串),而我們需要注意的就是使用字符串時需要使用base64編碼進行轉換。以下是一個發送二進制數據的示例:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); $data = array( 'file' =>base64_encode(file_get_contents($filename)) ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); curl_close($ch);
在接收二進制數據時也需要一樣的處理,例如我們要將服務器返回的圖片數據保存到本地,則需要按照以下格式進行處理:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); if ($result !== false && $info['http_code'] === 200) { header('Content-Type:'.$info['content_type']); header('Content-Disposition:attachment;filename="image.jpg"'); echo base64_decode($result); }
除此之外,curl二進制數據處理還有一個限制就是需要設置頭信息,它的作用在于讓接收端知道傳輸的是二進制數據而不是普通字符串數據。以下是一個示例:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $headers = array('Content-Type: binary/octet-stream'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); if ($result !== false && $info['http_code'] === 200) { header('Content-Type:'.$info['content_type']); header('Content-Disposition:attachment;filename="file.bin"'); echo $result; }
以上就是PHP curl二進制數據的處理方法,雖然相對于普通文本數據的處理還稍微麻煩了些,但是只要我們掌握了相應的方法,就能讓curl在處理二進制數據時更加得心應手。
上一篇php curl 休眠
下一篇php return