is_valid()
is_valid 方法可被用来检查是否有任何已通过上传验证的上传档案存在。
静态 | 是 |
---|---|
参数 | 无 |
回传 | 布林 - true 如果验证的档案存在,false 如果没有。 |
範例 |
|
Upload 类别可以安全地处理被上传到应用程序的档案。 它能让你用不同的方式过滤上传、定义目标档案名称应该像怎样、或过滤档案名称的大小或长度。
每个上传档案的资讯被储存在 Upload 类别中的一个多维阵列。 对于每个档案,每个被定义的阵列有下列栏位:
键 | 类型 | 描述 |
---|---|---|
field | 字串 | 被用来上传档案的表单栏位名称。如果该表单栏位是一个(多维)阵列, 该阵列键将被以冒号分隔来添加到栏位名称。 所以一个称为 "field[a][b][]" 的栏位将被储存为 "field:a:b:0"。 |
name | 字串 | 上传档案的名称。 |
type | 字串 | 上传文件的 MIME 类型,由浏览器所定义。 |
mimetype | 字串 | 上传档案的 MIME 类型,如同 Upload 类别所确定的。 请注意,这需要安装一个最新的 'mime magic' 档案。 此档案出现在每个 *xin 平台,但在 Windows 平台,你可能必须自己安装这个档案。 如果 MIME 类型不能被确定,此栏位包含的值与 'type' 相同。 |
file | 字串 | 上传档案临时位置的完整档案名称。 |
filename | 字串 | 上传档案的档案名称(主档名)。 |
extension | 字串 | 上传档案的副档名。 |
size | 整数 | 上传档案的大小(位元组)。 |
error | 布林 | 如果为 true,上传失败的话,错误阵列包含原因。 |
errors | 阵列 | 一个阵列群的阵列,每个有两个值。'error',包含错误代码,以及 'message',包含错误文字。 |
请注意,MIME 类型将始终包含最具体的类型。所以如果浏览器宣称它是一个 MS-Word 文件, 但 MIME 类型被测定是 "application/octet-stream",浏览器的 MIME 类型会被使用,即使这可能是错的或无法预期的! 例如,一个 Microsoft .xlsx 档案可能被侦测是 "application/zip"。
在你呼叫 save() 方法之后,此阵列结构会被扩充两个额外栏位,给你关于实际储存的资讯。
键 | 类型 | 描述 |
---|---|---|
saved_to | 字串 | 上传档案被储存的完整路径。 |
saved_as | 字串 | 该档案被储存的名称 |
errors | 阵列 | 错误阵列(以及错误布林)将在呼叫 save() 来指示任何在试图储存档案时遇到的错误之后被更新。 |
Upload 类别定义以下的错误常数:
名称 | 描述 |
---|---|
UPLOAD_ERR_OK | 没有错误,档案上传成功。 |
UPLOAD_ERR_INI_SIZE | 上传档案超过了在 php.ini 中指定的 upload_max_filesize。 |
UPLOAD_ERR_FORM_SIZE | 上传档案超过了在 HTML 表单中指定的 MAX_FILE_SIZE。 |
UPLOAD_ERR_PARTIAL | 上传档案只有部分被上传。 |
UPLOAD_ERR_NO_FILE | 没有档案被上传。请注意,当执行上传档案列表时,带有此错误的条目将被过滤。 |
UPLOAD_ERR_NO_TMP_DIR | 缺少临时文件夹。 |
UPLOAD_ERR_CANT_WRITE | 写入档案到硬碟失败。 |
UPLOAD_ERR_EXTENSION | 一个 PHP 扩充停止了档案上传。PHP 没提供方法来查明是哪个扩充造成档案上传停止;审视 phpinfo() 中的已载入扩充列表可能会有帮助。 |
UPLOAD_ERR_MAX_SIZE | 上传档案超过了定义在配置中的最大档案大小。 |
UPLOAD_ERR_EXT_BLACKLISTED | 上传档案的副档名被定义在副档名黑名单中。 |
UPLOAD_ERR_EXT_NOT_WHITELISTED | 上传档案的副档名没有被定义在副档名白名单中。 |
UPLOAD_ERR_TYPE_BLACKLISTED | 上传档案的类型被定义在类型黑名单中。 |
UPLOAD_ERR_TYPE_NOT_WHITELISTED | 上传档案的类型没有被定义在类型白名单中。 |
UPLOAD_ERR_MIME_BLACKLISTED | 上传档案的 MIME 类型被定义在 MIME 类型黑名单中。 |
UPLOAD_ERR_MIME_NOT_WHITELISTED | 上传档案的 MIME 类型没有被定义在 MIME 类型白名单中。 |
UPLOAD_ERR_MAX_FILENAME_LENGTH | 上传的档案名称超过了定义的最大档案名称长度。 |
UPLOAD_ERR_MOVE_FAILED | 上传的档案名称不能从临时储存移动到指定路径。这可能意味着有一个权限问题。 |
UPLOAD_ERR_DUPLICATE_FILE | 上传的档案名称不能被储存因为已存在同名档案。 |
请注意,为了能够上传档案,你的 HTML <form> 标籤必须包含 enctype="multipart/form-data", 而且你的表单必须包含至至少一个 "file" 类型的输入栏位。没有它,所有上传将失败,而且 Upload::process 将抛出一个例外!
// 自订此上传的配置
$config = array(
'path' => DOCROOT.'files',
'randomize' => true,
'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
);
// 处理 $_FILES 中上传的档案
Upload::process($config);
// 如果有任何有效档案
if (Upload::is_valid())
{
// 根据配置储存他们
Upload::save();
// 呼叫一个模型方法来更新资料库
Model_Uploads::add(Upload::get_files());
}
// 并处理任何错误
foreach (Upload::get_errors() as $file)
{
// $file 是一个有所有档案资讯的阵列,
// $file['errors'] 包含一个所有发生错误的阵列
// 每个阵列元素是一个包含 'error' 及 'message' 的阵列
}
is_valid 方法可被用来检查是否有任何已通过上传验证的上传档案存在。
静态 | 是 |
---|---|
参数 | 无 |
回传 | 布林 - true 如果验证的档案存在,false 如果没有。 |
範例 |
|
get_files 方法回传一个所有上传档案中 error 值为 false 的多维阵列。
静态 | 是 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 阵列 | ||||||
範例 |
|
get_errors 方法回传一个所有上传档案中 error 状态为 true 的多维阵列。
静态 | 是 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 阵列 | ||||||
範例 |
|
请注意,在你表单中的所有上传栏位会被发送,即使它们是选择性的。栏位留空, 上传的档案阵列将有一个空的档案条目,会有一个 Upload::UPLOAD_ERR_NO_FILE 的错误代码。 处理错误时,首先检查错误代码,然后再试着使用任何回传阵列中的其他栏位。
register 方法能让你为特定的上传事件注册回呼(callback), 并能让你添加你自己的程式码到 process() 和 save() 方法。
静态 | 是 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
参数 |
| |||||||||
回传 | 布林 - true 如果回呼(callback)被注册,false 如果注册失败。 | |||||||||
範例 |
|
如果你想要使用一个 'validate' 回呼(callback),确保在你呼叫 Upload::process() 之前注册它。 如果你已经使用 'auto_process' 配置设定,只要你使用 Upload 类别,Upload::process() 将会被呼叫, 这意味着你不能使用此设定,如果你想在执行阶段定义回呼(callback)。
该回呼(callback)将接受一个 FuelPHP\Upload\File 物件做为参数。该条目透过引用传递, 它允许回呼(callback)函式修改阵列中的条目。你可以因为向下相容的原因存取它做为一个阵列, 但如果迁移你的应用程序从版本 < 1.6 到 1.6+,检查传递到你回呼(callback)的值, 因为不是所有属性在 1.6 前都是相同命名。
如果该回呼(callback)函式回传一个整数,它会被假设为一个上传档案错误代码的更新。 所有其他回传值会被忽略。
注意:如果你改变在你的回呼(callback)中的 $file 阵列内容,你必须确保该资讯仍然有效, 因为 Upload 不会再一次执行它的检查。此规则的唯一例外是 'file' 路径, 如果需要它会在回呼(callback)被执行之后被检查并建立。
process 方法处理关于所有上传档案的资讯, 正规化可被使用表单栏位名称的不同排列组合, 取回额外关于档案及其 MIME 类型的资讯, 并验证档案。
静态 | 是 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 空 | ||||||
抛出 | FuelException,当没有档案试图上传可被侦测到(即没有 "Enctype" 或 type="file" 输入栏位的表单) | ||||||
範例 |
|
如果你打算使用此方法,在配置中停用 auto_process,以避免处理上传的档案两次!
save 方法储存所有已验证的上传档案到指定的路径。
静态 | 是 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
请注意,这些参数所给的顺序是不相关的,而他们全都是选择性的。但使用 $integer 或 $array,不要两个都使用。如果你这样做,最后一个指定的会被使用。 | ||||||||||||
回传 | 空 | ||||||||||||
範例 |
|