2013-03-18 37 views
2

所以在PHP中流行的mkdir()函數拋出了我一個警告,在下面的代碼:Mkdir會發出警告,當它應該是一個布爾?

public function check_dir($dir, $create_dir = false) { 
    if (is_dir ($dir)) { 
     return true; 
    } elseif ($create_dir == true) { 
     return mkdir ($dir); 
    } 

    return false; 
} 

其簡單的知道怎麼回事。所以我不會解釋。但在MKDIR()行,我得到:

警告命令mkdir():權限/var/www/wordpress/wp-content/themes/Aisis-Framework/AisisCore/FileHandling/File.php否認第70行

所以,儘管它只是一個警告而已,但您絕對不應該在現場發出警告或出現任何類型的錯誤。那麼當它清楚地表明它返回真或假而不是警告或致命時,我該如何處理這個問題呢?

+0

你可以寫權限到您的服務器?應該修復它 – 2013-03-18 17:43:55

+2

其實,你*應該*關閉「現場」(假設「生活」你的意思是「生產」)的警告。你應該永遠不要在*開發*時關閉警告。 – meagar 2013-03-18 17:44:09

+0

也可以將顯示的錯誤/警告消息關閉,並將它們發送到日誌文件 – 2013-03-18 17:44:24

回答

0

您可以建立一個自定義的錯誤處理程序,這是一般的好做法:http://www.php.net/set-error-handler

你可以使用這個在你認爲合適的任何方式來處理任何PHP錯誤。不過,你必須要麼關閉錯誤/警告日誌記錄(如你所說,不是一個好習慣),要麼使用@抑制(一般應該避免這種情況,但在這種情況下可能適用。)

就我個人而言,我會同意返回true/false來指示失敗的函數在失敗時不需要發出警告。但是,這是你的PHP。

+0

所以在這種情況下適當的壓制警告,因爲我已經處理這個返回的錯誤? – TheWebs 2013-03-18 17:49:09

+0

我會說是的,在這種情況下,使用'@'錯誤抑制可能是好的。這只是很容易被濫用/濫用的東西,我儘可能地避免它。但在這種情況下,看起來API本身對你起作用,對我來說壓制它是有道理的。 – Adrian 2013-03-18 17:51:27

0

你應該把在生產服務器警告過...但更好的是..你可以檢查你的代碼的許可......

function checkDir($dir, $createDir = false) { 
    if ($createDir === true) { 
     if (is_dir($dir)) 
      return true; 
     $baseDir = dirname($dir); 
     if (! is_dir($baseDir) || ! is_writable($baseDir)) { 
      return false; 
     } 
     return mkdir($dir); 
    } else { 
     return is_dir($dir); 
    } 
    return false; 
} 
相關問題