当PHP上传失败时,$_FILES的不同值是什么?


What can be the different values of $_FILES when a PHP upload fails?

这是上传成功时典型的$_FILES数组:

array (
  'field_name' => array (
    'name' => 'photo.jpg',
    'type' => 'image/jpeg',
    'tmp_name' => '/tmp/xxx',
    'error' => 0,
    'size' => 12345
  )
)

现在文档没有提到的是,当$_FILES填充时,这些数组键究竟包含什么,但是 error键不是0 (UPLOAD_ERR_OK)

  • 其他4个键(name, type, tmp_name, size) 总是存在吗?
  • 如果是,如果出现错误,这些键的内容是什么?
    • size是否包含0、空字符串或NULL ?
    • tmp_name包含空字符串,还是NULL ?
    • name总是可用的,或者它可以是一个空字符串或NULL ?
    • type总是可用的,或者它可以是一个空字符串或NULL ?

根据最简单的错误情况判断,UPLOAD_ERR_NO_FILE(没有选择文件):

array (
  'field_name' => array (
    'name' => '',
    'type' => '',
    'tmp_name' => '',
    'error' => 4,
    'size' => 0
  )
)

我将推断以下假设:

  • 所有5个数组键始终存在;
  • name, typetmp_name总是string s,错误时可以为空;
  • size将始终是一个整数,错误时可能是0
如果有人有反例,我很乐意看到它!