Silverstripe 3.1 - mkdir()问题bug还是本地问题?

时间:2014-03-05 19:29:15

标签: php silverstripe 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 个答案:

答案 0 :(得分: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()会对错误发出警告。