`
wangking717
  • 浏览: 263265 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

使用php://input接收手机图片上传二进制流

 
阅读更多

最近的工作中要用到手机上传图片到PHP服务端,一般会有两种方式来实现,一种是让手机客户端模拟HTTP POST方式,还有一种就是用二进制流方式。

 

最后决定用二进制方式来接收图片的上传。

 

1.客户端模拟图片上传程序(test.php):

<?php
$data=file_get_contents('1.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 = '/upload.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;
}
?>

 

2.服务端接收程序(upload.php):

<?php
error_reporting(E_ALL);
function get_contents() { 
  $xmlstr = file_get_contents('php://input')?file_get_contents('php://input') : gzuncompress($GLOBALS['HTTP_RAW_POST_DATA']);//得到post过来的二进制原始数据
  $filename=time().'.png';
  if(file_put_contents($filename,$xmlstr)){
 echo 'success';
  }else{
 echo 'failed';
  }
}
get_contents();
?>

 

执行test.php,看看你的根目录是不是有新的图片了!

 

众所周知,通过二进制方式的不能够通过get,post方式拿到参数,那怎么进行参数的传递呢?

答案就是让客户端把二进制进行一个分割组拼即可,服务端只需要把拿到的二进制字符串进行分隔就可以得到了。

 

3户端模拟图片上传程序(test2php):

<?php
$data=file_get_contents('1.png');
$data = 'www.4jcms.com[x]四季企业网站系统[]'.$data;//假设服务端需要额外的两个参数,URL以及站名,我们用“[x]”进行组合,服务端也用这个进行拆分
$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 = '/upload2php';
$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;
}
?>

 

4服务端接收程序(upload2php):

<?php
error_reporting(E_ALL);
function get_contents() { 
  $xmlstr = file_get_contents('php://input')?file_get_contents('php://input') : gzuncompress($GLOBALS['HTTP_RAW_POST_DATA']);//得到post过来的二进制原始数据
  $arr = explode("[x]",$data,3);
  $url = $arr[0];  //网址参数
  $sitename = $arr[1];  //站名参数
  $data = $arr[2];  //图片二进制字符串
  $filename=time().'.png';
  if(file_put_contents($filename,$data)){
 echo 'success';
  }else{
 echo 'failed';
  }
}
get_contents();
?>

 

运行test2.php看看,是不是就得到你想要的结果了呢。

分享到:
评论

相关推荐

    php输入流php://input使用示例(php发送图片流到服务器)

    例如,如果你有一个摄像头应用,用户拍摄照片后,可以通过API直接发送图片的二进制流到服务器。服务器端通过`file_get_contents('php://input')`接收到图片流,然后可以写入到文件系统中,创建一个新的图片文件。...

    PHP输入流php://input实例讲解

    在这种情况下,由于文件上传涉及到二进制数据,PHP不会将数据填充到`php://input`,而是通过其他方式处理文件上传,例如`$_FILES`全局变量。 3. 当`Content-Type`不是`multipart/form-data`时,`php://input`的内容...

    php接收二进制图片(ios、安卓上传图片)

    **一、iOS和Android图片二进制上传** 1. **iOS上传图片**:在iOS中,通常使用`NSData`对象来处理图片的二进制数据。通过`UIImageJPEGRepresentation`或`UIImagePNGRepresentation`方法,可以将`UIImage`对象转换为...

    php中$_POST与php://input的区别实例分析

    但要注意,`php://input`仅适用于非多部分/二进制数据的POST请求,即当`enctype`属性不是`multipart/form-data`时。 例如,如果表单数据以JSON格式发送: ```javascript let formData = JSON.stringify({ name: '...

    PHP实现接收二进制流转换成图片的方法

    在本文中,我们将探讨如何利用PHP语言接收二进制数据流,并将其转换成图片。这一技术涉及对HTTP请求的数据处理以及PHP文件和目录操作的知识点。具体来说,我们会先了解PHP如何处理二进制流数据,随后深入到文件上传...

    PHP伪协议相关 -.pdf

    - **定义**:数据协议允许直接在URL中嵌入文本或二进制数据。 - **示例**: ```php echo file_get_contents('data:text/plain;base64,SGVsbG8gd29ybGQ='); ``` - **用途**:用于测试或传递简单的文本数据,...

    php基础教程文件以二进制形式上传并放入数据库

    本文将深入解析如何使用PHP实现文件的二进制上传,并将其存储至数据库中的过程。 #### 一、环境配置与连接数据库 首先,我们来看`conn.php`文件,它是用来建立数据库连接的。此脚本使用的是已过时的`mysql_*`函数...

    接收android端数据转化在图片保存

    如果涉及到图片的预览,Android可以使用`BitmapFactory`解析从服务器返回的URL获取的二进制流,然后显示在ImageView中: ```java InputStream is = new URL(url).openStream(); // 获取图片流 Bitmap bitmap = ...

    flash as3 php 保存存图片

    例如,你可能使用绘图API或加载外部图像,然后将BitmapData对象转换为JPEG或PNG格式的二进制数据,准备发送到服务器。 以下是一个简单的AS3代码示例,展示了如何将BitmapData对象转换为字节数组: ```actionscript...

    多(单)图片上传

    - **异步上传**:使用AJAX或Websocket实现非阻塞的异步上传,不影响用户其他操作。 - **断点续传**:对于大文件,支持断点续传能提高上传稳定性。 - **CDN分发**:利用内容分发网络(CDN)加速图片加载,改善用户...

    文件流上传图片至远程服务器

    对于图片这种大型二进制数据,使用文件流尤其合适。 要实现图片的文件流上传,我们需要以下几个步骤: 1. **文件读取**:在客户端,我们需要读取图片文件并将其转化为文件流。在PHP中,可以使用`fopen`函数打开...

    php保存二进制原始数据为图片的程序代码

    在PHP中,保存二进制原始数据为图片的程序代码主要涉及到两个方面:接收POST请求中的二进制数据和将这些数据写入到文件系统中作为图像文件。下面我们将详细探讨这个过程,以及相关的PHP函数和注意事项。 首先,我们...

    unity与php的交互-图片上传下载.zip

    PHP的`move_uploaded_file()`函数可以帮助我们将接收到的二进制流写入服务器的特定目录,确保图片文件安全存储。 在图片下载环节,Unity会发送一个HTTP GET请求到PHP服务器,请求特定图片的URL。PHP端可以使用`...

    Flash保存图片PHP版

    这通常涉及到创建一个PHP文件流(`fopen`函数),将二进制数据写入文件(`fwrite`函数),并确保文件以正确的图片格式关闭(例如,JPEG或PNG,这取决于Flash传递的数据类型)。 4. **文件保存**:PHP需要在服务器上...

    php上传图片到数据库.zip

    5. 使用`INSERT INTO`语句将二进制数据插入到`images`表中。 6. 返回成功或错误消息,以便前端显示。 `show.php`用于展示已上传的图片。它从数据库检索图片数据,然后将其输出到浏览器。这通常涉及到设置正确的HTTP...

    PHP上传图片带预览功能

    这里的`enctype="multipart/form-data"`属性是必须的,因为它允许我们发送二进制数据(如图片)到服务器。 接下来,我们需要在`upload.php`文件中处理上传请求。PHP的`$_FILES`全局数组包含了关于上传文件的所有...

    PHP+jQuery+Ajax多图片上传

    在多图片上传中,Ajax扮演着关键角色,它将用户选取的图片数据以二进制形式发送到服务器,同时可以显示上传进度,提供更好的用户体验。 实现步骤如下: 1. **前端HTML**:创建一个`&lt;input type="file"&gt;`元素,设置...

    flash+php头像截取上传(绝对能用)

    当Flash将裁剪后的图像数据以二进制流的形式发送到服务器时,PHP需要解析这个数据,通常通过HTTP的POST请求完成。在PHP中,可以使用`file_get_contents('php://input')`获取POST请求的原始数据。然后,将接收到的二...

Global site tag (gtag.js) - Google Analytics