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 会话(session 时间设定)使用入门代码
Jun 05 PHP
PHP变量内存分配问题记录整理
Nov 27 PHP
php生成excel列序号代码实例
Dec 24 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
php密码生成类实例
Sep 24 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
smarty简单入门实例
Nov 28 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
Laravel学习教程之路由模块
Aug 18 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP实现的数据对象映射模式详解
Mar 20 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导出word格式数据的代码实例
2013/11/25 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
php文件包含的几种方式总结
2019/09/19 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JavaScript中的事件处理
2008/01/16 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Django基础之Model操作步骤(介绍)
2017/05/27 Python
python实现感知器
2017/12/19 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
django框架中间件原理与用法详解
2019/12/10 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
实习评语
2013/12/16 职场文书
自主招生教师推荐信
2014/05/10 职场文书
会议欢迎词范文
2015/01/27 职场文书
python中使用redis用法详解
2022/12/24 Redis