>백엔드 개발 >PHP 문제 >1분 안에 대량의 PHP 데이터(500,000개 이상)를 Excel로 내보냅니다.

1분 안에 대량의 PHP 데이터(500,000개 이상)를 Excel로 내보냅니다.

慕斯
慕斯앞으로
2021-06-25 09:38:068545검색

PHP에서 PHP에 대해 너무 많이 배웠습니다. 여러분이 PHP 사용 기술을 얼마나 마스터했는지 모르겠습니다. 많은 사람들이 이해하지만 사용하지 않을 것입니다. 걱정하지 마십시오. 이 기사는 PHP를 더 깊이 있게 안내하기 위한 것입니다.

Analytics

1. Tools

우선 내보내야 하는 50W+의 수를 명확히 해야 합니다. 둘째, Excel2003 버전의 최대 행 수는 65535입니다. 행 및 Excel2007 버전의 행 수(1048576행) 요구 사항을 충족하려면 사용해야 하는 Excel 버전은 2007 버전 이상이어야 합니다.

2. 클래스 라이브러리

PHP에서 Excel을 처리하는 데 가장 일반적으로 사용되는 클래스 라이브러리는 PHPExcel입니다(예제 테스트 후 10,000개의 데이터를 내보내고 다양한 데이터 판단 처리를 수행하는 데 5~8분이 걸렸습니다). 나는 또한 인터넷에서 PHPOffice라는 것을 발견했습니다(저는 이것을 사용해 본 적이 없습니다. PHPExcel보다 더 효율적이라고 합니다. 다음에 블로그 게시물을 작성하여 소개하겠습니다). )은 csv 형식 파일로 내보내는 파일로 Excel 파일로도 열 수 있습니다.

1. 시간 초과

이것은 직접적이며 요청 시간이 초과되었습니다. 슈퍼마켓에서는 이렇게 많은 데이터 요청을 처리하는 경우가 매우 일반적입니다. 이때 PHP 구성: set_time_limit(0)을 수정해야 합니다.

2. Overflow

메모리 저장량이 부족할 뿐만 아니라, 서버 CPU 구성이 높지 않은 경우에는 데이터베이스의 모든 데이터를 한꺼번에 메모리에 채워 넣습니다. 100%, 서버 카드 로드가 발생합니다. 오버플로와 관련하여 PHP 구성도 수정해야 합니다: ini_set('memory_limit', '1024M').

솔루션

1. PHPExcel을 사용하여 내보내기

이 솔루션을 사용하여 500,000개 이상의 데이터를 내보내는 것은 매우 나쁩니다. 테스트 후에는 가능하며 서버에서도 내보낼 수 있습니다. 속도가 느려지고 계속 다운로드됩니다. PHP 클래스 라이브러리를 사용하는 경우 메모리를 절약하고 계산 속도를 높이기 위해 PHP를 최신 PHP7 버전으로 업그레이드하는 것이 좋습니다

2 csv 내보내기를 사용하세요

PHP 클래스 라이브러리를 사용하지 않는 경우 fputcsv ()가 가장 좋은 방법입니다. csv 파일이 더 작기 때문에 csv 파일에 저장할 수 있는 데이터의 양이 많을 수도 있고 작을 수도 있습니다. CPU와 시간, 그리고 파일 데이터의 양이 늘어날수록 엑셀 생성 시간도 늘어납니다.

3. 이상적인 솔루션

내보내는 데이터의 양을 줄이기 위해 데이터를 분할합니다. 예를 들어 일주일에 한 번 또는 하루에 한 번 내보낼 수 있습니다. 메모리 손실을 방지하기 위해 필요한 단계입니다. 오버플로, 실행 시간 초과

알고리즘 최적화를 수행하고, 데이터가 반복될 때 중첩 루프를 줄이고, CSV 또는 Excel 데이터 개체를 한 번에 생성하여 데이터베이스 쿼리 수를 줄입니다. 다른 데이터를 사용하려면 사전에 해당 데이터 구조를 생성하십시오.

4. 가장 빠른 솔루션

운영 및 유지 관리에 대한 요구 사항을 넘겨주고 sql 문을 직접 실행하여 내보냅니다.

SELECT
	*
FROM
	table_name 
INTO OUTFILE 'F:/test.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n';

이 문을 실행할 때 다음 오류가 발생할 수 있습니다.

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

이는 구성 때문입니다. MySQL의 권한 문제로 실행될 수 있습니다. SHOW VARIABLES LIKE '%secure%'; secure-file-priv의 현재 값을 확인하십시오. NULL은 내보내기가 금지됨을 의미하므로 설정해야 합니다. Mysql 설치 경로 아래 my.ini 파일에서 경로를 수정하고 설정하세요. 그렇지 않은 경우 다음 구성을 추가하세요.

secure_file_priv=F:/

50w+ 데이터가 빠르게 내보내지는 것을 확인할 수 있습니다. 또한 이 명령문을 작성하여 서버에서 이 파일의 경로를 파악하고 다운로드용으로 패키지할 수도 있습니다.

관련 학습 영상 공유: php 영상 튜토리얼

위 내용은 1분 안에 대량의 PHP 데이터(500,000개 이상)를 Excel로 내보냅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제