2011-04-07 2 views
0

원격 CSV 파일의 내용을 읽고 행을 반복하며 데이터 항목을 데이터베이스에 추가하는 스크립트가 있습니다. 이 파일에는 평균 약 3000 줄이 있으며 따라서 3000 개의 제품이 있습니다. 간단한 PHP를 사용하여 파싱하기 전에 전체 CSV 파일을 다시 인코딩 하시겠습니까?

는 분명 몇 가지 만들려면 : 나는 CSV 파일의 데이터를 제어 할 수 있습니다하지 마십시오

  • 사전에 나는이 CSV 파일 인 방식을 통해/제어에 대한 액세스 권한이없는
  • :
  • cretaed CSV 파일을 동적으로 MySQL 데이터베이스의 데이터에서, 하루에 한 번

문제가 발생한다

내 스크립트는 약 1300 줄 이상을 반복하고 멈추거나 오류가 없으며 아무 것도하지 않습니다. 모든 텍스트는 큰 따옴표로 묶여 있으며 일반적으로 CSV 파일의 형식이 올바르게 지정되어 있습니다. 이상한 일은 다음과 같습니다. CSV 파일을 다운로드하여 메모장 + +에서 열고 BOM없이 UTF-8로 인코딩을 변경하고 테스트 서버에 업로드 한 다음 스크립트를 실행하면 전체 3000 항목과 전체 괜찮습니다.

그래서이 파일을 생성하는 사람들이 데이터를 UTF-8로 삽입해야한다고 가정합니다. 그 프로세스를 제어 할 수 없기 때문에 BOM 인코딩없이 UTF-8을 해당 파일에 적용하거나 적어도 파일 내용을 변수로 읽어 들여 다시 인코딩 할 수있는 간단한 방법이 있는지 알고 싶습니다. ?

많은 감사합니다.

+0

먼저 시간 초과 문제를 제외하고 일반적인 접근 방식을 검토하십시오. 공유 할 코드가 있습니까? – trickwallett

+0

@tickwallet 나는 정말로 - http://pastebin.com/fLngbWYu – SimonDowdles

+0

@tickwallet - 타임 아웃 문제가없고, 최대 실행 시간을 60 분으로 설정했으며, 서버를 완벽하게 제어 할 수 있기 때문에 문제가 데이터 내에 있다는 것을 확실히 알고있다. 그 자체 – SimonDowdles

답변

0

다른 서버에서 직접 시도하는 것처럼 들립니다. 왜 당신은 전체 파일을 가져 와서 자신의 서버에 저장하지 말고, 어떤 조작을 한 다음 처리합니까?

+0

Hmmm 결코 그것의! 그렇게 할 수 있습니다. 단순히 모든 내용을 변수로 읽고 해당 변수의 내용을 다시 인코딩하고 새 파일에 기록합니까? – SimonDowdles

+0

정확히 뭐 그런 다음 인터넷 연결을 닫는 등 걱정할 필요없이 당신의 여가에서 파일을 읽고/처리 할 수 ​​있습니다. – dogmatic69

1

파일을 처리하기 전에 iconv을 사용하여 PHP에서 직접 인코딩을 변경할 수 있습니다.

편집 : iconv의 php 버전을 사용하여 데이터를 처리 할 수 ​​있습니다. 가져 오기 전에 파일을 다시 인코딩하려면 exec을 사용하여 linux 명령 iconv (LAMP 서버라고 가정)을 사용해야합니다.

+0

그러나 이것은 실제 FILE 또는 파일의 데이터에 적용됩니까? – SimonDowdles

+0

@webfac 내 대답을 업데이트했습니다. – jeroen

+0

그게 좋겠지 만 소스 문자셋을 모른다면 어떻게 될까? – SimonDowdles

관련 문제