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 登录记住密码实现思路
May 07 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python文件操作基本流程代码实例
2017/12/11 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
html5 标签
2009/07/16 HTML / CSS
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
雪山饭庄的创业计划书范文
2014/01/18 职场文书
人事助理自荐信
2014/02/02 职场文书
广播体操比赛口号
2014/06/10 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
钳工实训报告总结
2014/11/04 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
医生个人年度总结
2015/02/28 职场文书
学术会议通知范文
2015/04/15 职场文书
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python