使用php://input接收数据流(还有多个参数的解决办法)

来源:互联网 发布:帝国cms tags自动生成 编辑:程序博客网 时间:2024/06/15 03:54
最近的工作中接触到一个手机上传图片到服务器的小程序,刚开始一直在想该用怎样的方式去接收数据,最后在网上看到大家都用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\r\n");  fputs($fp, "Host: {$host}\r\n");  fputs($fp, "Content-Type: {$http_entity_type}\r\n");  fputs($fp, "Content-Length: {$http_entity_length}\r\n");  fputs($fp, "Connection: close\r\n\r\n");  fputs($fp, $http_entity_body . "\r\n\r\n");   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和另外一个假设是Y2.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);}

0 0
原创粉丝点击