ijurij/fileupload

PHP 文件上传类。

dev-main 2024-05-02 14:06 UTC

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()