/** 二进制流生成文件
* $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input
* $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 都不能用于 enctype=multipart/form-data
* @param String $file 要生成的文件路径
* @return boolean
*/
function binary_to_file($file){
$content = $GLOBALS['HTTP_RAW_POST_DATA']; // 需要php.ini设置
if(empty($content)){
$content = file_get_contents('php://input'); // 不需要php.ini设置,内存压力小
}
$ret = file_put_contents($file, $content, true);
return $ret;
}
// demo
binary_to_file('photo/test.png');
上面代码测试多次无效,始终收不到内容,最后用一下方法解决:
发送端读取图片或文件二进制数据流进行base64编码,php用以上方法接收,然后base64解码即可
$xmlstr = $GLOBALS[HTTP_RAW_POST_DATA];
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');
$sLogo=base64_decode($xmlstr);
然后将解码后的数据写入文件,完美解决!!!
有任何疑问可以咨询哦
本文探讨了在PHP中处理二进制流数据的方法,包括使用$GLOBALS['HTTP_RAW_POST_DATA']和php://input读取数据。当遇到无法直接处理二进制流的问题时,介绍了通过Base64编码和解码来成功处理文件上传的有效解决方案。

被折叠的 条评论
为什么被折叠?



