• 締切済み

[cakePHP]外部ファイルの実行方法

過去の質問や他サイトを参考にしても実行できなかったので、ここに質問させていただきます。 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)は上記のように自由な場所に置いていいのか。 となります。 どうかご教授ください。 よろしくお願いいたします。

みんなの回答

  • foreach
  • ベストアンサー率51% (43/84)
回答No.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に置くのがセオリーです。

関連するQ&A