プロが教えるわが家の防犯対策術!

過去の質問や他サイトを参考にしても実行できなかったので、ここに質問させていただきます。

cakePHPを用いてa.ctpからb.ctpにredirectする処理の裏で別の処理を実行させるという、いわゆる非同期処理を試しています。
具体的に言うと、DBを更新する処理を書いたhoge.phpを外部ファイル実行しているものです。

その外部ファイル実行時のコマンドで悩んでいます。
「exec("php C:/hoge/hoge.php > /dev/null 2>&1")」  や
「popen('start /B cmd /c "C:/pleiades/xampp/php.exe C:/hoge/hoge.php > /dev/null 2>&1"',"r")」
などいくつか試してみたのですが実行されていません。
DB更新処理自体は、hoge.phpを単体で動かして動作確認が取れたので問題無しと考えます。


質問としては、
・execないしpopenのコマンドの書き方はこれでいいのか。
・そもそも外部ファイル(hoge.php)は上記のように自由な場所に置いていいのか。
となります。

どうかご教授ください。
よろしくお願いいたします。

A 回答 (1件)

> hoge.phpを単体で動かして動作確認が取れたので問題無しと考えます



本当に問題無いのでしょうか?
私はwindows上でPHPを動かしたことが無いので分かりませんが・・
Linuxではコマンドを実行するのにユーザーの権限が必要になります。コマンドラインで実行するユーザーとapacheのユーザーは大抵の場合別なので、コマンドラインで実行できた=execが通るなど断言できません。というよりもむしろ動かないほうが多いです。
windows上だとどうなるのか知りませんが、少なくてもexecコマンドで呼び出すPHPの中でログをはき出すなど動作確認すべきでは?


また、
> DBを更新する処理を書いたhoge.phpを外部ファイル実行

cakePHPでもDBは更新できますが、なぜわざわざフレームワーク外にあるPHPで更新させる必要があるのでしょう?


>・execないしpopenのコマンドの書き方はこれでいいのか。

popenは使ったことが無いので分かりませんが、execコマンドに関してはcakeだろうが素のPHPだろうが同じです。フレームワークに依存しない処理なので関係ありません。

>・そもそも外部ファイル(hoge.php)は上記のように自由な場所に置いていいのか。

Windowsは知りませんがLinuxであれば「自由な場所」にPHPを置くことは出来ません。
アクセス権限があるディレクトリ以下に配置するのがセオリーでしょう。
また、cakeの中に置くのであれば/vendorsか/app/vendorsに置くのがセオリーです。
    • good
    • 0

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