【PHP】exec 重い処理をバックグラウンドで実行|Blog|株式会社トライム

Keyword

Contact

についての不明点や案件のご相談などございましたらお気軽にお問い合わせください。

Share

X Facebook pocket LINE はてなブックマーク

【PHP】exec 重い処理をバックグラウンドで実行

2017.07.18

閲覧者に負担をかけないために

PHPで重い処理を行う際にバックグラウンドで実行したい場合があります。
例えばAPIの取得で大容量の通信が発生する時などです。

そのまま処理が進むと閲覧者のパケットが大変な事になります。
またアクセスから表示までの時間も長くなり離脱の原因にもなってしまいます。

そこで exec を用いて閲覧者に負担を書けないようにバックグラウンドで処理を行います。

サンプル

サンプルではバックグラウンドでテキストファイルを作成してみます。
この処理自体は大したものではありませんが、
バックグラウンドで動いていることが理解しやすいかと思います。

index.php

<?php

  $cmd = 'nohup php exec.php > /dev/null &';
  exec($cmd);

exec.php

<?php

  $file = 'test.txt';
  $text = 'バックグラウンド処理成功';
  file_put_contents( $file, $text );

index.phpにアクセスすると同階層に test.txt が作成されます。

変数を渡す

外部ファイルに変数を渡したい場合は下記のようにします。
配列は渡せないので implode を使用して一旦テキストにするなど工夫が必要です。

index.php

<?php

  $val1 = '値1';
  $val2 = '値2';
  $val3 = '値3';
 
  $cmd = 'nohup php exec.php ' . $val1 .' '. $val2 .' '. $val3 .' > /dev/null &';
  exec($cmd);

exec.php

<?php

  $val1 = $argv[1];
  $val2 = $argv[2];
  $val3 = $argv[3];

  $file = 'test.txt';
  $text = val1 . $val2 . $val3;
  file_put_contents( $file, $text );

まとめ

通常はファイルを生成するPHPをcronに登録しておけば、
一定時間ごとにファイルを作り直してくれます。

しかし閲覧時のページの情報をJSで取得してPHPに渡す必要があり、
どうしてもアクセス時にファイル生成プログラムを動かしたくて
このような方法をとってみました。

Share

X Facebook pocket LINE はてなブックマーク
Webサイト制作についてお悩みでしたら私たちにご相談ください。

私たちはECサイトなどのBtoCのサイトの制作に特化したWeb制作会社です。マーケティング視点をもったクリエイティブにより、運用まで見据えた効果の高いWebサイトを構築いたします。Webサイトについてお悩みのWeb担当者の方は、トライムまでお気軽にご相談ください。

Keyword

Contact

についての不明点や案件のご相談などございましたらお気軽にお問い合わせください。

Contact

お問い合わせ

トライムは常にお客様へ寄りっ沿った提案をさせていただきます。
自社のEC売上の拡大や人材不足などのお客様のデジタル上の課題を、
様々なアプローチにより解決するお手伝いをいたします!
お気軽にお問い合わせください。

TEL

03-6403-3259

受付:10:00 - 19:00