使用PHP OR语句验证上传文件的扩展名时出现问题。以下代码应检查文件扩展名并定义错误,如果它不等于PNG,JPG,JPEG或GIF。
这是我的代码:
$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if($file_extension !== "png" || "jpg" || "jpeg" || "gif") {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
然而,只有在我定义一个文件扩展名时它才会起作用,例如:
if($file_extension !== "png") {
$error = 'Thumbnail file must be a PNG';
}
这将接受PNG文件并拒绝任何其他文件。
如何使此代码按预期工作,我需要做些什么?
答案 0 :(得分:7)
您无法根据需要使用OR运算符。你可以这样做:
$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if(!in_array($file_extension, array("png", "jpg", "jpeg", "gif"))) {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
有关in_array()
的详情,请参阅手册:http://php.net/manual/en/function.in-array.php
答案 1 :(得分:3)
解决方案1:
if(!($file_extension == "png" || $file_extension == "jpg" || $file_extension == "jpeg" || $file_extension == "gif")) {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
解决方案2:
if($file_extension !== "png" && $file_extension !== "jpg" && $file_extension !== "jpeg" && $file_extension !== "gif")) {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
解决方案3:
$ext = array('png', 'jpg', 'jpeg', 'gif');
if(!in_array($file_extension, $ext)) {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
解决方案之一是基于对替代品的否定。这与解决方案二(这是否定的总和)相同。这两种解决方案在逻辑意义上是相同的,但是......
解决方案3 当然更好。这是因为,将来每次都需要检查扩展名,您可以使用扩展数组。并且每次写作,如果使用相同的"常数"错了,未来的改进很难。
在这种情况下,尝试在脚本开头,配置类或CONSTANTS(留给你)中声明可能的扩展数组,并且每次需要检查文件扩展名时,只需检查in_array。并且在将来,如果您需要额外的扩展,或者决定例如gif不再有用,只需更改这个数组即可。每隔一行代码应该保持不变。
答案 2 :(得分:0)
我有2个解决方案
第一个解决方案:
<?php
$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if($file_extension !== "png" ||
$file_extension !== "jpg" ||
$file_extension !== "jpeg" ||
$file_extension !== "gif") {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
?>
第二个解决方案:
<?php
$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if(!in_array($file_extension, array('png','jpg','jpeg','gif'))) {
$error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}
?>