2013-12-19 71 views
0

我正在搜索至少半個小時,但我無法弄清楚我的代碼有什麼問題?如果文件名已經存在,如何刪除文件?

這就是:

<?php 
$file = $_FILES["file"]; 
$filename = $_FILES["file"]["name"]; 
$tempdir = $_FILES["file"]["tmp_name"]; 
$error = $_FILES["file"]["error"]; 
$type = $_FILES["file"]["type"]; 
$size = $_FILES["file"]["size"]; 

$maxsize = 524288; 
$allowedtypes = array("image/png", "image/jpg", "image/jpeg", "image/bmp"); 

$errormsg = ""; 
if(!empty($error)) 
{ 
    switch($error) 
    { 
     case '1': 
      $errormsg = 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
      break; 
     case '2': 
      $errormsg = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
      break; 
     case '3': 
      $errormsg = 'The uploaded file was only partially uploaded'; 
      break; 
     case '4': 
      $errormsg = 'No file was uploaded.'; 
      break; 
     case '6': 
      $errormsg = 'Missing a temporary folder'; 
      break; 
     case '7': 
      $errormsg = 'Failed to write file to disk'; 
      break; 
     case '8': 
      $errormsg = 'File upload stopped by extension'; 
      break; 
     default: 
      $errormsg = 'No error code avaiable'; 
    } 
} elseif(empty($tempdir) || $tempdir == 'none') { 
    $errormsg = 'No file was uploaded..'; 
} elseif(!in_array($type, $allowedtypes) || $size > $maxsize) { 
    $errormsg = 'Either image type not supported or size is extending 512 KB'; 
} else { 
    $filename = $_SESSION["username"]; 
    $extension = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION); 
    $path = 'profile_pictures/' . $filename . "." . $extension; 
    foreach($ext as $allowedtypes) { 
     if(file_exists($filename . "." . $ext)) unlink($filename . "." . $ext); 
    } 
    move_uploaded_file($tempdir, $path); 

    //for security reason, we force to remove all uploaded file 
    @unlink($file); 
} 

echo $path; 
?> 

如果我刪除foreach循環它的工作原理,但它不與合作!

這是爲什麼發生?請幫忙。

回答

2

foreach循環的參數不正確。正確的語法是:

foreach (array_expression as $value) { 
    statement; 
} 

$ext是包含上載的文件的擴展名的字符串,$allowedtypes是包含有效擴展陣列。您正試圖循環播放字符串

foreach($ext as $allowedtypes) { 
    if(file_exists($filename . "." . $ext)) unlink($filename . "." . $ext); 
} 

應該是:

foreach($allowedtypes as $ext) { 
    if(file_exists($filename . "." . $ext)) unlink($filename . "." . $ext); 
} 

注:我建議你enable error reporting發現這樣的錯誤。它會在開發過程中提供幫助。另外,請勿使用@ - 它會隱藏有用的錯誤消息。如果您不想向用戶顯示錯誤消息,請關閉錯誤報告並將其記錄下來。

+0

仍然無法正常工作。 :/ –

+0

@MohammadAreebSiddiqui:'E_NOT_WORKING'不是一個有效的PHP錯誤消息。 **先打開錯誤報告**(請參閱我答案中的鏈接),看看是否有任何錯誤。 –

+0

沒有錯誤:/順便說一句,它已經上。 –

相關問題