ijurij / fileupload
PHP 文件上传类。
This package is auto-updated.
Last update: 2024-10-02 15:01:12 UTC
README
需要 PHP >= 8.1.0
使用示例请查看此包根目录下的 "index.php" 文件。
安装
composer require ijurij/fileupload
或者将以下文本放入 "composer.json" 中
来自 packagist.org
"require": {
"ijurij/fileupload": "1.0.*"
}
或来自 github.com
"repositories": [
{
"type": "git",
"url": "https://github.com/i-jurij/fileupload"
}
],
"require": {
"i-jurij/fileupload": "dev-main"
}
使用方法
1. 初始化
use Fileupload\Upload;
$new_load = new Upload();
2. 设置上传变量
HTML 表单信息
HTML 输入必须使用以下格式
a) 单个文件
<input type="file" name="file" >
b) 文件数组
<input type="file" name="pictures[]" >
配置
$new_load->config = [
'picture' => [],
'file' => [
'dest_dir' => 'test/upload_text', // where upload file will be saved
'create_dir' => true, //create destination dir
'dir_permissions' => 0777, // permissions for dest dir
'file_size' => 3 * 100 * 1024, //300KB - size for upload files = MAX_FILE_SIZE from html
'file_permissions' => 0666, // permissions for the file being created
'file_mimetype' => ['text/php', 'text/x-php', 'text/html'], // allowed mime-types for upload file
'file_ext' => ['.php', 'html'], // allowed extension for upload file
'new_file_name' => '', // new name of upload file
'replace_old_file' => false // replace old file in dest dir with new upload file with same name
],
'pictures' => [
'dest_dir' => 'upload_pictures/',
'file_size' => 1 * 1000 * 1024, //1MB
'file_mimetype' => ['image/jpeg', 'image/pjpeg', 'image/png', 'image/webp'],
'file_ext' => ['.jpg', '.jpeg', '.png', '.webp'],
'new_file_name' => ['zzz', 'index'], // ['', 'noindex'], 'new_filename' (!!! Don't do that: ['name', 'noindex'] - because you set the same name for all pictures!)
'replace_old_file' => true
]
];
3. 执行
$new_load->upload();
4. 打印信息
/* print '<pre>'; print_r($new_load->info); print '</pre>'; */
$new_load->printInfo();
5. 如果需要,清理文件夹并打印结果消息
print Fileupload\Classes\DelFilesInDir::run('folder_for_cleaning');
示例
<?php
use Fileupload\Upload;
$new_load = new Upload();
$new_load->config = ['pictures' => [
'dest_dir' => 'upload_pictures/',
'file_size' => 1 * 1000 * 1024, //1MB
'file_mimetype' => ['image/jpeg', 'image/pjpeg', 'image/png', 'image/webp'],
'file_ext' => ['.jpg', '.jpeg', '.png', '.webp'],
'new_file_name' => ['zzz', 'index'], // ['', 'noindex'], 'new_filename' (!!! Don't do that: ['name', 'noindex'] - because you set the same name for all pictures!)
'replace_old_file' => true
]
];
if ($new_load->issetData()) {
$new_load->upload();
$new_load->printInfo();
/// other files processing here ///
// some code
////////////
print Fileupload\Classes\DelFilesInDir::run('folder_for_cleaning');
} else {
// print html form here
}
用户可以定义的变量
public string $dest_dir
- 文件目标目录(例如 'imgs/res');
public int $dir_permissions
- 目标目录在 Linux 系统中的权限(例如 0755);
public int $file_permissions
- 目标目录中文件的权限(例如 0644);
public bool $create_dir
- 如果不存在则创建目标目录(true 或 false);
public int $file_size
- 上传文件的最大大小(字节)(例如 3101024 - 30KB);
public $file_mimetype
- 上传文件的 MIME 类型(例如 'image', 'text' 或 'image/webp');
public $file_ext
- 上传文件的扩展名(例如 'bmp', 'txt', 'avi');
public $new_file_name
- 对于单个文件上传:字符串 'new_filename' 或数组 ['name', 'noindex'],
对于多个上传:数组 a) [$filename, 'index'] 或 b) ['', 'noindex']。但在 b) 的情况下,必须为文件获取不同的名称,不要为多个上传使用 ['name', 'noindex'],因为您为所有图片设置了相同的名称!;
public bool $replace_old_file
- 如果文件存在,则替换它;
如果变量未设置,则使用 Config 类中的默认值。如果变量未设置,则使用 Config 类的默认值。
$vars = [
'file' => [ 'dest_dir' => 'upload_files',
'create_dir' => true,
'tmp_dir' => 'tmp_file',
],
'picture' => [] //default value are used
];
默认变量值
public function defaultVars() {
$this->dest_dir = 'upload_files';
$this->tmp_dir = 'tmp_fileupload';
$this->create_dir = true;
$this->dir_permissions = 0755;
$this->replace_old_file = true;
$this->file_permissions = 0644;
$this->file_size = 1024000;
$this->file_mimetype = ''; //any
$this->file_ext = ''; //any
$this->new_file_name = ''; //any
$this->message = [];
$this->error = '';
}
结果消息
移动文件的名称记录在类对象 Messages $this->messages
中
移动文件的名称记录在 $this->messages
中
[$name of input => [
'filenames' => [
0 => $filename0, 1 => $filename1, ...
], ...
]]
错误消息记录在类对象 Errors $this->errors
中
错误消息记录在 $this->errors
中
[ $name of input => ['errors' => $error_in_config],
$name of input => [
'errors' => [0 => $error_for_filename0, 1 => $error_for_filename1, ...]
]
]
$this->messages
和 $this->errors
中的数据记录在 array $this->info
中
从 $this->messages
和 $this->errors
中获取的数据记录在 array $this->info
中
[$name of input => [
'filenames' => [
0 => $filename0, 1 => $filename1, ...
],
'errors' => [
0 => $error_for_filename0, 1 => $error_for_filename1, ...
]
]]
在 HTML 代码中打印所有消息和错误: $this->printInfo()
在 HTML 中打印所有消息和错误: $this->printInfo()