2011-06-20 107 views
0

這是我的腳本:錯誤文件上傳

$today = mktime(0, 0, 0, date("m"), date("d"), date("y")); 
$b= date("m/d/y", $today);  

if ($_FILES["file$i"]["error"] > 0) 
     { 
     echo "Return Code: " . $_FILES["file$i"]["error"] . "<br />"; 
     } 
     else 
     { 
     // echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
     // echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
     // echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
     // echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
      $upload=$_FILES["file$i"]["name"]; 
      $fileName = preg_replace('/[^\w\._]+/', '', $upload); 
      $filup=$b.$fileName; 
      echo $filup; 
     if (file_exists("upload/" . $filup)) 
      { 
      echo $_FILES["file$i"]["name"] . " already exists. "; 
      } 
     else 
      { 
      move_uploaded_file($_FILES["file$i"]["tmp_name"], 
      "upload/" . $filup); 
      $path="upload/" . $filup; 
      $temp="Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
      $sql="insert into album(uid,path,cid,title) values('$uid','$path','$cid','$text[$i]') "; 
      mysql_query($sql) or die(mysql_error()); 
      } 
     } 

它顯示我此錯誤:

Warning: move_uploaded_file(upload/06/20/113.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\wamp\www\demo\editedfileupload\pr1\upload_file.php on line 31

第31行是:

echo $_FILES["file$i"]["name"] . " already exists. "; 
+0

鑑於警告說'move_uploaded_file(upload/06/20/113.jpg)',我猜想第31行實際上是'move_uploaded_file($ _ FILES [「file $ i」] [「tmp_name」],「upload/「。 $ filup);'。你確定這個文件存在嗎? – jtbandes

+0

是這個文件存在,如果我使用$上傳而不是使用$ filup,它工作正常。當我使用日期時間戳時,只有這樣纔會出現以下錯誤。 – user799100

+0

難道是Windows不允許文件和文件夾名稱中帶有正斜槓,就像您在日期中使用的那樣? – Ben

回答

1

我認爲你的問題是$filup是不是你可能認爲它是。當你在做$filup=$b.$fileName;時,你可能會無意中改變文件的完整路徑。例如,假設:

$b = "06/20/11" 
$fileName = "testfile" 

然後做$filup=$b.$fileName;後,$ filup將變爲:

$filup = "06/20/11testfile" 

所以,當你使用$ filup在file_exists()或move_uploaded_file()以什麼可能發生的是$ fileup中的斜槓是用於目錄分隔符而不是文件名。

所以檢查(file_exists(「上傳/ 06/20/11testfile」)總是失敗,當它進入move_uploaded_file,它說:「沒有這樣的文件或目錄」。

請考慮刪除前的斜線$ b或者使用「 - 」來代替,我認爲即使是逃避「/」也可以,但如果沒有特別的理由讓斜槓保持簡單,我建議保持簡單。使用絕對路徑進行文件系統操作。

希望這會有所幫助。

+0

@ user799100:我想我的迴應也解釋了你的評論上面 - 「是這個文件存在,如果我使用$上傳而不是使用$ filup,它工作正常。當我使用日期時間戳,只有那麼下面的錯誤發生」 – Abhay

1

我不知道爲什麼你認爲第31行是你選擇的行,但肯定的錯誤是由以下代碼引起的:

move_uploaded_file($_FILES["file$i"]["tmp_name"], "upload/" . $filup); 

現在,通常情況下,我會說這是一個CHMOD問題,但有一些奇怪的事情發生,我不太熟悉(因爲您正在從Windows系統中工作)。檢查CHMOD,如果修復它,對你有好處,但除此之外,請解釋變量$b包含正斜槓的可能性? Windows以反斜線工作(這在PHP中也是如此)。看看改變斜槓是否會有所作爲。

編輯:根據您對自己的帖子的評論,我很確定這個問題是由正斜槓引起的。您仍然可以使用$fileName變量,但要確保$b變量不包含正斜槓。此外,在行if (file_exists("upload/" . $filup))move_uploaded_file($_FILES["file$i"]["tmp_name"], "upload/" . $filup);,將正斜槓更改爲反斜槓。