• ベストアンサー

PHPでexecやpassthruすると

execやpassthruで実行した実行プログラムが終了するまで待たされると思いますが バックグラウンドで実行する方法はあるでしょうか? PHPはその行で止まらずに実行プログラムとは別に以降の行を実行するということです 要するにexecは実行プログラム実行のトリガーをかけるだけにしたいのです もしあったら具体的に数行以下のコードで教えてください よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

戻り値を得る必要がないならOSごとのバックグラウンド処理にまかせればよいのでは? UNIX系なら「コマンド &」、Win系なら「cmd /C コマンド」のような・・・

reiman
質問者

補足

Linux+apache+php+postgresqlで行います PHPでユーザからのリクエストに応じて実行プログラムを実行して その結果をPostgresqlに記述して PHPでその内容をユーザが要求したときに見せるということをしたいのです 単にプログラムを実行してその結果を自分が知るということは常にやっていますが そういうことではないのです ウェブアプリの重い部分を高速化のためC言語で作ったコマンドに肩代わりさせたいのです

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

それと、本当にそれが速いのか、詳しく調査した方がいいですよ。 外部プログラムを呼び出すコストって結構ばかになりません。下手すると、Cで書いて短くなった時間よりも、プログラム呼び出すための時間の方長いってことがあります。

reiman
質問者

お礼

ありがとうございます 一回の呼び出しで重いプログラムを実行するので 呼び出しのコストは吸収されると思います とにかく念のため時間計測も行ってみたいと思います

回答No.2

No.1さんの通り、systemやexecやpassthruは シェル上でコマンドを実行しているのと同じなので、 バックグランド実行させたいなら、プラットフォームがLinuxならLinuxのコマンドの流儀通り system("/パス/コマンド 引数 &"); または exec("~  &"); または passthru("~ &"); となります。 ちなみに、このままだと実行権限がhttpdのオーナー(通常apache)での実行になりますが、 実行権限も変えたいときは事前にsudoers(詳細省略)を設定しておいて system("sudo -u user名 /パス/コマンド >> /パス/ログファイル &"); という感じです。

reiman
質問者

お礼

ありがとうございます やってみたいと思います