PHP 模拟$_PUT实现代码


Posted in PHP onMarch 15, 2010

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.ini里的always_populate_raw_post_data设置。

PHP 相关文章推荐
dedecms模板标签代码官方参考
Mar 17 PHP
PHP 5.0对象模型深度探索之类的静态成员
Mar 27 PHP
PHP程序61条面向对象分析设计的经验小结
Nov 12 PHP
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
PHP反射API示例分享
Oct 08 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP 断点续传实例详解
Nov 11 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 #PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 #PHP
php 无法载入mysql扩展
Mar 12 #PHP
PHP生成Flash动画的实现代码
Mar 12 #PHP
PHP 引用是个坏习惯
Mar 12 #PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 #PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 #PHP
You might like
PHP中的CMS的涵义
2007/03/11 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
迟到检讨书900字
2014/01/14 职场文书
签约仪式策划方案
2014/06/02 职场文书
表扬信范文
2015/05/04 职场文书
大学运动会通讯稿
2015/07/18 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL