データベースにインポートする必要のあるサービスを経由してくるCSVファイルを格納できるディレクトリがあります。これらのCSVファイルはそれぞれ1000行で、10〜150ファイルにすることができます。PHPを別のプロセスで長時間実行する
これらのすべてのCSVファイルのデータをデータベースに挿入します。問題は、私がset_time_limit(0)
を使用しても、サーバ(siteground.com)がその制限を課すため、タイムアウトの問題でPHPが動作しなくなることです。
// just in case even though console script should not have problem
ini_set('memory_limit', '-1');
ini_set('max_input_time', '-1');
ini_set('max_execution_time', '0');
set_time_limit(0);
ignore_user_abort(1);
///////////////////////////////////////////////////////////////////
function getRow()
{
$files = glob('someFolder/*.csv');
foreach ($files as $csvFile) {
$fh = fopen($csvFile, 'r');
$count = 0;
while ($row = fgetcsv($fh)) {
$count++;
// skip header
if ($count === 1) {
continue;
}
// make sure count of header and actual row is same
if (count($this->headerRow) !== count($row)) {
continue;
}
$rowWithHeader = array_combine($this->headerRow, $row);
yield $rowWithHeader;
}
}
}
foreach(getRow() as $row) {
// fix row
// now insert in database
}
これはコマンドartisan
を介して実行実際には(私はLaravelを使用しています):ここではコードです。 CLIには時間制限がないことがわかっていますが、何らかの理由ですべてのCSVファイルがインポートされず、特定の時点でプロセスが終了するわけではありません。
私の質問は、ディレクトリにあるCSVファイルごとに別々のPHPプロセスを呼び出す方法ですか?またはこれを行う他の方法は、PHPのgenerator,
などのような問題なしですべてのCSVファイルをインポートすることができる
に各
.csv
ファイルのスクリプトを実行します時間を過ごすことができます。 CLIを介してPHPを実行するだけでも役に立ちません。彼はただそのプロセスを殺すことができます。 –リモートデータベースに接続しているときにlocalhostからPHPスクリプトを実行してみませんか?ローカルでは、スクリプトの時間制限を設定することはできません。 –
@RobertTrzebiński:それは実際にサーバー上で実行する必要があります。 – dev02