0

大きな Excel テーブルをデータベースに解析する必要があります。私はPHPExcelを使用しています。ファイルが大きすぎて一度にインポートできず、最大実行時間とメモリ制限に対処する必要があります。

そのため、システムは次のように機能します。オペレータがブラウザでファイルをアップロードすると、ファイル全体が解析されるまで、インポート スクリプトが何度も実行されます。PHP スクリプトは、Excel ファイルの一部のみをインポートし、値を返します。まだ解析されていない行がある場合 - スクリプトは AJAX によって再度実行されます。

このタスクをcronに移動したいのですが、ジョブが完了するまでスクリプトを何回実行する必要があるかわからないため、方法がわかりません。

スクリプトが完了するまでスクリプトを何度も実行する方法はありますが、ブラウザで処理する必要はありません(AJAX、リロードなど)。

4

3 に答える 3

0

この種のことを使用して、x分ごとにジョブを継続的に実行してみませんか:

Check if there are any files neededing parsed
If NO
    exit
else 
    Parse X number of rows from where we left off, 
    keeping track of where we are upto.

スクリプトはバックグラウンド チェックで問題なく実行され、何かすることがなければ終了します。

于 2013-02-11T11:57:38.647 に答える
0

exec() は、あなたが探していることをしません。メモリと寿命の制限を 1 つの設定で克服できます

memory_limit = -1
max_execution_time = 0

とにかく、CLI PHPの実行時間は無制限です-前述のように。

アップロードされたすべてのファイルを作業ディレクトリに置き、毎分cronスクリプトを実行して未処理のファイルを処理します(1回、またはNtimeですが、それは必要ありません...)。Cron PHP スクリプトは、完了時 (および複数のプロセスがある場合はファイルの処理を開始したとき) にファイルにアクセスできるため、どのファイルが完了した (または別のプロセスによって使用されている) かがわかります。AJAX エンドポイントは、そのフラグ ファイルなどの存在をテストして、クライアントに通知できます。

于 2013-02-11T11:18:27.667 に答える
0

バックグラウンドで実行するスクリプトを作成します。exec 関数を使用します。以下のマニュアルを参照してください

http://php.net/manual/en/function.exec.php

于 2013-02-11T10:37:11.523 に答える