2014-03-19 27 views
0

下面的代碼是上傳和顯示upload.php頁面上的文件,它工作正常。我遇到的問題是,如果我將upload.php頁面的網址複製並粘貼到新網頁中,則不會顯示這些文件。上傳和顯示網頁上的文件

upload.php的代碼

<?php 
if (isset($_FILES['file_upload'])) { 
    $file = $_FILES['file_upload']; 
    $name = $file['name']; 
    $type = $file['type']; 
    $tmp_location = $file['tmp_name']; 
    $upload = 'uploads'; 
    $final_destination = $upload.'/'.$name; 
    $error = $file['error']; 
    $max_upload_size = 2097152; 
    $size = $file['size']; 

    $allowedImageTypes = array('image/png', 'image/jpeg', 'image/gif', ); 

    function imageTypeAllowed($imageType){ 
     global $allowedImageTypes; 

     if(in_array($imageType, $allowedImageTypes)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    //Check for errors 
    if($error > 0 || is_array($error)){ 
     die("Sorry an error occured"); 
    } 

    //Check if file is image 
    //Only required if image is only whjat we need 
    if(!getimagesize($tmp_location)){ 
     die("Sorry, you can only upload image types"); 
    } 

    if(!imageTypeAllowed($type)){ 
     die("Sorry, file type is not allowed"); 
    } 

    if(file_exists($final_destination)){ 
     $final_destination = $upload.'/'.time().$name; 
    } 

    if(!move_uploaded_file($tmp_location, $final_destination)){ 
     die("Cannot finish upload, something went wrong"); 
    } 

    $handle = opendir('uploads'); 

    if($handle){ 
     while(($entry = readdir($handle)) !== false){ 
      if($entry != '.' && $entry != '..'){ 
       echo "<a href=\"uploads/$entry\">$entry</a><br>"; 
      } 
     } 
     closedir($handle); 
    } 
} 
?> 

<h2>File Successfully uploaded!</h2> 
+0

難道是'$ _FILES [「file_upload」]'沒有設置與因此你的代碼沒有運行?嘗試添加一些臨時代碼來檢查您的代碼是否按預期運行。 – jaredk

+1

這裏真正的問題是爲什麼你會使用一個名爲「upload.php」的文件來顯示文件?您的上傳有效嗎?大。現在創建一些像「image.php」來顯示它們。 –

回答

1

如果縮進你的代碼是人類可讀的,你會發現整個服務器端代碼塊被包裹在此條件:

if (isset($_FILES['file_upload'])) { 
    // all of your code 
} 

這意味着如果將file_upload值發佈到表單,那麼所有服務器端代碼將僅執行。當您將URL複製/粘貼到新的瀏覽器窗口並調用該請求時,您正在調用一個沒有表單值的GET請求。由於您未在此請求中上傳文件,因此isset()條件的計算結果爲false,且您的代碼未執行。

您應該將功能分成兩組:

  1. 處理上傳。
  2. 顯示數據的當前狀態。

用於處理上載的代碼只有在存在上載時纔會執行。顯示數據的代碼應該始終執行。

如果我正確地讀你的代碼,你應該需要做的就是打出最後幾部分組成:

if (isset($_FILES['file_upload'])) { 
    // the rest of your code 
} 

$handle = opendir('uploads'); 

if($handle){ 
    while(($entry = readdir($handle)) !== false){ 
     if($entry != '.' && $entry != '..'){ 
      echo "<a href=\"uploads/$entry\">$entry</a><br>"; 
     } 
    } 
    closedir($handle); 
} 
+0

好吧,我會試試這個 – user3423450

+0

感謝它現在的工作你是對的:) – user3423450