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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
PHP_MySQL教程-第一天
Mar 18 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 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
Drupal简体中文语言包安装教程
2014/09/27 PHP
php购物车实现方法
2015/01/03 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
对Python 数组的切片操作详解
2018/07/02 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python实现的发邮件功能示例
2019/09/11 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
高级电工工作职责
2013/11/21 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
支部书记四风对照材料
2014/08/28 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
美容院管理规章制度
2015/08/05 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
Redis Stream类型的使用详解
2021/11/11 Redis