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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
PHP 面向对象 final类与final方法
May 05 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
php文件上传类完整实例
May 14 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 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获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python实现的简单算术游戏实例
2015/05/26 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
python3.6数独问题的解决
2019/01/21 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
详解Python3中的 input() 函数
2020/03/18 Python
Python json转字典字符方法实例解析
2020/04/13 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
JSF如何进行表格处理及取值
2012/08/06 面试题
法院授权委托书格式
2014/09/28 职场文书
社会实践活动报告
2015/02/05 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书