【发布时间】:2015-11-20 03:00:29
【问题描述】:
我一直在尝试保护 3 个文件输入,但没有成功。 我需要这些文件输入只取 jpeg、jpg、png、 和 gif。我知道mime 类型不可靠,因此我不想再使用它。如果在 PHP 程序方式 中比 IF 语句 有更清洁或更快的方法,那就更好了。
HTML 代码
<input type="file" name="index_desl_Cfile1" class="upload-image" />
<input type="file" name="index_desl_Cfile2" class="upload-image" />
<input type="file" name="index_desl_Cfile3" class="upload-image" />
PHP 代码
$target_dir = "../site_images/";
$index_deslC1 = $target_dir . basename($_FILES["index_desl_Cfile1"]["name"]);
$index_deslC2 = $target_dir . basename($_FILES["index_desl_Cfile2"]["name"]);
$index_deslC3 = $target_dir . basename($_FILES["index_desl_Cfile3"]["name"]);
// Check if file already exists
$src1 = 'http://localhost//397/admin/site_images/'.$index_deslC1;
$src2 = 'http://localhost/397/admin/site_images/'.$index_deslC2;
$src3 = 'http://localhost/397/admin/site_images/'.$index_deslC3;
if (@getimagesize($src1)) {
echo "Sorry, file already exists 1. ";
$uploadOk = 0;
}
else if (@getimagesize($src2)) {
echo "Sorry, file already exists 2. ";
$uploadOk = 0;
}
else if (@getimagesize($src3)) {
echo "Sorry, file already exists 3. ";
$uploadOk = 0;
}
$imageFileTypeC1 = $_FILES["index_desl_Cfile1"]["type"];
$imageFileTypeC2 = $_FILES["index_desl_Cfile2"]["type"];
$imageFileTypeC3 = $_FILES["index_desl_Cfile3"]["type"];
$allowed_types = array('image/jpg','image/png','image/jpeg','image/gif');
if (!in_array($imageFileTypeC1, $allowed_types)) {
echo "ILLEGAL FILE TYPE 1";
$uploadOk = 0;
}
else if (!in_array($imageFileTypeC2, $allowed_types)) {
echo "ILLEGAL FILE TYPE 2";
$uploadOk = 0;
}
else if (!in_array($imageFileTypeC3, $allowed_types)) {
echo "ILLEGAL FILE TYPE 3";
$uploadOk = 0;
}
else {
$uploadOk = 1;
}
if ($uploadOk == 0) {
echo " Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["index_desl_Cfile1"]["tmp_name"], $index_deslC1)) {
echo "The file ". basename( $_FILES["index_desl_Cfile1"]["name"]). " has been uploaded.";
}
else if (move_uploaded_file($_FILES["index_desl_Cfile2"]["tmp_name"], $index_deslC2)) {
echo "The file ". basename( $_FILES["index_desl_Cfile2"]["name"]). " has been uploaded.";
}
else if (move_uploaded_file($_FILES["index_desl_Cfile3"]["tmp_name"], $index_deslC3)) {
echo "The file ". basename( $_FILES["index_desl_Cfile3"]["name"]). " has been uploaded.";
}
它将有超过 3 个文件输入。
【问题讨论】:
-
你是说上面的行不通吗?
-
它可能看起来可以,但它不起作用。这是我得到的错误 - ILLEGAL FILE TYPE 2 抱歉,您的文件没有上传。
-
print_r($_FILES);中的内容永远是 3 吗? -
错误:非法文件类型 2Array ( [index_desl_Cfile1] => Array ( [name] => Capture.PNG [type] => image/png [tmp_name] => C:\xampp\tmp\ php5E56.tmp [error] => 0 [size] => 21861) [index_desl_Cfile2] => Array ([name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [index_desl_Cfile3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ) 抱歉,您的文件没有上传。
-
所以没有上传过 2 或 3,所以你需要检查有没有文件,然后再检查它的类型
标签: php file-upload mime-types file-extension