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对二维数组进行排序的简单实例
Dec 19 PHP
php 邮件发送问题解决
Mar 22 PHP
一个简洁实用的PHP缓存类完整实例
Jul 26 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
PHP读取大文件的几种方法介绍
Oct 27 PHP
PHP串行化与反串行化实例分析
Dec 27 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PDO::errorCode讲解
Jan 28 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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取进制余数函数代码
2012/01/19 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
php常用hash加密函数
2014/11/22 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python字典对象实现原理详解
2019/07/01 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python三引号如何输入
2020/07/06 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS