【问题标题】:File::extension() doesn't work with if in LaravelFile::extension() 不适用于 Laravel 中的 if
【发布时间】:2026-01-09 03:25:05
【问题描述】:

我遇到了一个奇怪的问题。我正在使用File::extension($file),实际上得到的答案是“pdf”。我var_dump()File::extension($file),如果字符串肯定是'pdf',它会显示3个字符的值。

然后我尝试在 if 语句中比较它,但它进入了不应该的 if 语句。这是一种很奇怪的行为。

$fileType = File::extension($request->frequencyPlan->getClientOriginalName());

if ($fileType != 'pdf' || $fileType != 'doc') {
    return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
};

我错过了什么吗?


P.S:对于那些想知道的人,我不能使用 mimeType 验证器,因为我得到另一个错误

'无法猜测 mime 类型,因为没有可用的猜测器(您是否启用了 php_fileinfo 扩展?)'

我认为上面的 if 语句无论如何都应该起作用。

【问题讨论】:

  • 给你一个完整的答案,frequencyPlan是文件输入名吗?

标签: php laravel file file-extension


【解决方案1】:

试试这个:

$fileType = $request->frequencyPlan->extension();

if ($fileType !== 'pdf' && $fileType !== 'doc') {
  return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
};

对于您的其他问题:

'无法猜测 mime 类型,因为没有可用的猜测器(您是否启用了 php_fileinfo 扩展?)'

托管服务器:

  • 联系托管服务提供商并告诉他启用此扩展程序php_fileinfo

本地主机:

  • 您的操作系统是什么?

【讨论】:

    【解决方案2】:

    您的if 语句存在逻辑错误。

    $fileType 等于pdf 时,您的if 条件仍将评估为true$fileType != 'pdf' 将是 false,但后半部分 $fileType != 'doc'true,并且由于您将这些条件“或”在一起,结果是 true

    $fileType = 'pdf'.
    那么$fileType != 'pdf' 就是false
    那么$fileType != 'doc' 就是true

    因此,($fileType != 'pdf' || $fileType != 'doc') === (false || true) === (true),进入if 分支。

    如果扩展名不是“pdf”并且不是“doc”,我假设你想进入if 分支。

    你的代码应该是:

    if ($fileType != 'pdf' && $fileType != 'doc') {
        return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
    };
    

    【讨论】:

      最近更新 更多