php 利用http上传协议(表单提交上传图片 )

  主要就是利用php 的 fsocketopen 消息传输。 这里先通过upload.html 文件提交,利用chrome抓包,可以看到几个关键的信息。

首先指定了表单类型为multipart/form-data;。 
boundary是分隔符 
因为上传文件不在使用原有的http协议了。请求内容不再可能以 
x = y方式发送了。而使用了 
分隔符 
字段内容 
分隔符号 
字段内容2 
而boundary就是指定分隔符号的标志。 
请求的内容就应该是这样的了。 

在来看下消息体

 

#socket_upload.php  拼接http上传协议格式 post请求 

<?php
class SOCKET_UPLOAD
{private $host = '127.0.0.1';private $port = 80;private $errno = null;private $errstr = null;public $timeout = 30;public $url = '/socket/socketupload/upload.php';//请求地址private $fp = null;private $header = '';  //头信息private $body = '';    //消息体private $boundary = '----abcdefg'; //指定分隔符号的标志private $res = null;  //完整字符串private $file = null; //文件private $form = null; //表单public function __construct($form ='',$file=''){//连接本地80端口$this->fp = fsockopen($this->host,$this->port,$this->errno,$this->errstr,$this->timeout);if (!$this->fp)exit('failed');//赋值$this->form = $form;$this->file = $file;//设置头信息,消息体$this->setHead();$this->setBody();//拼接整个请求信息$this->getStr();}public function write(){//echo $this->res;//写入fwrite($this->fp, $this->res);//打印输出信息$response = '';while($row=fread($this->fp, 4096)){$response .= $row;}fclose($this->fp);$pos = strpos($response, "\r\n\r\n");$response = substr($response, $pos+4);echo $response;}private function getStr(){$this->header .= "Content-Length:".strlen($this->body)."\r\n";$this->header .= "Connection: close\r\n\r\n";$this->res = $this->header.$this->body;}//设置头信息private function setHead(){$this->header .= "POST {$this->url} HTTP/1.1\r\n";$this->header .= "HOST:{$this->host} \r\n";$this->header .= "Content-Type:multipart/form-data;  boundary={$this->boundary}\r\n";}//设置消息体private function setBody(){$this->form();$this->file();}//非文件表单private function form(){if ($this->form && is_array($this->form)){foreach ($this->form as $key=>$val){$this->body .= "--$this->boundary"."\r\n";$this->body .= "Content-Disposition: form-data; name=\"{$key}\"\r\n";$this->body .= "Content-type:text/plain\r\n\r\n";$this->body .= "{$val}\r\n";}}}//文件表单private function file(){if ($this->file && is_array($this->file)){foreach ($this->file as $key=>$val){$this->body .= "--$this->boundary"."\r\n";$this->body .= "Content-Disposition: form-data; name=\"{$val['name']}\"; filename=\"{$val['filename']}\"\r\n";$this->body .= "Content-Type: {$val['type']}\r\n\r\n";$this->body .= file_get_contents($val['path'])."\r\n";$this->body .= "--{$this->boundary}";}}}}
$form = ['name'=>'lemon','age'=>'12'
];$file = [['name'=>'file','filename'=>'a.jpg','path'=>'a.jpg','type'=>'image/jpeg',]
];$upload = new SOCKET_UPLOAD($form,$file);
$upload->write();

#接收post请求并保存图片代码

<?php
defined('UPLOAD') or define('UPLOAD',dirname(__FILE__).'/upload');if ($_FILES['file']['error'] == 0){$name = $_POST['name'];$age  = $_POST['age'];echo 'name is:',$name,"<br/>age is:",$age."<br/>";$file = $_FILES['file'];$ext = strrchr($file['name'],'.');$filename = $_SERVER["REQUEST_TIME"].$ext;if (move_uploaded_file($file['tmp_name'],UPLOAD.'/'.$filename)) {echo '<img src="upload/'.$filename.'">';}}

范例代码:http://files.cnblogs.com/files/loveyouyou616/socket.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新认识Docker Compose之Sidecar模式

什么是Docker Compose在微服务盛行的今天&#xff0c;我们通常是这么定义Compose的&#xff1a;对容器的统一启动和关闭的编排工具。但是我以前还是有个疑惑&#xff0c;谁会用Compose在一台服务器上部署多个服务呢&#xff1f;干脆直接用单体服务就行了&#xff01;直到我遇到…

数学家看到就把持不住,高斯被它迷得神魂颠倒,2600年的数学史里的一个奇迹……...

全世界只有3.14 % 的人关注了爆炸吧知识数学的美两个字就能说清数学女神很可能是个洁癖她的苛刻就体现在公式里那每一个符号每一个数字都不允许有哪怕一点杂质如此才是她最认可的孩子因为知道了勾股定理古人们才创造了辉煌因为有了经典力学公式人类才能探索星辰大海因为掌握了质…

编程语言也环保?C语言领跑,Python、Perl垫底

文 | Travis出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;毋庸置疑&#xff0c;Python 是世界上最流行的编程语言之一&#xff0c;其被广泛运用于人工智能、数据分析、网络爬虫和 Web 开发等领域。在上个月的 TIOBE 榜单中&#xff0c;Python 一举超过…

我靠“读书笔记”闷声赚3万:那些你看不上的行业,往往最赚钱

全世界只有3.14 % 的人关注了爆炸吧知识你有没有计算过&#xff1a;你的时间&#xff0c;值多少钱&#xff1f;如果你月薪5000&#xff0c;一个月工作20天&#xff0c;每天8小时&#xff0c;那么你1小时的价值就是32元。然而&#xff0c;现在请一个打扫卫生的钟点工&#xff0c…

微信企业号开发之如何建立连接

http://www.07net01.com/2014/09/167991.html 连接将使你的企业号更具价值&#xff0c;你可以使用以下三种方式&#xff0c;连接你的企业号及企业应用&#xff1a; 1、企业应用调用企业号提供的接口&#xff0c;管理或查询企业号后台所管理的资源、或给成员发送消息等&#xff…

完全颠覆你世界观的10个科学实验!从此脑洞大开

全世界只有3.14 % 的人关注了爆炸吧知识这两天超模君逛知乎时&#xff0c;发现有人提问&#xff1a;“如何让孩子学会主动”&#xff1f;孩子学会主动是很重要的&#xff0c;特别是在学习方面&#xff0c;懂得主动学习无论是在小时候还是未来都很有优势。可能很多家长都有类似的…

char varchar java_在数据库中varchar与char的区别

char是固定长度类型varchar是可变的长度类型char和varchar类型相似&#xff0c;但是它们的存储和检索方式不同。在MySQL5.0.3&#xff0c;它们在最大长度和是否保留尾部空格也不相同。char和varchar定义了字符串的最大长度。例如&#xff0c;char(30)可以放30个字符。char列的长…

震撼世界的基建狂魔,中国制造的超级工程到底有多牛?

全世界只有3.14 % 的人关注了数据与算法之美1949年的中华大地上一无所有&#xff0c;而现在一栋栋高楼伫立在这片土地上的时候不禁感叹&#xff0c;到底是什么支撑着让我们从一片荒漠变成如今高楼耸立&#xff1f;今天小编带来的这部纪录片《超级工程》&#xff0c;带你认识被称…

C# WPF图表控件之ChartControl用法指南①

“ 引言部分&#xff0c;总领全篇文章的中心内容。”WPF的DevExpress ChartControl是一种功能强大的可视化工具&#xff0c;可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。01—将数据绑定到Chart SeriesStep 1. 创建新项目并添加图表创建一个新的WPF应用程…

Android之SwipeRefreshLayout

wipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support library的版本升级到19.1。 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消…

你以后会不会有小三?

1 千万别碰到小孩就去逗他&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 像极了早上刚睡醒炸毛的你▼3 乞丐和社畜的区别▼4 当你学校装了能上网的平板后&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 看图写字&#xff08;素材来源网络&#xff0…

CSharp 如何OCR离线识别文本

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&#xff08;需备注WPF开发者&#xff09;本项目是基于开源项目P…

第一个h5页面

不废话&#xff0c;先爆照&#xff0c;不好勿喷 我用的软件是WebStorm开发&#xff0c;然后也知道了h5我们可以用谷歌浏览器点击右键&#xff0c;然后点击审查&#xff0c;就可以按照手机屏幕来看到页面 下面是项目的图片 这个是我的index.html文件 <!doctype html> <…

Ubuntu系统备份和恢复

为什么80%的码农都做不了架构师&#xff1f;>>> 安装好Ubuntu之后&#xff0c;别忘了安装 for linux 防火墙和杀毒软件。在备份系统前&#xff0c;请保证系统是无错和干净的&#xff1a;本人操作系统是ubuntu14.04&#xff0c;不知道是系统出了问题还是装的软件有问…

热血致敬!曾影响几代科学巨匠的传奇经典,至今仍无人能超越!

▲ 点击查看有人说&#xff0c;世界上有两本神书&#xff0c;一本是霍金的《时间简史》&#xff0c;是可以不看&#xff0c;但书架必须得有。还有一本&#xff0c;就是必须有也必须看的书&#xff0c;这就是《从一到无穷大》。2018年&#xff0c;清华大学校长&#xff0c;将这本…

.NET 6 中 gRPC 的新功能

gRPC是一个现代的、跨平台的、高性能的 RPC 框架。gRPC for .NET 构建在 ASP.NET Core 之上&#xff0c;是我们推荐的在 .NET 中构建 RPC 服务的方法。.NET 6 进一步提高了 gRPC 已经非常出色的性能&#xff0c;并添加了一系列新功能&#xff0c;使 gRPC 在现代云原生应用程序中…

这,像极了爱情!

全世界只有3.14 % 的人关注了爆炸吧知识特别的爱给特别的你古希腊数学家普罗克洛斯说过&#xff1a;“数学就是这样一种东西&#xff1a;她提醒你有无形的灵魂&#xff0c;她赋予她所发现的真理以生命&#xff1b;她唤起心神&#xff0c;澄净智慧&#xff1b;她给我们的内心思想…

mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...

参见英文答案 > Why shouldn’t I use mysql_* functions in PHP? 15个我已经在这一个超过一个小时了,我可以连接到我的数据库和所有(不会给出任何错误)但是当我尝试使用时我收到以下错误“的mysql_query($查询);”Call to undefined f…

ZABBIX2.4.8监控 Windows Mysql数据库

2019独角兽企业重金招聘Python工程师标准>>> 系统环境&#xff1a; 操作系统&#xff1a;Windows Server 2012 ZABBIX Server&#xff1a;2.4.8 IP地址&#xff1a;192.168.0.77 模板脚本地址&#xff1a;http://pan.baidu.com/s/1eSDaiS6 ZABBIX客户端操作 1、在za…

美国知名华人学者陈刚被捕,他出身贫寒,是一个不折不扣的工作狂

全世界只有3.14 % 的人关注了爆炸吧知识陈刚教授&#xff08;图片来源&#xff1a;MIT网站&#xff09;本文转自赛先生当地时间1月14日&#xff0c;美国司法部官网消息显示&#xff0c;美国工程院院士、麻省理工学院&#xff08;MIT&#xff09;教授陈刚因未能向美国能源部披露…