2017-01-18 2 views
-2

レポートWebサイトのテーブルでDataTables Server Side処理を使用しています。また、PHPExcelを使用してレポートをExcelにエクスポートしています。私のPHPスクリプトは、ブラウザの細かい作業に表示するためのテーブルを作成するために、私は仕事にPHPExcelスクリプトを取得しようとすると、私のようなメモリエラーの出る:私はそれがerroringだことがわかります他にもPHPスクリプトがサーバーで処理されないのはなぜですか?

enter image description here

私はレポートクライアント側を処理しようとしていたときと同じ場所に、同じエラーが表示されます。だからこそ私はサーバー上でそれをしようとしている。私は周りを探索したが、私はこのような状況については何も見ていない。

私は何を試すことができますか?

EDIT

512へのIまでのメモリが、私は同じエラーを取得しますが、別の場所で:

enter image description here

EDIT 2

これではありません下記の質問の繰り返し。私のサーバには必要なメモリがあり、ブラウザにデータを提示するときにそれが使用されていることがわかります。私がこの問題を抱えているのと同じデータをPHPExcelファイルに送ったときだけです。セルキャッシングで何かを試してみると言われましたが、PHPExcelに関して何があるのか​​分かりません。これを初めて試してみました。私は12,000+の代わりに11に送られる行の数を減らそうと試みてきましたが、まだエラーが出ます。

UPDATE

私は、私はこの問題は非常にテストした後、今あるもののいくつかを知っていると思います。

ブラウザの画面を埋める最初のドローは、画面に必要なものを取り戻すだけです.25から150に始まります。エクスポートしようとしているときに、すべてをプルしようとしています。私が現在持っている最大のレポートは、65000+の行と35の列ですが、私は大きなものを持っています。メモリリミットをini_set('memory_limit', '-1');に更新し、必要なものを使用するようにしました。

これで、300秒(5分)後にタイムアウトしました。私はini_set('MAX_EXECUTION_TIME', 10);でこれを修正しようとしましたが、それは何もしていないようです(私はおそらく、それがセットアップに間違いがあるかもしれません)。

私はPHPExcelライブラリのどのキャッシュメソッドが最も効率的であるかを知る必要があります。私は現在cache_in_memory_gzipを使っていますが、他の人もテストしています。テストを完了すると、別のアップデートや質問に回答します。

+1

PHPが使用できるメモリを増やします。 – Peon

+1

[php値のメモリリミットの増加]の可能な複製(http://stackoverflow.com/questions/22486805/increasing-php-value-memory-limit) – giorgio

+0

PHPのavailabelメモリを増やすか、PHPExcelの必要性を減らすセルキャッシング –

答えて

0

私の問題が見つかりました。元のajaxリクエストからソートとフィルタ条件を正しく保存していないため、画面に表示されていた制限付きの結果セットではなく、サーバテーブルのすべてのデータが返されていました。私はこのようなクッキーを設定しようとしていたsetcookie("KeepPost",$PostKept,time() + (60*60*24*7));。しかし、ブラウザのクッキーに格納できるものには限界(4097MB)があることを発見しました。私はそれを超えていた、私がテストしていたものは7800メガバイト+だったので、私はクッキーを設定することができませんでした。これは、私のPHPファイルには、フィルタなしですべてのデータを引き出していた元のAjaxリクエストを使用していました。私はこれを実現した後、必要な情報をサーバーに送信するようにコードを更新しました。制限がはるかに高いサーバーです。その後、私は使用する準備ができて、それ以外のものはうまく動作するときにそれを取り戻すだけです。ここに私のKeepPost.phpファイルは、今のようになります。今

<?php 

if(isset($_POST['draw'])) 
{ 
    include 'DBConn.php'; 
    //echo "Here"; 
    //print_r($_POST); 
    $KeepPost = $_POST;  
    $KeepPost['length'] = -1; 
    $PostKept = serialize($KeepPost); 
    $TSQL = "UPDATE PostKept set Value = '" .$PostKept. "'"; 
    $sth = $conn->prepare($TSQL); 
    //print_r($sth); 
    $sth->execute(); 
} 

function Convert_From_Array($array) 
{ 
    echo serialize($array); 
} 
?> 

私は戻って、私はせずにExcelファイルを作成し、それをクライアントにダウンロードすることができるよ150K +行をプルするつもりはないよということ問題(約30秒しかかかりません)。

関連する問題