• 締切済み

.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

  • メールをトリガーにPHPを自動起動したい

    PHPでも聞いてみたのですが、考えてみるとPHPと言うよりもLinuxのほうかもしれないということでお願いいたします 空メールの内容をPHPに渡したいと言うことで、いろいろ試してみましたが、なかなかうまくいきません Webminを使ってサーバの管理をしています MTAはsendmailを使っています sendmailの/etc/aliases にはこのように記述しました hoge: "|/usr/bin/procmail" /etc/procmailrc にはこのように記述しています PATH=/usr/bin:/bin:/usr/local/bin MAILDIR=/var/spool/mail LOGFILE=/var/www/html/****/procmail.log LOCKFILE=/var/www/html/****/procmail.lock :0 |/var/www/html/****/empty_mail_regist.php 私の考えでは hoge@hoge.comにメールが来る      ↓ sendmailが/usr/bin/procmailの起動      ↓ procmailが/etc/procmailrc を読み込んでプログラム実行 となると思っているのですが間違うでしょうか? /etc/aliases に hoge: "|/var/www/html/***/empty_mail_regist.php" と記述した場合、PHPのエラー(#!/usr/bin/php -q が抜けているなど)の場合はエラーメールが帰ってきます PHPにアクセスはしているが実行できていない理由がわかりません プログラム的なものだと思い、きめうちでメールを送るスクリプトを書きましたがダメでした もちろん、コマンドラインで実行するとメールの送信はできます スクリプトの所有者とメールアドレスのユーザは別なのでどれがダメなのかと思い、chownでhogeに変更してみましたが変わりはありませんでした 参考にしたサイトはこちらです メール配信時のPHPスクリプト起動(Sendmail編)http://www.dolphy.gr.jp/webap/topic/smrsh.html

  • .forward転送のエラーメールについて

    空メール受信でPHPに転送して自動返信するというシステムを勉強しながらやっています。 いろいろ調べてみたのですが、 postfixの解説は見つけたのですが、 違うパターンのがなかなか見つからないので質問します。 ちなみに現在構築中のレンタルサーバーはRedHatです。 .forwardには転送先のパスを | /home/xxxxx/xxxxx01/www/karamail/kara_mail.php のように入力しました。 そしてkara_mail.phpの先頭には #!/usr/local/bin/php-c と入力。 これで空メールを送信してみると ----- Transcript of session follows ----- 451 4.0.0 putbody: write error: Broken pipe sh: /home/xxxxx/xxxxx01/www/karamail/kara_mail.php: Permission denied 554 5.3.0 unknown mailer error 126 というエラーが返ってきます。 これはやはりパーミッションの設定が間違えているだけなのでしょうか? いろいろ調べていると.forwardの設定だけでは動かないように書いているところが多かったのですが、いったいどうすればいいのか頭の中でごちゃごちゃになってしまいました。 サーバーのRedHatというのもなんだか問題があるような記述もあったり・・ 一応レンタルサーバーに.forwardの設定方法がわからない~と電話したら上のであっていると言われました。 そのあたりについてわかる方もしくは経験者の方いらっしゃいましたら、どうか教えてください。 ちなみにサーバーの知識はこれをするまで全くありませんでした。 初心者に近いです。PHPも勉強中です。。。 どうぞよろしくお願いします。

  • PHPのCLI(コマンドライン)について

    PHPのCLI版について教えていただきたいことがあります。 まず、前提条件として、 OS:Redhat Linux 9.0 PHP:4.4.1 WEB:Apache2.0 MAIL:qmail となっています。 確認事項としてphpのパスを確かめるために、SSHなどのコマンドラインから、 (A)のようにパスを指定して実行した場合、正常に処理できます。 (A) [/ ]# /usr/local/bin/php <?php phpinfo(); ?> 実行→phpinfoの内容が表示される 次に、qmailの転送機能を利用し、受信したメールを自動的に前述の test.phpに渡すとmaillogに以下のようにログが残っています。 delivery 1488: deferral: /bin/sh:  /var/www/sample/test.php:  /usr/local/bin/php :  bad interpreter:  No such file or directory test.phpのパスは正しく設定されており、 [/ ]# /usr/local/bin/php /var/www/sample/test.php とした場合、正しく読み込みます。 また、test.phpの1行目には #!/usr/local/bin/php と記述してあり、もう一台のサーバー(Redhat Linux 2.1AS)では 正しく動いております。 実行できない原因を調べる手段として、 ・この設定を確認 ・このコマンドを実行 など、まず何をチェックすればいいのか 教えていただけると助かります。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールをPHPスクリプトに転送させたい

    コアサーバー(qmail)・独自ドメインで運用しています。 指定したメールアドレスに送信されたメールを、PHPスクリプトに転送させて処理したいと思っています。 「アカウント名\Maildir」と同じ階層に「.mailfilter」というファイルを作り、 to "|/usr/local/bin/php /virtual/user_name/hoge/mail.php" exit と記述したのですがうまくいきませんでした。 PHPのパスは、サポートページに書いてあったので間違ってはいないと思います。 もちろん、mail.phpまでのパスも確認しました。 PHPには、転送されたことが確実にわかるように mb_send_mail("mail_address", "TEST", "OK", "mail_address"); とだけ記述しています。 .mailfilterの書き方がおかしいのか、設置するディレクトリがおかしいのか、そもそもコアサーバーでこのようなことが可能なのか、さっぱりわかりません。 これから、どのようなことを確認・試行すればいいのか教えていただけないでしょうか。 宜しくお願いいたします。 なお、コアサーバーはサポートが悪く、1ヶ月待っても返事が返ってきませんので、こちらで質問させていただきました。

    • ベストアンサー
    • PHP
  • メールをトリガーにPHPを実行したい

    初めまして、メールをトリガーにPHPを実行したいと思い、 下記のように.forwardを書きました。 ドメイン:example.com アカウント:hogehoge メールアドレス:info@hogehoge.example.com \info: "|user/bin/php /home/hogehoge/public_html/index.php" ですが、info@hogehoge.example.comにメールを送信しても実行してくれません。 どのように記述すれば良いのでしょうか? 環境 Linux Root /home/hogehoge Sendmail /usr/sbin/sendmail よろしくお願いします

  • PHPをバージョンアップしたらCRONが動かない

    CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。 PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。 [バージョンアップ内容] CentOSを5.3から5.7にバージョンアップ PHPを5.1.6から5.3.3にバージョンアップ phpMyAdmin3.4.8をインストール MySQL 5.0.77(バージョンアップせず) バージョンアップ前には ・PHPからMySQLにデータを登録するプログラムは動作していた。(ウェブサイト形式で動作確認) ・上記のプログラムはCRONで動いていた。(CRONでも動作確認) PHP5.1.6の時はCRONに下記のように登録していました。 10 * * * * /usr/bin/php /var/cron_file/test_cron.php アップデート後にウェブサイト形式でプログラムが動くことを確認しました(ページを開くと下記のプログラムが動作し、データをMySQLに登録) phpMyAdminも問題なく動きます。 CRONの問題点を探し出すために下記のことを行いました。 CRONのステータスを確認 # /etc/rc.d/init.d/crond status crond (pid 32151) を実行中... CRONをリスタート # /etc/init.d/crond restart crond を停止中: [ OK ] crond を起動中: CRONのエラーの確認 # vi /var/log/cron PHPの場所の確認 # find / -name php /usr/share/php /usr/include/php /usr/bin/php /usr/lib64/php /var/lib/php どれがPHPの場所なのかがわからないので、とりあえず5.1.6の時に指定していた「/usr/bin/php」を採用 このあたりはネットで情報を探して、登録してみたので正しいのかどうかよくわかりません。↓ PATHの記入 (その1) # vi /root/.bash_profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH (その2) #vi /etc/profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH PATHの確認 # env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/php (上記以外にもいろいろいじっていたら、このようになってしまいました。上記以外のところでどこで設定したかがわからないので、PATHを消す方法も教えていただければと思います) 「/usr/kerberos/sbin:/usr/kerberos/bin」はもともとシステムで登録されていたもので、上記で登録した「/sbin:/usr/sbin:/bin:/usr/bin」以外のもの「/usr/bin/php」などはどこで登録したかわからなくなってしまったものです。 CRONでPATHを指定する部分でPHPのバージョンによりPATHの値が異なるという情報を見つける /usr/bin/php /usr/bin/php5 /usr/bin/php53 各パターンで 「10 * * * * /usr/bin/●● /var/cron_file/test_cron.php」 をcrontab -eに登録してエラーを見てみる。 (1)「*/1 * * * * /usr/bin/php /var/cron_file/test_cron.php」 # vi /var/log/cron →エラーに何も表示されない (2)「*/1 * * * * /usr/bin/php5 /var/cron_file/test_cron.php」 → エラーに何も表示されない。 (3)「*/1 * * * * /usr/bin/php53 /var/cron_file/test_cron.php」 →エラーが表示される Dec 16 20:20:01 ドメイン crond[11412]: (root) CMD (/usr/bin/php5 /var/cron_file/test_cron.php) クローン自体は動いていて、エラーがでているような感じは把握できたのですがここで行き詰まりました。 PHPのパス関係か、MySQLのパス関係、PHPとMySQLの連係、そのあたりのどこかが原因なのでしょうか? 参考資料としてphpinfo()の情報を記載します。 Loaded Configuration File  /etc/php.ini PATH /sbin:/usr/sbin:/bin:/usr/bin 参考)プログラムの内容 --------------------------------------------- require_once ('/var/DB接続情報保存ディレクトリ/password.php') try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query=<<<EOF INSERT INTO test (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query);    $name='斉藤太郎'; $stmt->bindParam(':name', $name); $stmt->execute(); }//try_end catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); }//catch_end ---------------------------------------------

    • ベストアンサー
    • PHP
  • メールをトリガーとして....

    Linuxでメールをトリガーとしてプログラムを動かしたいと思ってます。 「/etc/aliases」に「mailuser: "| /usr/bin/php -f /tmp/test.php"」を追加してもtest.phpは動かず、メールも届きません。 「/etc/aliases」に「mailuser: admin」としてみるとメールがadminに届いてほしいのですが、mailuserに1通届きます。 「/etc/aliases」に「mailuser: mailuser, admin」を追加するとメールがmailuserとadminに届いて欲しいのですが、mailuserに2通届きます。 「/etc/aliases」変更ごに「newaliases」は実行してます。 「PHP Version 5.1.6」「sendmail Version 8.13.8」で、VPSです。 どうして思うようにうごかないのでしょうか?

  • さくらインターネットでメール受信をトリガーにphpプログラムを起動させ

    さくらインターネットでメール受信をトリガーにphpプログラムを起動させたい。 postmaster@xxx.sakura.ne.jp宛てにメールを送信し、 それをトリガーにtest.phpを実行させたいと思っています。 以下のサイトを参考にいろいろと試したのですが、行き詰っています。 ============================ http://www.cpa-lab.com/tech/0143 http://faq.sakuratan.com/wiki/wiki.cgi?%a5%e1%a1%bc%a5%eb#i35 ============================ 上記のサイトを参考に、 .mailfilterとtest.phpを以下のディレクトリにアップロードしました。 ============================ .mailfilter /home/xxx/MailBox/postmaster/.mailfilter test.php /home/xxx/www/test.php ============================ 各ファイルの中身は以下のとおりです。 .mailfilter ============================ to "| /home/xxx/www/test.php" ============================ test.php ============================ #!/usr/local/php-5.2.11/bin/php <?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); if (mb_send_mail("xxxxxxx@softbank.ne.jp", "テストメール", "これはテストです。", "From: postmaster@xxx.sakura.ne.jp")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } ?> ============================ test.phpに直接アクセスするとxxxxxxx@softbank.ne.jp宛てにメールが届くのは確認が出来ているのですが、 携帯メールでpostmaster@xxx.sakura.ne.jpにメールを送っても、xxxxxxx@softbank.ne.jp宛てにメールが返ってきません。 何が原因でこうなっているのか、おわかりになる方はいらっしゃいませんか? あと気になっているのがtest.phpの『#!/usr/local/php-5.2.11/bin/php』の部分なのですが、 当方『php-5.2.11-Win32.zip』をダウンロードしてインストールしたので参考サイトの『5.2.6』を『5.2.11』に変更しているのですが考え方が根本的に間違っていたりはしますでしょうか? 以上、お手数ですがご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • .forward でphpに渡し、自動返信させようとすると

    .forward でphpに渡し、自動返信させようとすると Undelivered Mail Returned to Sender  が返ってきます。 内容は cannot append message to file /home/ユーザ名/**.php: cannot open file: Permission denied  です。  .forwardにメールアドレスを書くと、きちんと転送されるので、.forwardの権限や場所は合っていると思います。  phpファイルの権限は一通り試しましたが、どれでもだめでした。  default_privsの設定を変更しても状況変わらず、どなたかお分かりの方、同じ状況になった方、ご教示いただけると助かります。  

  • .forwardで実行されない?

    届いたメールをテキストに書き出したいのですが、思うように動作せず、手詰まりになりました。 [環境] VineLinux 4.2 postfix perl5.8 [.forward] "|exec /home/test/test.pl" [test.pl] #!/usr/bin/perl open(OUT,"> test.txt"); while(<STDIN>){ print OUT $_; } close(OUT); exit; [パーミッション] .forward 644 test.pl 755 test.txt 666 testディレクトリ 755 postfixのログには delivered to command: exec /home/test/entry.pl となっており、動作してると思うのですが、test.txtには何も書き出されません。 考えられる原因は何でしょうか? 暇なときで構わないので、教えていただけたら幸いです。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • LBT-TWS11のBluetoothイヤホンを持っている方がApple watch7の設定からBluetoothに入ってもデバイスにLBT-TWS11が表示されず、回る状態になっている問題について解決方法を教えてください。
  • LBT-TWS11はApple watch7に対応していないのでしょうか?Bluetoothイヤホンが正常に接続できない問題について詳しく教えてください。
  • エレコム株式会社の製品であるLBT-TWS11のBluetoothイヤホンを使用していますが、Apple watch7のBluetooth設定でデバイスが表示されず接続できません。この問題の解決方法を教えてください。
回答を見る

専門家に質問してみよう