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的五种设计模式
Sep 05 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
一个非常实用的php文件上传类
Jul 04 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 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
人族 TERRAN 概述
2020/03/14 星际争霸
xml+php动态载入与分页
2006/10/09 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
JS跨域问题详解
2014/11/25 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
学术会议欢迎词
2014/01/09 职场文书
家长对老师的感言
2014/03/11 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Python内置数据类型中的集合详解
2022/03/18 Python