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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php命令行写shell实例详解
Jul 19 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
php原生数据库分页的代码实例
Feb 18 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
PHP中多字节字符串操作实例详解
Aug 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
漂亮但不安全的CTB
2006/10/09 PHP
解决中英文字符串长度问题函数
2007/01/16 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
Python读取网页内容的方法
2015/07/30 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python金融数据可视化汇总
2017/11/17 Python
你真的了解Python的random模块吗?
2017/12/12 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
python实现串口通信的示例代码
2020/02/10 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
汽车促销活动方案
2014/03/31 职场文书
班级心理活动总结
2014/07/04 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL