有些时候我们需要直接发送二进制流文件给服务端,如我得到一个远程图片地址,在传到服务器上。
写法如下
二进制流文件的发送
/** php 发送流文件
* @param String $url 接受的路径
* @param String $file 要发送的文件
* @return boolean
*/
function sendStreamFile($url, $file){
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'content-type:application/x-www-form-urlencoded',
'content' => file_get_contents($file)
)
);
$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context);
$ret = json_decode($response, true);
return $ret['success'];
}
$ret = sendStreamFile('http://127.0.0.1/receive.php', 'http://odozak4lg.bkt.clouddn.com/20161019173958073f695d35a.jpg');
var_dump($ret);
服务端接收二进制流文件
/** php 接收流文件
* @param String $file 接收后保存的文件名
* @return boolean
*/
function receiveStreamFile($receiveFile){
$streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
if(empty($streamData)){
$streamData = file_get_contents('php://input');
}
if($streamData!=''){
$ret = file_put_contents($receiveFile, $streamData, true);
}else{
$ret = false;
}
return $ret;
}
$receiveFile = 'receive.png';
$ret = receiveStreamFile($receiveFile);
echo json_encode(array('success'=>(bool)$ret));
原文链接:PHP二进制流文件的发送与接,转发请注明来源!