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中截取字符串支持utf-8
Jan 18 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
PHP stream_context_create()函数的使用示例
May 12 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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
BBS(php &amp; mysql)完整版(八)
2006/10/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP强制转化的形式整理
2020/05/22 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
vue的三种图片引入方式代码实例
2019/11/19 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
中国文明网签名寄语
2014/01/18 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
四年级学生期末评语
2014/12/26 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
辞职信范文大全
2015/03/02 职场文书
心灵捕手观后感
2015/06/02 职场文书
高一英语教学反思
2016/03/03 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python