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 文件上传代码(限制jpg文件)
Jan 05 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
php object转数组示例
Jan 15 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP类的封装与继承详解
Sep 29 PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
php使用gearman进行任务分发操作实例详解
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 Socket 编程模拟Http post和get请求
2014/11/25 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
python判断链表是否有环的实例代码
2020/01/31 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
腾讯公司的一个sql题
2013/01/22 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
社区包粽子活动方案
2014/01/21 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
警察群众路线整改措施
2014/09/26 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015年环保局工作总结
2015/05/22 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL