首次加载网站时,我似乎在本地服务器上出现此错误,例如在早上。一旦我刷新它就消失了......
我正在使用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);
答案 0 :(得分:1)
似乎存在一个与目录同名的文件。这就是is_dir()
返回false
但mkdir()
失败的原因,因为文件存在。
您可以将其更改为:
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()
会对错误发出警告。