2014-05-12 1 views
-1

나는 무엇이 잘못되었는지 잘 모르겠습니다. 어떤 이유로 is_dir 함수가 제대로 작동하지 않습니다.is_dir은 exirits가 아니라 dir이 있다고 말합니다.

class A 
{ 
    private $path 

    public function setPath($path) 
    { 
    if(!is_dir(!$path)){ 
     throw new Exception('Invalid path'); 
    } 

    } 
} 

$obj = new A; 
$obj->setPath('/usr/htdocs/site/'); 

이 코드 줄 뒤에 잘못된 경로가 throw됩니다. 내가 확인하고/usr/htdocs/site/path가 존재합니다. 무엇이 문제 일 수 있습니까? 경로 변수

전에

+0

'! $ path' - Wut? 그것을 제거하십시오'! '. –

+0

"!" $ path 앞에 $ – Slyvain

+0

'private $ path'의 끝에 세미콜론을 넣으십시오. 그렇지 않으면'Parse error : 구문 오류, 예기치 않은 'public'(T_PUBLIC), ','또는 ';' 이미'! '를 제거한 것입니다. –

답변

0

$ 경로를 의미한다. 그러면 is_dir (false)이됩니다. (! is_dir ($ 경로)) (! is_dir ($ 경로)) :

@NiettheDarkAbsol 말했듯이

나는 {...하지 않을 경우 {

리틀 업데이트하면 코드가 될 것이라고 생각 is_dir은 문자열 (디렉토리 이름)을 매개 변수로 사용하므로 false [$ path ($ path는 '/ usr/htdocs/site /'여야합니다.이 경우! $ path는 bool false 여야합니다) ]는 문자열 ''(비어 있음)로 변환됩니다.

그리고 ''는 가장 일반적으로 사용되는 파일 시스템에서 유효하지 않은 디렉토리 이름입니다. 따라서 is_dir은 잘못된 이름으로 디렉토리를 찾을 수 없습니다. 그리고 그 때문에, false를 반환합니다. 예외를 throw하여 경로가 잘못되었다고보고합니다.

@NiettheDarkAbsol 덕분에 나머지 사항을 알려주세요.

+1

거기서 멈추지 마. '! is_dir (false)'는 무엇을합니까? 문자열을 기대하기 때문에 문자열에'false '를 캐스트합니다. 그래서'! is_dir ("")'... 그러니까 어떻게 든 이름이없는 디렉토리가 있다면 어떻게 될까요? –

+0

@NiettheDarkAbsol 죄송합니다, 경험이 없습니다. 나는 디렉토리 이름이 비어있을 때 일어날 일을 진실로 알지 못한다. 나는 그것이 파일 시스템과 관련이있을 것이라고 생각한다. 어떻게 파일 시스템이 파일 테이블에 파일을 찾고/찾는가와 같다. – NICK

+0

글쎄요, 좋은 소식은 파일과 폴더 이름을 항상 비울 수 없다는 것입니다. 어떤 이유로 이국적인 맞춤형 OS를 사용하고 있지 않다면 말입니다. –

1

제거 !은 다음과 같이 시도해보십시오!에서 $ 경로 무엇이든, 그것은 잘못된 것입니다 경우

if(!is_dir($path)){ 
     throw new Exception('Invalid path'); 
    } 
관련 문제