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+mysql写的留言本
Oct 09 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
模拟flock实现文件锁定
Feb 14 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
php中长文章分页显示实现代码
Sep 29 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php的单例模式及应用场景详解
Feb 27 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
jquery访问ashx文件示例代码
2014/08/11 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
JavaScript实现区块链
2018/03/14 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
理解python正则表达式
2016/01/15 Python
Python入门教程之运算符与控制流
2016/08/17 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
Python之字典添加元素的几种方法
2020/09/30 Python
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
艺术设计专业毕业生推荐信
2014/07/08 职场文书
七一建党节演讲稿
2014/09/11 职场文书
二人合伙经营协议书
2014/09/13 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS