php模拟post上传图片实现代码


Posted in PHP onJune 24, 2016

本文实例为大家分享了php模拟post上传图片的具体代码,供大家参考,具体内容如下

服务器和客户端都是php语言
但是客户端不是网页,不在浏览器上运行,而是在命令行运行
现在要做的是在客户端访问服务器,读取服务器上的图片,在客户端把图片的宽度变为100,然后再上传到服务器。
前两步都已完成:
 1、读取服务器上的图片,转为二进制传到客户端,客户端用fopen、fwrite重新生成图片存放到客户端org/resouse目录下
 2、再把org/resouse中的图片处理为宽度100存放到客户端org/w100目录下
 3、最后一步要怎样重新把它上传到服务器呢? 

前两步已经完成,可以忽略
客户端org/w100/目录下有图片:5k0ach.jpg,要怎样把这张图片上传到服务器?
 注意:客户端不是网页,没有表单之类的界面,是在命令行运行的
客户端gptest.php的部分代码(省略登陆部分的,假设登陆成功,直接为psn_id赋值): 

<?php 
$psn_id = "1fbahh"; 
$url = SERVER_URL . '/get_imginfo.php'; 
//SERVER_URL为我自己定义的常量,其值为:http://localhost:8080/phpClientSer 
$ans = postData_json($url, "psn_id=$psn_id");//postData_json()和postData()在check.php 
 
print_r($ans); 
 
if ($ans['count'] > 0) { 
 if (!file_exists("org")) { 
  mkdir("org"); 
  mkdir("org/resouse/"); //从服务器读取过来的原图片存放路径 
  mkdir("org/w100/"); //把上目录中临时存放的图片处理为宽度100后存放的路径 
  mkdir("org/temp/"); //出来gif图片是的临时mul 
 } 
 foreach ($ans['pdt_id'] as $k => $pdt_id) { 
  $img = "org/resouse/" . $pdt_id . $ans['img_style'][$k]; 
 
  $url = SERVER_URL . '/get_stream.php';//访问服务器的路径 
  $postString = $ans['img_url'][$k]; //传递的参数[服务器上图片的路径] 
  $stream = postData($url, "img_url=" . $ans['img_url'][$k]);//从服务器读取的图片内容 
  $file = fopen($img, "w+"); //打开文件准备写入 
  fwrite($file, $stream); //写入 
  fclose($file); //关闭 
 
  $image_resize = new image_resize(); 
  $image_resize->act($img, $pdt_id);//处理图片 
 
  $img_u = "org/w100/" . $pdt_id . $ans['img_style'][$k];//处理后图片的存放路径 
   
  //下面的代码是把处理过的图片转为二进制传到服务器,问题就出在这段代码 
  $stm = file_get_contents($img_u); 
  $url = SERVER_URL . '/create_img.php'; 
  $postString = "pdt_id=$pdt_id&img_style=" . $ans['img_style'][$k] . "&img_stm=" . $stm; 
  $move = postData($url, $postString); 
  echo "result---------" . $move . "\r\n"; 
 } 
} 
?>

check.php部分代码 

function postData($remote_server, $post_string) { 
 $context = array( 
  'http' => array( 
   'method' => 'POST', 
   'header' => 'Content-type: application/x-www-form-urlencoded' . 
   '\r\n' . 'User-Agent : Jimmy\'s POST Example beta' . 
   '\r\n' . 'Content-length:' . strlen($post_string) + 8, 
   'content' => $post_string) 
 ); 
 $stream_context = stream_context_create($context); 
 $data = file_get_contents($remote_server, false, $stream_context); 
 return $data; 
} 
 
function postData_json($remote_server, $post_string) { 
 $context = array( 
  'http' => array( 
   'method' => 'POST', 
   'header' => 'Content-type: application/x-www-form-urlencoded' . 
   '\r\n' . 'User-Agent : Jimmy\'s POST Example beta' . 
   '\r\n' . 'Content-length:' . strlen($post_string) + 8, 
   'content' => $post_string) 
 ); 
 $stream_context = stream_context_create($context); 
 $data = file_get_contents($remote_server, false, $stream_context); 
  
 return json_decode($data, true); 
}

客户端文件:

php模拟post上传图片实现代码

双击bat.bat文件就会在命令行运行pgtest.php

php模拟post上传图片实现代码

服务器处理客户端请求的文件目录[http://localhost:8080/phpClientSer/]:

php模拟post上传图片实现代码

login.php  登陆
get_imginfo.php  登陆成功后从数据库获取图片的名称、类型[jpg/png/gif]、路径等信息
get_stream.php  根据图片路径读取图片:

$img_url = $_POST['img_url']; 
$stream = file_get_contents($img_url); 
echo $stream;

create_img.php  接收客户端发送过来的二进制,创建新的图片: 

$img_stm = $_POST['img_stm']; 
$pdt_id = $_POST['pdt_id']; 
$img_style = $_POST['img_style']; 
 
$img_url = $_SERVER['DOCUMENT_ROOT'] . "upload2/w100/" . $pdt_id . $img_style; 
$file = fopen($img_url,"w+");//打开文件准备写入 
 
fwrite($file,$img_stm);//写入 
fclose($file);//关闭 
echo "ok";

服务器创建的新图片打不开:

php模拟post上传图片实现代码 

客户端gptest.php最后5行代码和服务器create_img.php的代码要改。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
php Smarty 字符比较代码
Feb 27 PHP
PHP 遍历文件实现代码
May 04 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
php递归删除目录与文件的方法
Jan 30 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 #PHP
java微信开发之上传下载多媒体文件
Jun 24 #PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 #PHP
php微信开发之上传临时素材
Jun 24 #PHP
PHP微信开发之模板消息回复
Jun 24 #PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 #PHP
简单解析PHP程序的运行流程
Jun 23 #PHP
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python的turtle库使用详解
2019/05/10 Python
Python 的AES加密与解密实现
2019/07/09 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
大学生表扬信范文
2014/01/09 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
债务纠纷委托书范本
2014/10/14 职场文书