为什么在使用 JInputFiles 检索文件数据时有时会得到一个空数组?

why when retrieving file data using JInputFiles sometimes get an empty array?

我正在开发一个包含上传文件的任务,在这种情况下,我发现在某些情况下,对 $files = $application->input-> files->get('files', [], 'ARRAY'); returns 的调用是一个空数组,而 $_FILES 超全局包含文件信息。

我用JSON格式显示变量的内容

$_FILES

{
    "files": {
        "name": ["test.zip"],
        "type": ["application/zip"],
        "tmp_name": ["/tmp/phpwiA9ch"],
        "error": [0],
        "size": [2993308]
    }
}

$文件

[]

我无法确定原因,我最初在尝试上传 32MB 的 pdf 文件时发现它,我认为这是文件大小的问题,但后来我发现它发生在 3MB 的 zip 文件上,我在这里提到我已经成功上传了其他 zip 文件

我分享媒体设置

法定扩展名(文件类型):zip、bmp、csv、doc、gif、ico、jpg、jpeg、odg、odp、ods、odt、pdf、png、ppt、txt、xcf、xls、ZIP、 BMP、CSV、DOC、GIF、ICO、JPG、JPEG、ODG、ODP、ODS、ODT、PDF、PNG、PPT、TXT、XCF、XLS

最大大小(以 MB 为单位):100MB

合法 MIME 类型:image/jpeg、image/gif、image/png、image/bmp、application/msword、application/excel、application/pdf、application/powerpoint、text/plain、application / x-zip

如果 $files 的内容为空,我认为的解决方案是调用 $_FILES。但我很想知道这个错误的原因

这是我正在尝试的代码

public function uploadAttachments()
{
    $application = JFactory::getApplication();

    $files = $application->input->files->get('files', [], 'ARRAY'); // Here some times is empty

    $helper = new Helper();

    $response = $helper->uploadAttachments($files);

    header('content-type: application/json; charset=utf-8');
    echo json_encode($response);
    $application->close();
}

调用$application->input->files-> get('files', [], 'ARRAY');时得到的是一个空数组是因为在JInputFilesclass的get方法中会校验文件是否为安全,验证是在静态方法 isSafeFile 中完成的,在尝试一系列验证后,如果某些条件未通过,则 false 将 return,因此方法 get 将 return 我的默认值是一个空数组。

对于我正在测试的文件,它是因为它标识了扩展名 pl,它被标记为:'These are suspicious text files which may have an executable'

JInputFile class