rainner / restful-php
解析所有RESTful动词(POST、PUT、DELETE、PATCH等)的原始输入体,并提供更好的处理上传文件的方式。
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2024-09-18 18:28:33 UTC
README
这是一个用于在PHP中处理HTTP输入数据的包。当一个POST请求进入PHP时,请求的内容类型(Content-Type)和内容主体(原始输入)会被处理和解析到_POST和_FILES数组中。此包将解析所有RESTful动词(POST、PUT、DELETE、PATCH等)的原始输入体到_REQUEST和_FILES数组中,并提供更好的处理上传文件的方式。
HTTP输入解析器使用方法
解析器类将执行PHP已经为GET/POST数据执行的相同操作,但对于所有其他REQUEST_METHOD动词,并将数据放入$_REQUEST和$_FILES超级全局变量中(不包括$_COOKIE)。
此类将查看请求的Content-Type来决定如何解析请求的原始内容主体。只要请求格式正确,应该不会出现问题。目前它可以解析以下内容类型
text/plain
作为INI数据。text/html
作为HTML格式数据。application/json
作为JSON编码数据。application/x-www-form-urlencoded
作为URL编码数据。application/xml
作为XML格式数据。multipart/form-data
作为多部分表单数据。
支持多维数组类型的属性名(multi[level][name]
),并由此类解析为常规数组。
// parse incoming request data $request = new Restful\Parser(); $request->parse(); // preview echo '<pre>'.print_r( $_REQUEST, true ).'</pre>' . "\n"; echo '<pre>'.print_r( $_FILES, true ).'</pre>' . "\n"; exit;
Restful\Parser公共方法
HTTP文件管理器
Files类将接受$_FILES数组并重新格式化结构,使其更易于处理多个文件上传和嵌套的多维数组键,例如
<form> <input type="file" name="files[avatar]" accept="image/*" /> <input type="file" name="files[photos][]" accept="image/*" multiple /> </form>
上面的表单将有两个文件对话框按钮,一个接受单个文件,另一个接受多个文件。以下是使用Files类访问这些文件的方法
// import and format files from the $_FILES array $files = new Restful\Files(); $files->parse(); // work on the avatar image $files->loopFiles( 'files.avatar', function( $file ) { // save to db, process, etc... echo $file['tmp_name'] ." <br /> \n"; }); // move photos to a folder $photos = $files->moveFiles( 'files.photos', '/path/to/uploads' ); foreach( $photos as $photo ) { // check each file for upload/move errors echo !empty( $photo['error'] ) ? $photo['error'] : 'Success'; echo "<br /> \n"; }
Restful\Files公共方法
安装与设置
手动:在项目的某个位置克隆此仓库,并使用包含的自动加载器来加载包含的类
$ cd /path/to/project/libs $ git clone https://github.com/rainner/restful-php.git
<?php require( './libs/restful-php/autoloader.php' )
Composer:运行以下composer命令来包含此包并安装项目依赖项
$ composer require rainner/restful-php 1.*
作者
Rainner Lins: @raintek_
许可协议
在MIT许可下。