2014-03-05 63 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()将抛出一个警告对错误。