2014-12-12 4 views
1

다음 코드는 "Null"이라는 메시지를 나타내지 만 어떻게 가능합니까? fopen은 유효한 파일 핸들러 인 false가 아니지만 fgetcsv은 유효하지 않은 파일 핸들러를 의미하는 NULL을 반환합니다. 나는 이것을 이해하지 못한다.fgtecsv 및 잘못된 파일 핸들 문제

if ($fh = fopen("2014_01.csv", 'r') !== FALSE) { 
    if ($test = fgetcsv($fh, 0, ';') == NULL) 
     echo "Null"; 
    fclose($fh); 
} else 
    echo "fh error"; 
+0

시도를이 $ 테스트를 넣어 = fgetcsv ($ FH, 0, ';')을, 어쩌면 작동하는 경우는 아니지만에 전에 구문 –

+0

경우 때문에의 잘못된 순서의 평가 (아래 내 답변 참조),'$ fh'는 유효한 핸들이 아닌 TRUE 값을 얻습니다. PHP가 옳다. – axiac

답변

4

PHP operators precedence을 살펴보십시오.

if ($fh = (fopen() !== FALSE)) { 
    if ($test = (fgetcsv() == NULL)) 

을 그리고 이것은 당신이 원하는되지 않습니다 : 비교 (==은)는 다음과 같이 평가하고 그 이유는, 할당 (=)보다 더 높은 우선 순위를 가지고 있습니다. 할당 주위에 괄호를 넣어 :

if (($fh = fopen("2014_01.csv", 'r')) !== FALSE) { 
    if (($test = fgetcsv($fh, 0, ';')) == NULL) 
+1

A 대답 : –

+0

아주 좋습니다. 해결 됐어. 정말 고마워. –