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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
php flv视频时间获取函数
Jun 29 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 PHP
基于php 随机数的深入理解
Jun 05 PHP
PHP跳转页面的几种实现方法详解
Jun 08 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php车辆违章查询数据示例
Oct 14 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
php支付宝APP支付功能
Jul 29 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
php str_pad 函数使用详解
2009/01/13 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
Linux内核产生并发的原因
2016/11/08 面试题
《长城》教学反思
2014/02/14 职场文书
解放思想演讲稿
2014/09/11 职场文书
中小学生学籍证明
2014/10/25 职场文书
辞职信格式范文
2015/05/13 职场文书
卡特教练观后感
2015/06/08 职场文书
学习经验交流会总结
2015/11/02 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android