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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
PHP写的简单数字验证码实例
May 23 PHP
PHP回调函数简单用法示例
May 08 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 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树的代码,可以嵌套任意层
2006/10/09 PHP
PHP的FTP学习(三)
2006/10/09 PHP
php基础知识:类与对象(1)
2006/12/13 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
python实现简单银行管理系统
2019/10/25 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
sklearn+python:线性回归案例
2020/02/24 Python
python的json包位置及用法总结
2020/06/21 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
python实现会员信息管理系统(List)
2022/03/18 Python