- ベストアンサー
PHPでexecやpassthruすると
execやpassthruで実行した実行プログラムが終了するまで待たされると思いますが バックグラウンドで実行する方法はあるでしょうか? PHPはその行で止まらずに実行プログラムとは別に以降の行を実行するということです 要するにexecは実行プログラム実行のトリガーをかけるだけにしたいのです もしあったら具体的に数行以下のコードで教えてください よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
戻り値を得る必要がないならOSごとのバックグラウンド処理にまかせればよいのでは? UNIX系なら「コマンド &」、Win系なら「cmd /C コマンド」のような・・・
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
それと、本当にそれが速いのか、詳しく調査した方がいいですよ。 外部プログラムを呼び出すコストって結構ばかになりません。下手すると、Cで書いて短くなった時間よりも、プログラム呼び出すための時間の方長いってことがあります。
お礼
ありがとうございます 一回の呼び出しで重いプログラムを実行するので 呼び出しのコストは吸収されると思います とにかく念のため時間計測も行ってみたいと思います
- superside0
- ベストアンサー率64% (461/711)
No.1さんの通り、systemやexecやpassthruは シェル上でコマンドを実行しているのと同じなので、 バックグランド実行させたいなら、プラットフォームがLinuxならLinuxのコマンドの流儀通り system("/パス/コマンド 引数 &"); または exec("~ &"); または passthru("~ &"); となります。 ちなみに、このままだと実行権限がhttpdのオーナー(通常apache)での実行になりますが、 実行権限も変えたいときは事前にsudoers(詳細省略)を設定しておいて system("sudo -u user名 /パス/コマンド >> /パス/ログファイル &"); という感じです。
お礼
ありがとうございます やってみたいと思います
補足
Linux+apache+php+postgresqlで行います PHPでユーザからのリクエストに応じて実行プログラムを実行して その結果をPostgresqlに記述して PHPでその内容をユーザが要求したときに見せるということをしたいのです 単にプログラムを実行してその結果を自分が知るということは常にやっていますが そういうことではないのです ウェブアプリの重い部分を高速化のためC言語で作ったコマンドに肩代わりさせたいのです