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利用header函数实现文件下载时直接提示保存
Nov 12 PHP
php SQL Injection with MySQL
Feb 27 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php导入模块文件分享
Mar 17 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
yii2多图上传组件的使用教程
May 10 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
JavaScript的目的分析
2007/01/05 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
js闭包的用途详解
2014/11/09 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
Vue列表页渲染优化详解
2017/07/24 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
解决python运行效率不高的问题
2020/07/20 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
会话Bean的种类
2013/11/07 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
js实现弹框效果
2021/03/24 Javascript
网络教育毕业生自我鉴定
2013/10/10 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
财务人员岗位职责
2015/02/03 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
「月刊Action」2022年5月号封面公开
2022/03/21 日漫