2014-03-05 5 views
0

처음으로 사이트를로드 할 때 로컬 서버에서이 오류가 발생하는 것 같습니다. 아침에. 내가 새로 고침을하면 사라져 버렸어.Silverstripe 3.1 - mkdir()에서 버그 또는 현지 문제가 발생 했습니까?

나는 실버 스트라이프 3.1을 사용하고있다.

로컬로이를 방지하는 방법이 있습니까? 아니면이 버그입니까?

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

폴더가 먼저 예를 그 기능 검사를 존재해야하는 경우 ...

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

라인 19 TEMP 폴더를 만들려고 것처럼 보이지만 이미 존재

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

답변

1

디렉토리와 이름이 같은 파일이있는 것으로 보입니다. 그렇기 때문에 is_dir()false을 반환하지만 파일이 있기 때문에 mkdir()이 실패합니다.

당신은이를 변경할 수 있습니다

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

이 지금까지 작동합니다.

그러나 이러한 파일 존재 테스트는 디자인에 따라 경쟁 조건에 취약하다는 것을 언급 할 필요가 있습니다.

(또는 프레임 워크) 예외로 경고를 켤 수있는 전역 오류 핸들러를 등록 경우이 필요하지 않을 수 있습니다
if (!file_exists($this->folder)) { 
    if(@mkdir($this->folder) === FALSE) { 
     throw new Exception('failed to create ' . $this->folder); 
    } 
} 

mkdir()는 경고를 던져 때문에 : 당신이 추가로 mkdir()의 반환 값을 확인해야하는 이유 오류시.

관련 문제