2012-06-22 2 views
2

PHP를 사용하는 csv에서 'new line'이라는 일반적인 문제가 발생하여 미쳐 버렸습니다 !!! 많은 포럼을 확인하고 다른 해결 방법을 시도했지만 문제를 해결하지 못하는 것 같습니다. 나는 1 개의 헤더와 2 개의 데이터 레코드를 가진 CSV 파일을 읽고있다. fgets()을 사용하여 헤더를 건너 뛰고 $data=fgetcsv()을 사용하여 데이터 레코드를 읽습니다. 이제 문제는 데이터 레코드가 모두 단일 배열로 읽혀지는 것입니다. 내가 헛되이 다음과 같은 옵션이 있지만, 모든 시도 :csv에서 PHP 개행이 감지되지 않음

  1. 런타임 - ini_set("auto_detect_line_endings", true);
  2. 켜지고 auto_detect_line_endings로를 'ON'php.ini 파일에서.
  3. 내가 dev에 지역에서 지역, 램프에서 MAMP에서 일하고 있어요 fwrite($handle, implode($delimiter,$fieldsarray).PHP_EOL);

을 시도했다. CSV는 로컬 컴퓨터에 저장되고/tmp/폴더에 복사되며 거기에서 읽습니다. 파일에 필요한 개행 문자가 있는지 어떻게 확인할 수 있습니까? tmp에서 파일을 검사 할 때 새 행에 레코드가 표시됩니다.

+1

, 다음 첫 번째는 fgets는 전체 파일을 후루룩 소리 내며 먹기 것 - fgetcsv는 전화가 줄을 읽고() 내부는 fgets 후 분석 여분의 csv-> 배열을 추가합니다. –

+0

개행 문제가 SO에게 전파 된 것처럼 보입니다. – Alexander

+0

CSV 파일에 줄을 게시 할 수 있습니까? – Rachael

답변

3

다음 해결책이 효과가 있습니다! 이 라인 엔딩 인 경우

$file_contents = file_get_contents($temp); 
$file_cont_new = str_replace("\n","\r",$file_contents); 
file_put_contents($temp,$file_cont_new); 
+1

'str_replace ("\ r", "\ n", $ file_contents)가 아닐 것인가? 그리고 만약 \ r \ n이 있으면 빈 줄이 생깁니다. 해결 방법은 입니다.'$ file_cont_new = str_replace ("\ n \ r", "\ n", $ file_contents); $ file_cont_new = str_replace ("\ n \ r", "\ n", $ file_contents); $ file_cont_new = str_replace ("\ r", "\ n", $ file_contents); ' – corban

+0

@corban에는 $ file_contents를 다시 사용하는 것과 관련된 문제가 있습니다. 후자의 명령은 $ file_cont_new를 사용해야합니다. 또한, 마지막으로 동사를 간단하게하고 간단히 줄을 하나씩 사용하여 ("\ n \ n") 모든 항목을 간단하게 바꿀 수 있습니다. –

관련 문제