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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
用PHP函数解决SQL injection
Oct 09 PHP
一个简单的自动发送邮件系统(一)
Oct 09 PHP
PHP VS ASP
Oct 09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
php curl_init函数用法
Jan 31 PHP
php实现的漂亮分页方法
Apr 17 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python聊天室程序(基础版)
2018/04/01 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python生成词云的实现代码
2020/01/14 Python
python mock测试的示例
2020/10/19 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
银行求职信怎么写
2014/05/26 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
项目转让协议书
2014/10/27 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
单位委托函范文
2015/01/29 职场文书
趣味运动会标语口号
2015/12/26 职场文书