2014-02-28 45 views
2

我正在關注一本書中的一些php示例,並通過它們進行工作。下面的代碼假設使用switch語句驗證上載的文件類型是否匹配所設置的有效類型。有效的類型是:jpeg,png,tiff和gif。但是,代碼似乎總是採用默認語句並跳出循環。我甚至從網站上下載了這個例子,並且發生了同樣的問題!PHP switch語句始終採用默認值

echo <<<_END 
<html><head><tile>PHP Form Upload</title></head> 
<body> 
<form method='post' action='upload2.php' enctype='multipart/form-data'> 
Select a JPG, GIF, PNG or TIF File: 
<input type='file' name='filename' size='10' /> 
<input type='submit' value='Upload' /></form> 
_END; 

if ($_FILES) 
{ 
$name = $_FILES['filename']['name']; 

switch ($_FILES['filename']['type']) 
{ 
    case 'image/jpeg': $ext = 'jpg'; break; 
    case 'image/gif': $ext = 'gif'; break; 
    case 'image/png': $ext = 'png'; break; 
    case 'image/tiff': $ext = 'tiff'; break; 
    default:   $ext = '';  break; 
} 

if ($ext){ 

    $n = "image.$ext"; 
    move_uploaded_file($_FILES ['filename']['tmp_name'],$n); 
    echo "Uploaded image '$name' as '$n':<br />"; 
    echo "<img src='$n'"; 
} 
else echo "'$name' is not a valid image file"; 
} 
else echo "No image has been uploaded"; 

echo "</body></html>" 


?> 

如果我說上傳圖片「image.jpg的」,它應該$分機設置爲$ JPG,然後執行上傳,但我只是得到了else語句:

else echo "'$name' is not a valid image file"; 
+6

你有沒有綁打印'$ _FILES ['文件名'] ['type']'看看爲什麼它會經歷錯誤的路徑? – John3136

+0

我還沒有,會很快做到這一點。我嘗試了一些簡單的回聲聲明,這並沒有太大的幫助。 – user3362856

回答

0

你代碼示例不起作用,因爲文件MIME類型不在您的case語句中。

修改代碼,以便您可以檢查該文件的MIME類型:如果您要添加此MIME類型,你可以根據使用這種修改顯示的類型修改您的開關/ case語句

else echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)"; 

然後。

編輯:

請注意,您還可以使用var_dump() PHP函數來檢查變量的內容。

else{ 
    echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)"; 
    var_dump($_FILES['filename']); 
} 

編輯:

記得爲它服務之前,請務必清理客戶數據(ヶ輛()不招),檢查http://fr.php.net/htmlentities

echo "'$name' is not a valid image file (".htmlentities($_FILES['filename']['type'])." unallowed)";