2

PHPExcelライブラリを使用してExcelファイルをエクスポートしようとしています。約400件のレコードをエクスポートできます。ただし、約600レコードを超えると、nginxタイムアウトエラーが表示されます。私はこの問題を解決しようとしています。誰かがこれを解決する方法を知っていますか?

これまでのところ、次のようなphpオプションで遊んでいます。set_time_limit(0); およびini_set('memory_limit'、'-1');

しかし、それでも解決できません。

助けてください。前もって感謝します。

返信ありがとうございます。サーバー会社に連絡したところ、fastcgi_read_timeout360が追加されたとのことでした。nginx設定に。そしてそれは今動作します。

ただし、ダウンロードの開始は非常に遅くなります。PHPExcelライブラリのせいだと思います。誰かが私がそれをより速く応答させる方法を提案できますか?

4

2 に答える 2

2

あなたのコードを見ることからのほんの少しの簡単な観察:

$objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1);

foreach()ループの反復ごとに繰り返す、コストのかかる操作です(ワークシート内のデータの量が増えると、コストも高くなります)。必要な行数を数え、ループする前にその数の新しい行を挿入します。

あなたが書いているすべてのセルに対して、あなたは以下を使用しています:

$objPHPExcel->getActiveSheet()->...

これには、すべてのセルに対してワークブックのgetActiveSheet()メソッドを呼び出す必要があります。ループの前にこれを1回実行し、返されたワークシートを変数($ wsなど)に保存してから、

$ws->setCellValue()

セルの値を設定します。

または流暢なインターフェースを使用します。

$objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $first_line)
    ->setCellValue('B'.$row, ucwords($dataRow['intlcode']))
    ->setCellValue('C'.$row, ucwords($dataRow['mobile_number']))
    ->setCellValue('D'.$row, ucwords($dataRow['r_datetime']))
    ->setCellValue('E'.$row, $dataRow['fname'])
    ->setCellValue('F'.$row, $dataRow['lname'])
    ->setCellValue('G'.$row, $dataRow['email'])
    ->setCellValue('H'.$row, $dataRow['picture'])
    ->setCellValue('I'.$row, $dataRow['lang'])
    ->setCellValue('J'.$row, $dataRow['interests'])
    ->setCellValue('K'.$row, $dataRow['title'])
    ->setCellValue('L'.$row, $dataRow['company'])
    ->setCellValue('M'.$row, $dataRow['address'])
    ->setCellValue('N'.$row, $dataRow['app_status']);

fromArray()メソッドを使用して、1回の呼び出しで行のすべてのセルを設定できるとさらに便利です。

$objPHPExcel->getActiveSheet()->fromArray($dataRow,NULL,'B'.$row);
于 2012-07-25T11:27:12.477 に答える
2

Nginx エラーのため、nginx の設定を変更

proxy_read_timeout

于 2012-07-24T11:35:34.450 に答える