2010-11-01 67 views
1

我正在使用move_uploaded_file函數上傳文件。文件被移到正確的目錄中,我看到它的物理存在,但我無法打開它們。我得到「訪問被拒絕」錯誤。我查看文件的屬性,發現它沒有所有者。上傳的文件沒有文件所有者(在PHP中使用move_uploaded_file)

順便說一句,我在Windows 2008

我檢查的權限運行IIS,一切設置正確。運行Web服務的用戶具有完全的管理權限。

此外,我用copy()替換了move_uploaded_file函數,並且我能夠訪問該文件。它也讓用戶運行服務器作爲其所有者。

究竟什麼可能是錯的?

謝謝感謝您的幫助。

更新: 移動文件後,我嘗試使用chmod($ filename,0655)設置權限,但也沒有工作。

更新2(解決方案): 好吧,我想通了。 系統管理員沒有設置upload_tmp_dir。一旦我們添加了一個路徑,它就起作用了。

的源代碼:

  // Check if file was uploaded 
    if(isset($_FILES['formname']) && $_FILES['formname']['size'] > 8){ 
     $displayName = $_FILES['formname']['name']; 
      $displayName = unixfilename(basename($displayName)); 

      $tempName = $_FILES['formname']['tmp_name']; 

     $filename = $_FILES['formname']['name']; 
     $fileType = substr($filename, strrpos($filename,".")+1); 
     $filename = substr($filename,0,strrpos($filename,".")) . date("_Ymd_His") . ".$fileType"; // Add unique identifier 
     $filename = unixfilename(basename($filename)); 

     $destinationPath = "xx\yy\zz\\"; 

     // Check if the file is of a valid type 
     if($fileType == "txt"){ 
      // Check if file exists in processor folder 
      if(!file_exists($destinationPath.$filename)){ 
       if(move_uploaded_file($tempName,$destinationPath.$filename)){ 
        if(file_exists($destinationPath.$filename)){ 
// success 
+0

請顯示源代碼。 – 2010-11-01 20:59:06

+0

新增源代碼 – Kel 2010-11-01 21:06:23

回答

0
+0

嘿湯姆, 我發現這篇文章之前,它基本上說,使用複製功能。它使用複製功能,我知道使用is_uploaded_file來確保它是一個上傳的文件。但我仍然好奇爲什麼這不會使用move_uploaded_file。 – Kel 2010-11-01 21:06:06

+0

其實我認爲這是一種錯誤,就像在主題和手冊中的註釋中發現的一樣:http://www.php.net/manual/en/function.move-uploaded-file.php#86332 – 2010-11-01 21:10:45

0

檢查誰是誰做的上傳實際上

echo exec('whoami'); 
0

除了在你的PHP upload_tmp_dir組中的用戶。 ini文件,確保您設置的目錄可由PHP寫入。

如果您在IIS中使用PHP管理器,則默認爲upload_tmp_dirC:\Windows\Temp,默認情況下,這是PHP進程不可寫的。