使用php://input接收数据流(还有多个参数的解决办法)
最近的工作中接触到一个手机上传图片到服务器的小程序,刚开始一直在想该用怎样的方式去接收数据,最后在网上看到大家都用php://input来接收。就去查了下php://input的官方介绍,确实可以,除了在enctype="multipart/form-data"情况下,是无法接收到流的,其他情况下都可以。既然这个可以,我就在本地先写个测试文件 上传文件 <?php //@file phpinput_post.php $data=file_get_contents("btn.png"); $http_entity_body = $data; $http_entity_type = "application/x-www-form-urlencoded"; $http_entity_length = strlen($http_entity_body); $host = "127.0.0.1"; $port = 80; $path = "/image.php"; $fp = fsockopen($host, $port, $error_no, $error_desc, 30); if ($fp) { fputs($fp, "POST {$path} HTTP/1.1 "); fputs($fp, "Host: {$host} "); fputs($fp, "Content-Type: {$http_entity_type} "); fputs($fp, "Content-Length: {$http_entity_length} "); fputs($fp, "Connection: close "); fputs($fp, $http_entity_body . " "); while (!feof($fp)) { $d .= fgets($fp, 4096); } fclose($fp); echo $d; } ?> 接收文件 <?php /** *Recieve image data **/ error_reporting(E_ALL); function get_contents() { $xmlstr= file_get_contents("php://input"); $filename=time().".png"; if(file_put_contents($filename,$xmlstr)){ echo "success"; }else{ echo "failed"; } } get_contents(); ?> 运行test.php你就可以看到相应的结果,成功了,也在相应目录下看到了我刚才上传的文件。如果你做服务端,就只需要接收文件里面的php代码了。我上面模拟的上传就需要根据客户端来相应构造了,我后面也和客户端对接上了。所以是可以用的,还有就是客户端上传的时候可能会一些数据问题,因为我们在这个过程中出现了各种状况。 下文转自:http://www.0377joyous.com/archives/1135.html 今天公司要求用APP发送一个图片到PHP程序接收并保存起来,而且中间还需要很多参数! 以前没有做过APP和PHP交互,这次算是一个挑战吧(对一个没有人指导实习生来说) 1.APP发1.jpg,而且带有两个参数一个是假设是X和另外一个假设是Y 2.PHP负责接受X,Y和1.jpg,并且还要保存1.jpg到服务器 步骤: 1.PHP页面代码 $data = file_get_contents(‘php://input’);//这样可以获取到未经处理的原数据(保持发送的图片流不被破坏),在APP上使用X#Y#图片流使用http发送到PHP页面 //然后PHP页面进行数据处理和分割 2.数据处理 先分割数据流 $vars = explode(“#”,$data,3);//这样防止对图片流造成破坏只分割成三份即可 /*省去若干代码*/ $img = $vars[2]; $path = ‘/var/www/uploads/’; $newfilename = time().”.jpg”; $file = $path.$newfilename; $handle = fopen($file, “w”); if ($handle) {fwrite($handle,$img); fclose($handle); }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。