본문 바로가기

진리는어디에

PHP - 문자열 취급하기(!== 비교 연산자)

php는 아주 간편하게 사용할 수 있는 스크립트 언어다. 문법도 C랑 비슷해서 새로 공부해야 할 것도 그렇게 많지는 않다. 하지만 그 간편함 속에 숨겨진 php의 악마성이 있으니...

그것은 바로 문자열과 숫자에 구분이 없다는 것이다!!

먼저 아래의 코드를 보자. 디렉토리에 있는 내용을 단순히 출력 해주는 루틴이다.

$dirHandle = opendir("/home/kukuta/") or die("error opendir()")

while($filename = readdir($dirHandle)) 
{
    echo $filename."\n";
}

정말 간단한 소스다. 디렉토리 내의 파일 리스트를 읽어와 출력한다. 그냥 단순히 읽고 출력하는 것이 전부다. 여기서 오류가 발생 한다는 것이 말이 안된다. 하지만 php 세계에서는 충분히 오류가 발생 할 수 있는 코드다.

만일 /home/kukuta 디렉토리에 파일 이름이 '0' 인 파일이 들어 있다고 한다면 어떻게 될까? filename 변수는 0으로 채워질 것이고 while문에서는 filename이 0이기 때문에 false라고 판단하고 루프를 끝내 버린다.

물론 파일이름이 0으로 될일은 거의 없지만 이런 상황이 없으리라는 법은 없다. 그래서 위의 소스를 아래와 같이 수정했다.

$dirHandle = opendir("/home/kukuta/") or die("error opendir()")

while(false !== ($filename = readdir($dirHandle))) 
{
    echo $filename."\n";
}

3라인의 '!==' 는 타입과 값을 모두 비교한다. filename은 값이 0일지라도 타입이 boolean이 아니라 문자열이므로 위 조건식에서 false가 아니라고 판단하여 루프를 계속 유지 할 수 있다.

이렇게 수정 된다면 파일이름이 뭐가 나오든 opendir()이나 readdir()함수가 실패 하지 않는다면 파일들을 출력하다가 중간에 멈추는 일은 없을 것이다.


참고 서적 : PHP4 웹프로그래밍 가이드 : 마이트press : 이승혁 저
               (위의 오류에 소지가 있는 코드가 쓰여져 있는 책이다 -_-)

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!