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

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

よろしくお願いします

A 回答 (3件)

戻り値を得る必要がないならOSごとのバックグラウンド処理にまかせればよいのでは?



UNIX系なら「コマンド &」、Win系なら「cmd /C コマンド」のような・・・

この回答への補足

Linux+apache+php+postgresqlで行います

PHPでユーザからのリクエストに応じて実行プログラムを実行して
その結果をPostgresqlに記述して
PHPでその内容をユーザが要求したときに見せるということをしたいのです

単にプログラムを実行してその結果を自分が知るということは常にやっていますが
そういうことではないのです
ウェブアプリの重い部分を高速化のためC言語で作ったコマンドに肩代わりさせたいのです

補足日時:2011/09/06 11:49
    • good
    • 0

それと、本当にそれが速いのか、詳しく調査した方がいいですよ。


外部プログラムを呼び出すコストって結構ばかになりません。下手すると、Cで書いて短くなった時間よりも、プログラム呼び出すための時間の方長いってことがあります。
    • good
    • 0
この回答へのお礼

ありがとうございます

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

お礼日時:2011/09/06 20:25

No.1さんの通り、systemやexecやpassthruは シェル上でコマンドを実行しているのと同じなので、


バックグランド実行させたいなら、プラットフォームがLinuxならLinuxのコマンドの流儀通り
system("/パス/コマンド 引数 &");
または
exec("~  &");
または
passthru("~ &");
となります。

ちなみに、このままだと実行権限がhttpdのオーナー(通常apache)での実行になりますが、
実行権限も変えたいときは事前にsudoers(詳細省略)を設定しておいて
system("sudo -u user名 /パス/コマンド >> /パス/ログファイル &");
という感じです。
    • good
    • 0
この回答へのお礼

ありがとうございます

やってみたいと思います

お礼日時:2011/09/06 17:44

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