我遇到了一个奇怪的问题。我正在使用File::extension($file)
,实际上得到的答案是'pdf'。我var_dump()
File::extension($file)
,如果字符串中包含3个字符'pdf',则显示值。
然后我尝试在if语句中对它进行比较,但它会进入if语句,它不应该。这是一种奇怪的行为。
$fileType = File::extension($request->frequencyPlan->getClientOriginalName());
if ($fileType != 'pdf' || $fileType != 'doc') {
return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
};
我错过了什么吗?
P.S:对于那些想知道的人,我无法使用mimeType验证器,因为我收到了另一个错误
'无法猜测mime类型,因为没有可用的猜测器(你启用了php_fileinfo扩展吗?)'
我认为上面的if语句应该可行。
答案 0 :(得分:3)
试试这个:
$fileType = $request->frequencyPlan->extension();
if ($fileType !== 'pdf' && $fileType !== 'doc') {
return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
};
以及其他问题:
'无法猜测mime类型,因为没有可用的猜测器(你启用了php_fileinfo扩展吗?)'
托管服务器:
本地托管:
答案 1 :(得分:1)
您的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
分支。
我假设你想进入if
分支,如果扩展名不是" pdf" 和不是" doc"。
您的代码应为:
if ($fileType != 'pdf' && $fileType != 'doc') {
return $this->showEstablishmentsEdit('fileTypeErrorForPDF');
};