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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
一个域名查询的程序
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
PHP中new static()与new self()的区别异同分析
Aug 22 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
PHP7创建销毁session的实例方法
Feb 03 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与已存在的Java应用程序集成
2006/10/09 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php-fpm配置详解
2014/02/12 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
python写xml文件的操作实例
2014/10/05 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
遗传算法之Python实现代码
2017/10/10 Python
详解python之协程gevent模块
2018/06/14 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Django如何使用redis作为缓存
2020/05/21 Python
python raise的基本使用
2020/09/10 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python模块内置属性概念及实例
2021/02/18 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
幼儿园教师节感谢信
2015/01/23 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
golang特有程序结构入门教程
2021/06/02 Python