Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silverstripe 3.1-mkdir()问题是错误还是本地问题?_Php_Silverstripe_Mkdir - Fatal编程技术网

Php Silverstripe 3.1-mkdir()问题是错误还是本地问题?

Php Silverstripe 3.1-mkdir()问题是错误还是本地问题?,php,silverstripe,mkdir,Php,Silverstripe,Mkdir,当第一次加载站点时(例如早上),我似乎在本地服务器上遇到此错误。一旦我刷新,它就消失了 我正在使用silverstripe 3.1 有没有办法在本地防止这种情况,或者这是一个bug Warning: mkdir(): File exists in /framework/core/manifest/ManifestCache.php on line 19 看起来第19行正在尝试创建临时文件夹,但它已存在 function __construct($name) { $this->fo

当第一次加载站点时(例如早上),我似乎在本地服务器上遇到此错误。一旦我刷新,它就消失了

我正在使用silverstripe 3.1

有没有办法在本地防止这种情况,或者这是一个bug

Warning: mkdir(): File exists in /framework/core/manifest/ManifestCache.php on line 19
看起来第19行正在尝试创建临时文件夹,但它已存在

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);

似乎存在与目录同名的文件。这就是为什么
is_dir()
返回
false
,但是
mkdir()
由于文件存在而失败的原因

您可以将此更改为:

if (!file_exists($this->folder)) mkdir($this->folder);
到目前为止,这应该是可行的

然而,有必要指出,此类文件存在性测试在设计上容易受到竞争条件的影响。这就是为什么需要额外检查
mkdir()的返回值的原因。

如果您(或框架)注册了一个全局错误处理程序,将警告转换为异常,则可能不需要这样做,因为
mkdir()
将对错误发出警告

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