2014-09-09 4 views
1

여러 번 발견했습니다. 프론트 엔드 애플리케이션이 PHP로 생성되었습니다. 그것은 엑셀 파일에 MySQL 데이터베이스에서 데이터를 추출 할 수 있습니다. 데이터를 추출 할 때 데이터가 적을 경우 (약 1000 행) 보통 1-2MB의 엑셀 파일을 생성합니다. 더 많은 데이터 (약 100000 행)를 추출 할 때마다 응용 프로그램이 멈추거나 연결 시간이 초과됩니다. php.ini 파일에서 일부 매개 변수를 변경해야합니까? 나는 이것이 메모리 할당 오류라고 생각한다. 변경할 매개 변수가 확실하지 않습니다.데이터를 추출하는 동안 응용 프로그램이 중단됩니다.

+2

연결 시간 :

while ($row = mysql_fetch_assoc($result)) { echo "<td>{$result['firstname']}</td>"; } 

보다 훨씬 낫다 -out은 주로 스크립트가 실행되는 데 시간이 오래 걸리므로 스크립트가 시간 종료되었습니다. – Naruto

+0

하지만이 오류는 단지 내가 얻은 오류 중 하나입니다 ... 대부분의 경우 응용 프로그램이 완벽하게 작동합니다. 하지만 더 많은 데이터를 추출 할 수는 없습니다. 응용 프로그램이 응답하지 않습니다. – mb1987

+1

이것은 서버가 아닌 [명령 줄] (http://www.php-cli.com/)에서 수행해야하는 것처럼 들립니다. (명령 줄에서 PHP 스크립트를 실행하면 시간 제한이 없습니다) –

답변

0

PHP의 출력 버퍼를 살펴보십시오. 데이터를 사용할 수있게되면 보낼 수 있습니다.

참조 이것

봐 : http://php.net/manual/en/function.ob-start.php이 예로 http://www.andrew-kirkpatrick.com/2013/08/output-csv-straight-to-browser-using-php/

편집 : 그냥 생각, 당신은 (경우에이 문제가 여기에) 데이터베이스의 상태를 모니터링 할 수 있습니다. 귀하의 MySQL 클라이언트에서이 명령을 show processlist;을 반복적으로 실행하여 DB가 어떤 상태인지 확인할 수 있습니다. 쿼리가 성공적으로 완료된 후 스크립트가 시간 초과되면 장기 실행 쿼리를 배제 할 수 있습니다.

또한 메모리가 염려되면 모든 데이터를 하나의 변수에 넣으면 안됩니다. . 코드를 보는 것은 정말 당신이 당신이 정보를 얻을로 밖으로 쓰는 일을해야 도움이 있지만, 기본적으로의 라인을 따라 뭔가 것 :

$rows = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    $rows[] = $row; 
} 
+1

감사합니다. ajacian81이 정말로 도움이되었습니다. 프런트 엔드 코드를 지금 보게 될 것입니다. – mb1987

+0

내가 알아챈 또 하나의 사실은이 오류가 Excel에서 추출 할 때 발생한다는 것입니다 2007 (.xlsx) 형식. 나는 그것을 (.csv) 형식으로 추출하도록 변경했다. – mb1987

관련 문제