2012-06-27 424 views
1

我有一個最簡單的dumbest腳本,用於上傳文件並在操作後返回成功true或false。不知道爲什麼,突然腳本停止工作,在move_uploaded_file行給我一個failed to open stream: No such file or directory錯誤。這很奇怪,因爲我沒有改變任何路徑,權限,基本上沒有任何改變。任何提示如何解決這個問題?我是一個PHP新手。我下面的腳本:文件上傳失敗

if(isset($_FILES)){ 
    $file_tmp = $_FILES['mpp-file']['tmp_name']; 
    $file_name = $_FILES['mpp-file']['name']; 

    if(is_uploaded_file($file_tmp)) { 
     if(move_uploaded_file($file_tmp, "tmp/$file_name")){    
      echo '{"success": true}'; 
      unlink("tmp/$file_name"); 
     } else { 
      echo '{"success": false}'; 
     }  
    } else{ 
     echo '{success: false}'; 
    } 
} 

而且從堆棧跟蹤頁面:

<html> 
<head></head> 
<body> 
<font size="1"><table class="xdebug-error" dir="ltr" border="1" cellspacing="0" cellpadding="1"> 
<tbody><tr><th align="left" bgcolor="#f57900" colspan="5"><span style="background-color: #cc0000; color: #fce94f; font-size: x-large;">(!)</span> Warning: move_uploaded_file(tmp/MSP1.mpp) [<a href="function.move-uploaded-file">function.move-uploaded-file</a>]: failed to open stream: No such file or directory in K:\LAMP\www\project\msp-load.php on line <i>7</i></th></tr> 
<tr><th align="left" bgcolor="#e9b96e" colspan="5">Call Stack</th></tr> 
<tr><th align="center" bgcolor="#eeeeec">#</th><th align="left" bgcolor="#eeeeec">Time</th><th align="left" bgcolor="#eeeeec">Memory</th><th align="left" bgcolor="#eeeeec">Function</th><th align="left" bgcolor="#eeeeec">Location</th></tr> 
<tr><td bgcolor="#eeeeec" align="center">1</td><td bgcolor="#eeeeec" align="center">0.0034</td><td bgcolor="#eeeeec" align="right">677944</td><td bgcolor="#eeeeec">{main}()</td><td title="K:\LAMP\www\gantt_latest\examples\MSProject_import\msp-load.php" bgcolor="#eeeeec">..\msp-load.php<b>:</b>0</td></tr> 
<tr><td bgcolor="#eeeeec" align="center">2</td><td bgcolor="#eeeeec" align="center">0.0034</td><td bgcolor="#eeeeec" align="right">678256</td><td bgcolor="#eeeeec"><a href="http://www.php.net/move_uploaded_file" target="_new">move_uploaded_file</a> 
()</td><td title="K:\LAMP\www\project\msp-load.php" bgcolor="#eeeeec">..\msp-load.php<b>:</b>7</td></tr> 
</tbody></table></font> 
<br> 
<font size="1"><table class="xdebug-error" dir="ltr" border="1" cellspacing="0" cellpadding="1"> 
<tbody><tr><th align="left" bgcolor="#f57900" colspan="5"><span style="background-color: #cc0000; color: #fce94f; font-size: x-large;">(!)</span> Warning: move_uploaded_file() [<a href="function.move-uploaded-file">function.move-uploaded-file</a>]: Unable to move 'K:\LAMP\tmp\phpC7A5.tmp' to 'tmp/MSP1.mpp' in K:\LAMP\www\project\msp-load.php on line <i>7</i></th></tr> 
<tr><th align="left" bgcolor="#e9b96e" colspan="5">Call Stack</th></tr> 
<tr><th align="center" bgcolor="#eeeeec">#</th><th align="left" bgcolor="#eeeeec">Time</th><th align="left" bgcolor="#eeeeec">Memory</th><th align="left" bgcolor="#eeeeec">Function</th><th align="left" bgcolor="#eeeeec">Location</th></tr> 
<tr><td bgcolor="#eeeeec" align="center">1</td><td bgcolor="#eeeeec" align="center">0.0034</td><td bgcolor="#eeeeec" align="right">677944</td><td bgcolor="#eeeeec">{main}()</td><td title="K:\LAMP\www\gantt_latest\examples\MSProject_import\msp-load.php" bgcolor="#eeeeec">..\msp-load.php<b>:</b>0</td></tr> 
<tr><td bgcolor="#eeeeec" align="center">2</td><td bgcolor="#eeeeec" align="center">0.0034</td><td bgcolor="#eeeeec" align="right">678256</td><td bgcolor="#eeeeec"><a href="http://www.php.net/move_uploaded_file" target="_new">move_uploaded_file</a> 
()</td><td title="K:\LAMP\www\project\msp-load.php" bgcolor="#eeeeec">..\msp-load.php<b>:</b>7</td></tr> 
</tbody></table></font> 
</body> 
</html> 

我使用Win7上WAMP服務器。

+3

你是否存在tmp /'文件夾? – slash197

回答

2

您需要檢查tmp目錄是否存在。 當您嘗試移動文件的位置不存在時,會顯示此錯誤。

if(isset($_FILES)){ 
    $file_tmp = $_FILES['mpp-file']['tmp_name']; 
    $file_name = $_FILES['mpp-file']['name']; 
$directory_path = $_SERVER["DOCUMENT_ROOT"]."/tmp/$file_name"; 

    if(is_uploaded_file($file_tmp)) { 
if(is_dir($directory_path)) 
{ 

     if(move_uploaded_file($file_tmp, "tmp/$file_name")){    
      echo '{"success": true}'; 
      unlink("tmp/$file_name"); 
     } else { 
      echo '{"success": false}'; 
     } 
}else 
{ 
echo "No such directory exists"; 
}  
    } else{ 
     echo '{success: false}'; 
    } 
} 
+0

解決!原因,我不完全明白,我的/ tmp文件夾被刪除。感謝你及時的答覆。 – DevAno1

1

不要做:

if(isset($_FILES)){ 

上傳失敗仍然會產生一個$ _FILES數組。你需要檢查錯誤參數:

if ($_FILES['mpp-file']['error'] !== UPLOAD_ERR_OK) { 
    die("Upload failed with error code " . $_FILES['mpp-file']['error']); 
} 

錯誤代碼/常量定義如下:http://php.net/manual/en/features.file-upload.errors.php

同時,做使用['name']參數用於存儲文件。該字段處於遠程用戶的控制之下,他們可以簡單地破解上傳數據,說../../../../../../../etc/passwwd,您的腳本將會愉快地覆蓋用戶需要的服務器上的任何文件。

0

我有一個類似的問題,但坦率地說,我的問題是與文件名中的管道字符。請檢查您的文件名是否有任何特殊字符。