PHP中模拟处理HTTP PUT请求的例子


Posted in PHP onJuly 22, 2014

关于HTTP PUT详细介绍请参阅此文:https://3water.com/article/52515.htm。

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 相关文章推荐
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 #PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 #PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 #PHP
async和DOM Script文件加载比较
Jul 20 #PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 #PHP
php多任务程序实例解析
Jul 19 #PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
You might like
php mysql数据库操作类
2008/06/04 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP合并静态文件详解
2014/11/14 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
vue-cli随机生成port源码的方法
2019/09/02 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
python使用mysql数据库示例代码
2017/05/21 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
python获取txt文件词向量过程详解
2019/07/05 Python
python numpy数组中的复制知识解析
2020/02/03 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
C# Debug和Testing相关面试题
2015/10/25 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
质量月活动总结
2014/08/26 职场文书
学校运动会报道稿
2014/09/23 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
发布会邀请函
2015/01/31 职场文书