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下使用以下代码连接并测试
Apr 09 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
windows下apache搭建php开发环境
Aug 27 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
PHP内存溢出优化代码详解
Feb 26 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数据库开发知多少
2006/10/09 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
亲子拓展活动方案
2014/02/20 职场文书
春节超市活动方案
2014/08/14 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
委托公证书格式
2015/01/26 职场文书
置业顾问岗位职责
2015/02/09 职场文书
停水通知
2015/04/16 职场文书
家庭经济困难证明
2015/06/23 职场文书
食堂卫生管理制度
2015/08/04 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL