2014-03-05 94 views
0

第一次加載網站時,我似乎在我的本地服務器上收到此錯誤,例如在早上。一旦我做了刷新,它已經不存在了...Silverstripe 3.1 - mkdir()問題或本地問題?

我正在使用silverstripe 3.1。

有沒有辦法阻止本地或這是一個錯誤?

Warning: mkdir(): File exists in /framework/core/manifest/ManifestCache.php on line 19 

貌似線19正試圖創建一個TEMP文件夾,但它已經存在......

function __construct($name) { 
    $this->folder = TEMP_FOLDER.'/'.$name; 
    if (!is_dir($this->folder)) mkdir($this->folder); 
} 

應該是功能檢查,如果該文件夾存在第一如

if (!is_dir($this->folder) || !file_exists($this->folder)) mkdir($this->folder); 

回答

1

似乎存在與目錄同名的文件。這就是爲什麼is_dir()返回falsemkdir()失敗,因爲文件存在。

您可以將其更改爲:

if (!file_exists($this->folder)) mkdir($this->folder); 

這應該工作至今。

但是有必要提一下,這樣的文件存在測試在設計時對於競爭條件是脆弱的。這就是爲什麼你需要額外檢查的mkdir()返回值:

if (!file_exists($this->folder)) { 
    if(@mkdir($this->folder) === FALSE) { 
     throw new Exception('failed to create ' . $this->folder); 
    } 
} 

,如果你(或框架)已註冊果然警告到異常全局錯誤處理程序,這可能不被需要的,因爲mkdir()將拋出一個警告對錯誤。