2014-11-25 4 views
0

이것은 Windows에서 실행되는 PHP 스크립트입니다. 그것은 일하고 있었지만 최근에 멈췄습니다.PHP의 fgetcsv가 파일 시작 부분에서 false를 반환 함

파일이 열리고 유효한 파일 핸들이 반환됩니다 $fh = fopen($filename, 'r');

그러나, 나는 fgetcsv를 호출 처음으로 그것은 false 반환이 지금 모든 CSV 파일에 무슨 일이 일어나고

$headers = fgetcsv($fh, 6000, ','); 
$line_no++; 
if($headers === FALSE){ 
    echo 'Error parsing file headers'; 
} 

I 시험. 나는 아무 소용이 시도 다른 변경 사항은 다음과 같습니다

  • ini_set('auto_detect_line_endings', true); 마우스 오른쪽 단추 사용하여 파일
  • 을 연 후 파일을
  • rewind($fh); 마우스 오른쪽을 열기 전에 모두 0 또는 두 번째 매개 변수, 길이 6000 같은 번호입니다. Windows 및 Mac

그것은 윈도우 뭔가처럼 보인다 UNIX에서 파일의 선 끝 스타일을 변경

  • 구문 분석 할 수 없습니다이 파일을 일으키는 것입니다.

    fgetcsv에서 실제 오류를 반환 할 방법이 있습니까? 설명서에 오류가있을 경우 false을 반환한다는 내용은 없습니다. 문제를 일으킬 수있는 다른 Windows 설정이 있습니까? Windows 보안 설정을 사용하면 모든 사람이 파일을 완전히 제어 할 수 있습니다.

  • 답변

    0

    스크립트 시작 부분의 변경으로 인해 동일한 파일이 잠금 파일로 사용되어 스크립트가 동일한 파일에서 동시에 두 번 실행되지 않는 것으로 나타났습니다. 나중에 스크립트에서 실제로 파일을 파싱하고 싶을 때 다시 열었습니다 (성공적이었습니다). 그러나 실제로 내용을 읽을 수 없었습니다.

    내가 사용한 솔루션은 실제 파일을 사용하는 대신 파일 이름을 기반으로 임시 잠금 파일을 만드는 것이 었습니다. 예 : $filename.'.lock'

    PHP가 반환하거나 어떤 점에서 경고를 작성한 경우 훨씬 더 도움이되었을 것입니다.

    0

    이것을 디버깅하는 표준 방법은 "print_r ($ headers)"입니다.

    fgetcsv는 배열을 반환하므로 비어 있거나 배열이 아니어야합니다. 알려진 위치 (IIS가 "syslog"이고 이벤트 뷰어에 표시되어야 함)에 오류를 기록하도록 PHP를 구성 (또는 구성) 할 수 있다면 무엇이 잘못되었는지 알아낼 수 있어야합니다.

    +0

    행운이 없습니다. print_r은 아무 것도주지 않았습니다. 그것은 이미 거짓으로 간주되기 때문에 제가 의심했던 것입니다. 나는 또한 모든 PHP 오류 (E_ALL)를 켰으며 두 개의 관련없는 공지 사항을 제외하고는 아무 것도 얻지 못했습니다. –