【问题标题】:why when retrieving file data using JInputFiles sometimes get an empty array?为什么使用 JInputFiles 检索文件数据时有时会得到一个空数组?
【发布时间】:2019-12-30 16:31:37
【问题描述】:

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

我以 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();
}

【问题讨论】:

    标签: php joomla


    【解决方案1】:

    调用$application->input->files-> get('files', [], 'ARRAY');时得到一个空数组的原因是因为在JInputFiles类的get方法中验证文件是否安全,验证是在静态方法@987654326中完成的@,在尝试了一系列验证后,如果某些条件不通过,则返回 false,在 consecuense 方法get 将在我的情况下返回默认值一个空数组。

    就我测试的文件而言,这是因为它标识了扩展名pl,它被标记为:“这些是可能具有可执行文件的可疑文本文件”

    JInputFile

    【讨论】:

    • 如果此问题的解决令您满意,请接受您的回答。这是很棒的发现分享。您也可以在Joomla Stack Exchange 上发布此问题和答案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2015-03-30
    相关资源
    最近更新 更多