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的控制语句
Oct 09 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
php Undefined index的问题
Jun 01 PHP
php中设置多级目录session的问题
Aug 08 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP addcslashes()函数讲解
Feb 03 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
JavaScript实战之菜单特效
2016/08/16 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
vue生命周期的探索
2019/04/03 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
python使用生成器实现可迭代对象
2018/03/20 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
Flask之请求钩子的实现
2018/12/23 Python
python3安装speech语音模块的方法
2018/12/24 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
连锁经营管理专业大学生求职信
2013/10/30 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
社团活动总结格式
2014/08/29 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
个人工作表现自我评价
2015/03/06 职场文书
中职班主任培训心得体会
2016/01/07 职场文书