【コピペで使える】PHPプログラムをバックグラウンドで実行する方法

集計処理やファイルの生成などPHPで重い処理を行う場合、Webブラウザ上の実行(HTTPリクエスト)だとタイムアウト時間の制限にひっかかって処理が途中で終了してしまうことがあります。

ファイル生成をアウトプットとした処理の場合には、必ずしもWebブラウザ上で実行する必要はありませんので、こういった場合にはバックグラウンドでPHPを実行する方法がお勧めです。

例えばWebブラウザ上でボタンを押すと集計プログラムをバックグラウンド上で実行するようにしておけばよいでしょう。

今回はこの方法について紹介をしたいと思います。
 

PHPのバックグラウンド実行(run.php)


$cmd = 'nohup php sample.php [引数1] [引数2] > /dev/null &';
exec($cmd);

PHPをバックグラウンドで実行する書き方は上記の通りです。これで[引数1]と[引数2]を渡した状態でsample.phpを実行します。(sample.phpは実際に実行するPHPファイル名に書き換えてください。)

Webアプリケーション上で上記を記述しておけばあとの処理はWebサーバーのバックグラウンドで走りますので、ブラウザを閉じても処理は継続します。

ここで引数を受け取る場合は通常の引数$_GETなどでOKです。
 

PHPプログラムでの引数の受け取り方(sample.php)


echo $argv[1]; // 引数1
echo $argv[2]; // 引数2

バックグラウンド処理用のPHPプログラムに渡された引数は上記のように$argv[*]で受け取ることができます。

LinuxのPHPコマンドで指定された引数を受け取るときにはこのように書くことになります。
 

Linuxでのプロセスの確認方法


$ ps -ef

Linuxでちゃんとバックグラウンド処理が走っているかどうか確認するには上記コマンドを使います。
 

Webページ上での実行方法


<a href="#" onclick="runPhp(a, b);return false;">バックグラウンド処理実行</a>

<script><!--
function runPhp(a, b){

  alert('処理を実行します。');

    SendHttpRequest('a='+a+'&b='+b, 'POST', './run.php', function() {
      if(this.responseText){}
    }, true);

}
--></script>

Webページ上での実行に関してはAjaxで実行が無駄なページ遷移をしなくて済むためお勧めです。

※上記記述はAjaxのライブラリが必要になりますのであくまで参考として記載しておきます。

投稿者プロフィール

たーさん代表者
東海大学工学部を卒業後、東芝情報システム株式会社(旧グループ会社含む)に入社。半導体(SRAM)の開発チームにて、Unix環境でのPerlを用いた業務自動化プログラムの開発など、エンジニアとしての確かな基礎と緻密な論理的思考力を培う。

その後、東証上場企業である株式会社ザッパラスへ。Web・モバイルの最前線で、数多くのユーザーに愛されるコンテンツ制作業務に従事。ここで「ユーザー目線に立った魅力的なWebコンテンツの企画・制作ノウハウ」を深く学ぶ。

開発・システム側から見た「堅牢なロジック」と、制作・ユーザー側から見た「伝わるコンテンツ」の双方を実務で経験した強みを活かし、フリーランスとして独立。

現在は、ウイングアーク1st株式会社の「データのじかん」運営チームに参画するなど、大手・中小企業のWeb運営・開発パートナーとして活動。完全在宅でありながら、固定IPの完備や厳格なセキュリティポリシーの遵守を徹底し、企業のインフラや本番環境を安全に支える「チームの一員」として高い信頼を得ています。

見た目の美しさはもちろんのこと、内部の構造やWordPressのカスタマイズ、運用・セキュリティまでを見据えた、技術的バックボーンのある高品質なWebサイト・システム制作をワンストップでご提供しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA