重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

100件くらいのキーワードを一つずつAPIに投げて、帰ってきたデータを1レコードずつDBに入れたいと考えています。
1キーワードに付き帰ってくるレコードが2万件くらいあって、普通に組んだだけではタイムアウトしてしまいます。
非同期処理も考えたのですがexecやPHPのオプションなどをいじくるのはサーバの制約でできなそうです。
普通こういうときはどうするのが一般的なのでしょうか。
(そもそもPHPで組まないのか・・・)

あと、レンサバでcronの設定ができるのですが、cronをPHPを設定した場合って、そのプログラムの動作時間はやはりmax_execution_timeが最大になってしまうのでしょうか。

よろしくおねがいします。

A 回答 (2件)

画面で受けた命令をキューに入れ、cron 起動のバッチでキューを読み取って実行し、完了したら画面で告知しては如何でしょう



実装例:

//server/do.php
PHP でテーブル「命令キュー」に挿入する
HTTP 303 を返し wait.html を表示させる

//server/wait.html?id=12345
「お待ちください」を表示
AJAX で check.php を随時呼び出し、実行結果を確認
完了したなら result.html を表示

//server/check.php?id=12345
PHP でテーブル「命令キュー」が完了しているか確認
応答は AJAX で使いやすい JSON 形式で

//server/result.html?id=12345
「完了しました」を表示

$APP_HOME/queue_processer.php
cron で起動するバッチ
テーブル「命令キュー」を読み出し、命令が有れば遂行し、完了済みにテーブルを更新
PHP のバッチ起動の場合、max_execution_time の制限はなくなるはずです。
    • good
    • 0
この回答へのお礼

なるほど、私そんなにスキル高くないのでよくわかりませんが(笑)
画面でという発想はなかったです。
iMacrosみたいなブラウザ型のスクリプトでもいいかもしれません。

ちょっと採用するか微妙ですが参考になりました。
ありがとうございました。

お礼日時:2017/10/13 13:53

2段階でやってみては?


まずクローラなどでデータをファイルに落とす
ファイルからPHPでDBに取り込む
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!