2009-08-18 3 views
2

CSV 형식의 데이터 내보내기 (배열에 미리로드 된 데이터)를 위해 PHP 웹 페이지 (1024MB의 ini_set 필요)에서 큰 데이터베이스 미리로드를 수행해야합니다. 이것이 항상 올바른 선택이 아니라는 것을 알지만, 사실 내가해야 할 필요가 있기 때문에 여기에 주요 기술적 인 질문이 있습니다 :PHP의 데이터 미리로드 및 메모리 관리

CSV 생성이 해제 된 후에 모든 미리로드 된 데이터가 지워지는 것을 어떻게 확신 할 수 있습니까? 그 서버 성능은 최적의 상태로 유지됩니까?

답변

4

나는 당신이 당신이 묘사 한대로 그것을 할 필요가 있다고 말하지만, 어쨌든 나는이 옵션을 버릴 것이다. SELECT INTO OUTFILE 구문을 사용 해본 적이 있습니까? (당신이 MySQL을 사용하지 않는 경우 찾을 수 있습니다 아마도 비슷한 기능이있다) MySQL은 당신을위한 CSV 파일을 생성 할 수 있습니다 : 파일을 덤프하기를 원한다면

SELECT * INTO OUTFILE '/tmp/result.txt' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM test_table; 

당신은 그 후 fpassthru()을 할 수 있습니다.

전체 데이터 세트를 메모리에로드 할 수없는 경우 구체적으로 unset() 어레이를 사용하여 데이터 세트를 완료 한 후 지워질 수 있습니다. 그러나 Havenard가 언급했듯이, 웹 페이지에서 이것을로드하는 경우 웹 스레드가 PHP 환경을 종료하므로 PHP 스크립트가 실행을 마치면 웹 서버가 메모리를 자동으로 지 웁니다.

+0

제안 해 주셔서 감사합니다. – Amadeus45

1

아마도 unset()입니다. 그러나 실제로 PHP 스크립트가 끝나면 메모리는 해제됩니다.

+0

사용자가 해당 페이지의 새 링크를 클릭하면 메모리가 자동으로 해제됩니다. 맞습니까? – Amadeus45

+0

페이지가로드되면 PHP 스크립트가 종료되고 PHP 가비지 수집기가 사용 된 모든 메모리를 해제합니다. 사용자가 스크립트를 프로그래밍하지 않는 한 사용자가 페이지를 볼 때 스크립트가 반드시 활성화되어있는 것은 아님을 알아야합니다. – Havenard