您的位置:首页 > 编程语言 > PHP开发

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

2013-06-24 00:51 537 查看
转自:http://www.jacoobs.com/php/59.html

作者:Jacoob

最近的工作中接触到一个手机上传图片到服务器的小程序,刚开始一直在想该用怎样的方式去接收数据,最后在网上看到大家都用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和另外一个假设是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);

}

^_^,看看/var/www/目录下是不是生成了一个图片?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐