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 相关文章推荐
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php5.3 注意事项说明
Jul 01 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
详解Laravel服务容器的优势
May 29 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 图片上传代码
2011/09/13 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
营销与策划专业毕业生求职信
2013/11/01 职场文书
大学生村官典型材料
2014/01/12 职场文书
初中学生评语大全
2014/04/24 职场文书
企业人事任命书
2014/06/05 职场文书
车辆转让协议书
2014/09/24 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
材料采购员岗位职责
2015/04/03 职场文书