PHP 模拟$_PUT实现代码


Posted in PHP onMarch 15, 2010

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.ini里的always_populate_raw_post_data设置。

PHP 相关文章推荐
php中常用编辑器推荐
Jan 02 PHP
php5数字型字符串加解密代码
Apr 24 PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
YII实现分页的方法
Jul 09 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 #PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 #PHP
php 无法载入mysql扩展
Mar 12 #PHP
PHP生成Flash动画的实现代码
Mar 12 #PHP
PHP 引用是个坏习惯
Mar 12 #PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 #PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 #PHP
You might like
php 多文件上传的实现实例
2016/10/23 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python中input和raw_input的一点区别
2014/10/21 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python实现FM算法解析
2019/06/18 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
广告词串烧
2014/03/19 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2014年党建工作总结
2014/11/11 职场文书
现场施工员岗位职责
2015/04/11 职场文书
地雷战观后感
2015/06/09 职场文书
导游词之长城八达岭
2019/09/24 职场文书