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 相关文章推荐
PHP4与PHP5的时间格式问题
Feb 17 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
Laravel模糊查询区分大小写的实例
Sep 29 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
jQuery 位置插件
2008/12/25 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
js 居中漂浮广告
2010/03/21 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python操作json的方法实例分析
2018/12/06 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
电子商务自荐书范文
2014/01/04 职场文书
大学生学习自我评价
2014/01/13 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
党员教师工作决心书
2014/03/13 职场文书
铁路安全反思材料
2014/12/24 职场文书
小鞋子观后感
2015/06/05 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
小学美术教学反思
2016/02/17 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB