• 締切済み

.forwardを利用した、メールをトリガーにするPHPの起動について

初めて質問させていただきます。 初めてなので、質問の仕方にも不手際があるかもしれませんが ご容赦ください。 サーバーはWEBアリーナさんのをお借りしています(webarenasuite2) メールはPostfixで受信しています。 <<目的>> メールの受信をトリガーにしてPHPプログラムを起動させようとしております。最終的にはメールの本文などのDBに取り込もうとしていますが、とりあえずプログラムを起動できるかを確認したかったのでメールの内容などは関係なくDBに適当な名前のテーブルを作成するようなプログラムになっています。 <<症状>> 対象のメールアドレスにメールを送ると、エラーメッセージなどは一切返ってきません。が、望む動作も一切しません。 直接test.phpをブラウザで動かすと、DBにテーブルを作成します(望んだ動きです)。 おそらくtest.phpを.forward経由で動かせていないのだろうと思いますが、その理由がわかりません。 自分が確認したことを以下に記します。 (1).forwardの置き場所 プログラム起動ではなく、メール転送の記述を行い、メールの転送が行われることを確認しました。.forwardの置き場所は間違えていないかと思います。 (2).forwardのパスの確認 .forwardには以下の記述がしてあります。 |"/usr/bin/php -q /home/*****/web/test.php" phpが/usr/bin/phpなのはおそらく間違いないかと思います。 また、絶対パスの指定はtest.phpにrealpathの記述を書いて 確かめました。 (3)パーミッションの確認 .forwardは600 test.php自体や、その上の階層のwebや*****、homeなどもパーミッションも実行権限を与えてみました。755などになっています。 以上です。 2日以上詰まってしまいました。 お手数をおかけしますが、お手すきの方がいらっしゃいましたら、よろしくおねがいします。

みんなの回答

回答No.3

ANo.1の回答にあるエラーメッセージの fatal: execvp /user/bin/php: No such file or directory がコピー&ペーストなら は/userでなく/usrを指定してみた結果が知りたいです。

suyaman
質問者

補足

お返事がおくれました。 誤記していたようです。 usrでやったところ、メールログには status=deferred (Command died with signal 7: "/usr/bin/php -q /home/darts/***/test.php") と表示されています。

回答No.2

>ちなみに/usr/bin/phpの状態でのメールのlogは >fatal: execvp /user/bin/php: No such file or directory >となっていて、ファイルがないといわれています。 改行コードが「CR+LF」になっていませんか? UNIX系の改行コードは「LF」のため改行コードに「CR+LF」を使用していると パスが「/user/bin/php[CR]」と解釈されてファイルが見つからないと いうエラーがでることがよくあります。

suyaman
質問者

補足

回答をいただきありがとうございます。 改行コードの確認を行いました。 実際にCR+LFになっていたので、喜びいさんでLFにかえたのですが やはり同じ内容でした。 phpの場所で悩んでいたのですが findではなくwhereisでphpを叩くと usr/bin/phpだったので、おそらくこちらで正しいのかなぁと思っています。 その後、phpファイルを介在させるとおかしくなるのかと思い forwardファイルの中身をコマンドに替えてみました。 内容は |"touch /hoge" というものです。 エラーメールが返ってきて Command died with status 1: "touch /hoge". Command output: touch: cannot touch `/hoge': Permission denied ということでした。 やはり、メールからパイプされて、このコマンドなりphpを動かす権限の問題だとは思うのですが・・・

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

ブラウザ経由ではなく、コンソール経由でphpをたたくと動きますか?

suyaman
質問者

補足

ご回答いただきありがとうございます。 puttyを利用してログインしていますが、 直接phpを叩いても動かすことが出来ます。 (テーブルが作成されます。) printでsql文を吐き出させていますが、それも表示されます。 コンソールでfind -name phpを叩いたところ /usr/bin/php以外に/var/lib/phpという表示が出てきたので 今そっちで試してみています。 /var/lib/phpにするとエラーメールが返ってくるようになりました。 内容としては Command died with status 1: "/var/lib/php -q /home/***/web/test.php" という内容です。 実行権限の問題であるという記述をgoogle先生経由で見つけたので postfixの設定かと思い、main.cfの default_privsをnobodyからユーザの名前に変えてみました。 このユーザはtest.phpを作成したユーザです。 それでも同じエラーを吐き出します。 /var/lib/phpに設定した状態でメールのlogを見ると execvp /var/lib/php: Permission denied となっているので、どこかの実行権限がおかしいのだと思うのですが・・・ ちなみに/usr/bin/phpの状態でのメールのlogは fatal: execvp /user/bin/php: No such file or directory となっていて、ファイルがないといわれています。 どんどんこんがらかっております。。。

関連するQ&A