预定义变量$_FILES

$_FILES

// 基础格式
$FILES = [
    'name' => '文件名'
    'type' => '文件类型'
    'tmp_name' => '文件被上传后在服务端储存的临时文件名'
    'error' => '错误类型号'
    'size' => '已上传文件的大小'
]
  1. $_FILES单文件上传
<form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
        <input type="file" name="pic" />
        <input type="submit" value="Send" />
    p>
form>

// 一个文件上传
Array
(
    [pic] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

)
  1. $_FILES多文件上传
<form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
        <input type="file" name="pics[]" />
        <input type="file" name="pic[]" />
        <input type="file" name="pics[]" />
        <input type="submit" value="Send" />
    p>
form>

// 多个文件上传
Array
(
Array
(
    [pics] => Array
        (
            [name] => Array
                (
                    [0] => test.gif
                    [1] => test.mp4
                )
            [type] => Array
                (
                    [0] => image/gif
                    [1] => video/mp4
                )
            [tmp_name] => Array
                (
                    [0] => D:\wamp64\tmp\php8E02.tmp
                    [1] => D:\wamp64\tmp\php8E04.tmp
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )
            [size] => Array
                (
                    [0] => 0
                    [1] => 0
                )
        )
    [pic] => Array
        (
            [name] => Array
                (
                    [0] => test.jpg
                )
            [type] => Array
                (
                    [0] => image/jpeg
                )
            [tmp_name] => Array
                (
                    [0] => D:\wamp64\tmp\php8E03.tmp
                )
            [error] => Array
                (
                    [0] => 0
                )
            [size] => Array
                (
                    [0] => 4544
                )
        )
)
  1. $_FILES[‘file’][‘error’]错误类型

$_FILES[‘file’][‘error’] === 0 代表成功上传

UPLOAD_ERR_OK // 其值为 0,没有错误发生,文件上传成功。 
UPLOAD_ERR_INI_SIZE // 其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
UPLOAD_ERR_FORM_SIZE // 其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
UPLOAD_ERR_PARTIAL // 其值为 3,文件只有部分被上传。 
UPLOAD_ERR_NO_FILE // 其值为 4,没有文件被上传。 
UPLOAD_ERR_NO_TMP_DIR // 其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 
UPLOAD_ERR_CANT_WRITE // 其值为 7,文件写入失败。PHP 5.1.0 引进。 

// 可以将其封装进异常
class FileUploadException extend \Exception
{
	public function __construct($code){
		$messge = self::_codeToMessage($code);
		parent::__construct($message, $code);
	}
	private function _codeToMessage($code){
		switch ($code){
			case UPLOAD_ERR_INI_SIZE:
				$message = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的';
				break;
			case UPLOAD_ERR_FORM_SIZE:
				$message = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
				break;
			case UPLOAD_ERR_PARTIAL:
				$message = '文件只有部分被上传';
				break;
			case UPLOAD_ERR_NO_FILE:
				$message = '没有文件被上传';
				break;
			case UPLOAD_ERR_NO_TMP_DIR:
				$message = '服务器错误,找不到临时文件夹';
				break;
			case UPLOAD_ERR_CANT_WRITE:
				$message = '服务器错误,文件写入失败';
				break;
		}
	}
}

// use 
if (!$_FILES['file']['error'] === UPLOAD_ERR_OK){
	throw new FileUploadException($_FILES['file']['error'])
}
// 为啥不写数值,写常量名
// 以上常量值在是 PHP==4.3.0才引入的,PHP < 4.3.0则没有用 

为什么需要临时文件$FILES[‘file’][‘tmp_name’]作为中转呢?

自我认为 php把其封装为$_FILE,有临时文件,用户就可以用代码控制其去向,毕竟PHP不知道你要把图片保存到哪里的。
你不用$_FILES来传文件的话,也可自己封装,比如base64编码传图
前端把图片按base64编码绑定到参数$_POST[‘file’]

$image_str = $POST['file']
$image = base64_decode($image_str)
$unique_file_name = tempnam('/tmp', '_face') // 文件名前缀固定_face,且唯一
if (file_put_contents($unique_file_name, $image) === false){
	echo '写入临时文件失败';
	return false;
}
// 真正要上传的目录 /uploads
if (move_upload_file($unique_file_name, '/upload') === false){
	echo '移动失败;
	return false;
}
if ($POST['file']){
	if(unlink($unique_file_name) === false){
		echo '大哥,我删除不了临时文件了';
		return false;
	}
}
return true;
// 文件上传错误信息
private $error = '';
// 当前完整文件名 临时文件名
protected $filename;
// 上传文件名
protected $saveName;
// 文件上传命名规则 默认日期
protected $rule = 'date';
// 文件上传验证规则
protected $validate = [];
// 单元测试
protected $isTest;
// 上传文件信息  $_FILES['file']数组
protected $info;
// 文件hash信息
protected $hash = [];
(
    0 => array(
          'error' => '',
          'filename' => '/tmp/phpc5SlBm',
          'saveName' => NULL,
          'rule' => 'date',
          'validate' =>
              array (
              ),
          'isTest' => NULL,
          'info' =>
              array (
                  'key' => 'file',
                  'name' => '批量创建计划模板.xls',
                  'type' => 'application/vnd.ms-excel',
                  'tmp_name' => '/tmp/phpc5SlBm',
                  'error' => 0,
                  'size' => 29696,
              ),
          'hash' =>
              array (
              ),
      ),
      1 => array(
          'error' => '',
          'filename' => '/tmp/phpT9Q87l',
          'saveName' => NULL,
          'rule' => 'date',
          'validate' =>
              array (
              ),
          'isTest' => NULL,
          'info' =>
              array (
                  'key' => 'file',
                  'name' => '批量创建计划模板.xls',
                  'type' => 'application/vnd.ms-excel',
                  'tmp_name' => '/tmp/phpT9Q87l',
                  'error' => 0,
                  'size' => 29696,
              ),
          'hash' =>
              array (
              ),
      )
)

你可能感兴趣的:(Php7.0)