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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP Pear 安装及使用
Mar 19 PHP
PHP关联链接常用代码
Nov 05 PHP
php读取excel文件的简单实例
Aug 26 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 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
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
详细介绍Python中的偏函数
2015/04/27 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
python实现梯度下降算法
2020/03/24 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
python空元组在all中返回结果详解
2020/12/15 Python
挂牌仪式主持词
2014/03/20 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
国庆节慰问信
2015/02/15 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server