2011-07-28 19 views
0

私はこのhttp://phpexcel.codeplex.com/を使ってエクセルにエクスポートします。Excelで問題が発生する

11000 - 65000行... をエクスポートする必要がありますが、このブラウザを実行しようとするとハングアップします。 エラーやその他のメッセージで応答しません。そのリクエストが進行中であることを示すだけです。

topは、apacheが作業を終了したことを示しています。 でも、Apacheのログによれば、すべて完了:

x.x.x.x - - [28/Jul/2011:12:28:38 +0300] "POST /doctor/lab/statistic/ HTTP/1.1" 200 2773504 "http://x.x.x.x:82/doctor/lab/statistic/" "Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0" 

まだ結果はありません。

システム:

Linux Eearth 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 i686 
PHP Version 5.3.5 
Apache/2.2.15 (Linux/SUSE) 

ので、私は、こののようにファイルにデータを保存しようとした1

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.$filename.'.xls"'); 
header('Cache-Control: max-age=0'); 
$writer = PHPExcel_IOFactory::createWriter($xls, 'Excel5'); 
$writer->save('php://output'); 
exit; 

EDIT 2

質問

EDIT私はこれを行う場合ファイルサイズの2.7メガバイトの はその後:

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.$filename.'.xls"'); 
header('Cache-Control: max-age=0'); 
include 'test.xls'; 
exit; 

ダウンロードはすぐに開始します...

+0

exitを削除してみます。コマンド – Trefex

+0

@Trefexこのコードはフレームワークの一部です。もし私が出口を取り除くなら、他の多くのデータが添付されていて、これは解決策だとは思わない。 – Subdigger

答えて

1

をそれはあなたのウェブサーバがエラーメッセージを放出されていない可能性がありますので、私はあなたのerror.logファイルをチェックすると言うだろう(/ var/log/apache2などにぶら下がっているはずです)。一時ファイルに書き込めないような些細なことかもしれません。

これがデッドエンドと判明した場合は、プログラムでecho文を使用してCSVファイルを作成することを検討してください。

CSVを生成するには、[編集]

は、出力あなたの列のヘッダーを次に

header('Content-Type: text/comma-separated-values); 
header('Content-Disposition:attachment;filename="'.$filename.'.csv"'); 
header('Cache-Control: max-age=0'); 

あなたのヘッダーを行います

新しい行が続く
echo "col1,col2,col3,col4,..." 

。そして、出力データ:

while(/*Still got some rows*/) { 
    echo $row[0] . "," .$row[1] "," + ... 
} 

が見有無:http://en.wikipedia.org/wiki/Comma-separated_valuesを、それは本当に単純なファイル形式だとExcelが難なくそれを開きます。

私が考えていなかったもう一つのことは、Windowsサーバーにアクセスできる場合、COM相互運用機能を介して直接Excelファイルを作成できることです。

+0

1.上記のように、サーバーは彼(サーバー)が正しく仕事をしたと言って(error_log空)、要求されたすべてのデータを返す。 2.送信するだけの一時ファイルの書き込みはありません。上記のedit1を参照してください – Subdigger

+0

出力を送信する** flush()**を試してください。おそらく** exit; **は結果が送信される前にスクリプトを強制終了しています... – struct

+0

あなたは正しいでしょう... there ob_start存在する。 – Subdigger

関連する問題