2013-10-06 99 views
0

我有以下代碼上傳文件到一個文件夾,取決於文件輸入上傳該文件被重命名,例如第一個輸入 - 圖片被重命名爲picture01.jpg,第五輸入 - 圖片被重命名爲圖片到picture01.jpg,等...PHP上傳多個圖像,並檢查其文件擴展名

<form action="upload_file.php" enctype="multipart/form-data" method="POST"> 
    <p><input name="image01" type="file"> </p> 
    <p><input name="image02" type="file"> </p> 
    <p><input name="image03" type="file"> </p> 
    <p><input name="image04" type="file"> </p> 
    <p><input name="image05" type="file"> </p> 
    <input type="submit" value="Upload File"> 
</form> 

這是upload_file.php -

<?php 

$pic_names = array (
    '01' => 'picture01', 
    '02' => 'picture02', 
    '03' => 'picture03', 
    '04' => 'picture04', 
    '05' => 'picture05', 
        ); 


$folder = "temp_images/"; 

if(preg_match("/(jpg|jpeg|png|gif|mp3|mp4)/",$ext)) { 
// Picture01 
$image_path01 = $folder . $pic_names['01'] . '.jpg'; 
move_uploaded_file($_FILES['image01']['tmp_name'], $image_path01); 
// Picture02 
$image_path02 = $folder . $pic_names['02'] . '.jpg'; 
move_uploaded_file($_FILES['image02']['tmp_name'], $image_path02); 
// Picture03 
$image_path03 = $folder . $pic_names['03'] . '.jpg'; 
move_uploaded_file($_FILES['image03']['tmp_name'], $image_path03); 
// Picture04 
$image_path04 = $folder . $pic_names['04'] . '.jpg'; 
move_uploaded_file($_FILES['image04']['tmp_name'], $image_path04); 
// Picture05 
$image_path05 = $folder . $pic_names['05'] . '.jpg'; 
move_uploaded_file($_FILES['image05']['tmp_name'], $image_path05); 

    echo 'Uploaded successfully!'; 
    } else { echo 'Uploaded successfully!';} 
    ?> 

我想檢查一下,在文件上傳之前,檢查在上傳jpg,gif或png之前是否存在以下擴展名之一。如果他們有另一個擴展名,那麼它不會被上傳,並給出錯誤。

我設法找到的唯一解決方案是當輸入名稱=「圖片」type =「file」>具有相同的名稱,例如在這種情況下,名稱。我怎麼能爲我的情況做不同的名字輸入?

我得到了follwoing錯誤:PHP解析錯誤:語法錯誤,意想不到的T_ELSE

雖然我相信這不是一個解析錯誤更多。

有什麼建議或幫助嗎?

更新:我修改了代碼,但它告訴我'錯誤的文件類型!'也適用於任何圖像格式。

+0

'echo'Uploaded successfully!';'must' before'}',not after it – Yang

+0

我更新了答案,但仍然無效。 –

+0

添加屬性'accept ='image/*'' – Anthony

回答

1

的錯誤是在這兩個字符串echo 'Uploaded successfully!';{位置和內容。

1)}else之間不允許有任何聲明。

2)'Uploaded successfully!';{包含{這是多餘的。

更新:處理上傳文件的一個很好的方法之一。取決於OP的$ pic_names數組。

$pic_names = array (
    '01' => 'picture01', 
    '02' => 'picture02', 
    '03' => 'picture03', 
    '04' => 'picture04', 
    '05' => 'picture05', 
); 

$allowed_mime = array(
    'image/jpeg' => 'jpg', 
    'image/pjpeg' => 'jpg', 
    'image/gif' => 'gif', 
    'image/png' => 'png', 
); 

$upload_messages = array(
    UPLOAD_ERR_OK => ' Uploaded successfully!', 
    UPLOAD_ERR_INI_SIZE => ' The uploaded file exceeds the maxumum size of ' . ini_get('upload_max_filesize') . '.', 
    UPLOAD_ERR_PARTIAL => ' The uploaded file was only partially uploaded.', 
    UPLOAD_ERR_NO_FILE => ' No file was uploaded', 
    UPLOAD_ERR_NO_TMP_DIR => ' Missing a temporary folder.', 
    UPLOAD_ERR_CANT_WRITE => ' Failed to write file to disk.', 
    UPLOAD_ERR_EXTENSION => ' A PHP extension stopped the file upload.', 
    100 => ' Wrong file type.', 
); 

$folder = "temp_images/"; 

$error_message = $success_message = ''; 
$upload_counter = 0; 

foreach ($pic_names as $key => $value) { 
    if (isset($_FILES['image'.$key]) && !$_FILES['image'.$key]['error']) { 
     $file_mime = getFileMime($_FILES['image'.$key]['tmp_name']); 

     if (in_array($file_mime, array_keys($allowed_mime))) { 
      $new_path = $folder . $value . '.' . $allowed_mime[$file_mime]; 

      if (!move_uploaded_file($_FILES['image'.$key]['tmp_name'], $new_path)) { 
       $error_message .= ' Image' . $key . ':' . $upload_messages[UPLOAD_ERR_CANT_WRITE]; 
      } else { 
       $upload_counter++; 
      } 
     } else { 
      $error_message .= ' Image' . $key . ':' . $upload_messages[100]; 
     } 
    } else { 
     $error_message .= ' Image' . $key . ':' . ($_FILES['image'.$key]['error'] ? $upload_messages[$_FILES['image'.$key]['error']] : $upload_messages[UPLOAD_ERR_NO_FILE]); 
    } 
} 

if ($upload_counter == count($pic_names)) { 
    echo $upload_messages[UPLOAD_ERR_OK]; 
} else { 
    echo 'Loaded ' . $upload_counter . ' file' . ($upload_counter != 1 ? 's' : '') . '.' . $error_message; 
} 

function getFileMime ($file) { 
    if (PHP_VERSION >= '5.3.0') { 
     $finfo = new finfo(FILEINFO_MIME_TYPE); 
     return $finfo->file($file); 
    } else { 
     return mime_content_type($file); 
    } 
} 
+0

我修改了代碼,但它告訴我'錯誤的文件類型!'也適用於任何圖像格式。 –

+0

'echo'錯誤的文件類型!';後續代碼var_dump($ EXT);'?這將是我調試此代碼的第一步。 –

+0

它告訴我_錯誤的文件類型!NULL_是否因爲$ ext沒有被定義? –

0

變化

echo 'Uploaded successfully!';{ 
else { echo 'Uploaded successfully!';} 

echo 'Uploaded successfully!'; 
} else { echo 'Wrong file type';} 
相關問題