PHP中模拟处理HTTP PUT请求的例子


Posted in PHP onJuly 22, 2014

关于HTTP PUT详细介绍请参阅此文:https://3water.com/article/52515.htm。

PHP里有$_GET,$_POST,但是没有$_PUT,所以如果需要使用它的话,则你不得不自己模拟一下:

 $_PUT = array();

if ('PUT' == $_SERVER['REQUEST_METHOD']) {

     parse_str(file_get_contents('php://input'), $_PUT);

 }

通过php://input得到的数据是raw data,所以需要用parse_str解析一下。

不过需要说明的是,当表单是enctype="multipart/form-data"类型的时候(就是上传文件那种类型),这种方法是无效的(此时 php://input为空),一旦PHP发现请求的Content-Type是multipart/form-data,就会无条件的代你处理表单数据,然后保存到$_FILES里,此时无法得到raw data,只能用一些偏门方法

以apache为例,修改httpd.conf(为了使用RequestHeader语法,请先激活header模块):

<Location "/demo.php">

     RequestHeader set Content-Type foobar

</Location>

通过重置Content-Type请求头为foobar(只要不是multipart/form-data即可),此时php://input就有数据了,不过原本应有的$_FILES数据却不存在了,所以基本上只有演示上的意义,如果想得到raw data,只能自己根据数据生成,在PEAR里有类似的实现:HTTP_Request2_MultipartBody。

浏览器一般只允许使用GET/POST方法,虽然可以通过JS来发送PUT方法,但是还得编写代码,相对而言,使用命令行下的CURL命令则显得方便很多,在开发测试时很有用,所以学习一下还是必要的:

curl -X PUT http://www.domain.com/demo.php -d "id=1" -d "title=a"

这样就会通过PUT方法发送id, title数据,测试时demo.php的代码就类似上面的php://input。
PHP 相关文章推荐
PHP Stream_*系列函数
Aug 01 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
php目录拷贝实现方法
Jul 10 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
php获取微信openid方法总结
Oct 10 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 #PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 #PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 #PHP
async和DOM Script文件加载比较
Jul 20 #PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 #PHP
php多任务程序实例解析
Jul 19 #PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
You might like
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
如何使用python爬取csdn博客访问量
2016/02/14 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
建筑毕业生自我鉴定
2013/10/18 职场文书
品管员岗位职责
2013/11/10 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
贷款委托书范本
2014/04/08 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android