2016-06-27 5 views
1

テーブルから値を編集するExcelファイル(約5000〜8000行& 32 cols)があります。私はこれを正常に実行しましたが、スクリプトの平均実行時間を短縮したいと考えています。

私はロードされたオブジェクトをセッションに保存し、毎回リロードする代わりにスクリプトが実行されるたびに存在するかどうかを確認しました。

if (!isset($_SESSION['col10Read'])) 
{ 
    global $sheet; 
    $objPHPExcel = $objReader->load($inputFileName); 
    $_SESSION['col10Read'] = $objPHPExcel; 
    $sheet = $objPHPExcel->getActiveSheet(); 
} 
else 
{ 
    global $sheet; 
    $sheet = $_SESSION['col10Read']->getActiveSheet(); 
} 

が、私は(私のセッション変数が存在する)最初の時間の後に、コードを実行すると、私はこのエラーを取得する:

致命的なエラー:メッセージ「あなたの要求されたシートでキャッチされない例外「PHPExcel_Exception」インデックス:0は範囲外です。実際のシート枚数は0枚です。

私は一日差別化を図ってきました。無限にGoogleを検索しました。

+0

オブジェクトをセッション内に入れても、何も高速化されません。 –

+0

これは、$ _SESSION変数に入れる非常に大きなオブジェクトです。 PHPがセッションデータ用にtmpフォルダを使用している場合、ディスク容量が足りなくなる可能性があります。 –

+0

@BenHillier私はこれらのすべての問題を考えたので、今は1つの列だけをロードしています。したがってオブジェクトのサイズは約40MBです。それでも大きすぎます。 –

答えて

1

$_SESSION作品serializing渡されたオブジェクト。すべてのクラスがシリアライズされるように設計されているわけではなく、保存しているオブジェクトのタイプがその中にあるように見えます。このような問題を解決する最も簡単な方法は、オブジェクト自体を格納せずにオブジェクトの状態を復元するための十分な情報を格納することです。たとえば、ファイル名と行を格納することができます。これはおそらくあなたが避けようとしていたものだと認識していますが、残念ながら、使用しているフレームワークは実装しようとしている最適化用に設計されていません。

+0

私はあなたの答えをありがとう、私は今、カスタムセッションハンドラを書くしようとします。 –

関連する問題