魚へんに春とsendmailのforwardでphpを起動してpg_connectする話題
春です。バスシーズン間近。んでも、とりあえず明日の夜は「春を告げる魚」を釣りに行こうと企んでいます。
そして来週火曜日は「魚へんに春」を新潟まで釣りに行こうと思ってはいますが、明日は吹雪予報。
釣行メンバーの誰もがスタッドレスタイヤを持っていません。大丈夫なんでしょうか?
ってか、3月半ばになってからスタッドレスが必要になりまくりで困っちゃうぜ。
日曜日は行けたら西湖行きます。
そして再来週は琵琶湖~四国のロングツアーです。
で、ロングツアーの前に、おそらく世界一高価なグラスロッドを入れました。
グラスロッドって結構安いわけですが、今回入れたのは長さが1インチで1万円。
ええ、釣りのロッドじゃなくて、歯の治療のロッド?棒です。1インチってか、最終的に削って2cmくらいなんですが・・・
保険が効いて安いけど「劣化するかもしれない」のと保険外で1万円だけど「丈夫」っていわれたら、そりゃ1万円払っちゃうよね~ 良い商売だぜ。
レーシック手術の時も確か、失敗率が高いけど安いコースと(略)
話は大きく変わります。この先は、いつものUNITOROリーダーさんには全く関係ないんで読み飛ばしてください。
この前、ドハマりしてなんとか解決した事を書いてみます。これは、同じようにハマった人が検索でここを見つけてくれて解決できるればな、っていう思いで書きます。いつもネットの困りごとはネットに助けられているので、微力ながら。
キーワード sendmail forward php pg_connect 接続できない
問題:メール受信してphpスクリプトを起動、PostgreSQLの処理をしたいが、pg_connect 出来ないときの解決策。
携帯からのブログ更新や、空メールを受け取ってからなんらかの処理をする場合、メール受信をトリガーにしてphpスクリプトを起動させますが、qmailの情報はたくさんあるけど、sendmailはあんまり無いですね。
http://www.google.co.jp/search?q=sendmail forward php起動&hl=ja&rlz=1T4GGLT_jaJP368JP368&sa=2
↑こんな感じでググるといろいろ出てきます。
.forwardに
ユーザー@ドメイン名
"| /usr/bin/php 起動したいphpファイルのフルパス"
を書いて
cd /etc/smrsh
ln -s /usr/bin/php php
で、私の環境では成功しました。これでphpの起動まではOK
stdinからのメール処理でメール情報を取得する http://www.phppro.jp/phptips/archives/vol35/1
を参考にスクリプトを作れば、携帯からのブログ更新プログラムが作れます。
んが、PostgreSQLへ書き込む部分で5時間ほどハマりました。
エラーログが見れないので手探り状態でデバックしてみてら、どーやらpg_connect が失敗してる模様。
別のシステムでもにたようなスクリプト組んでて、それは正常に動いてます。でも、それはcronでcgiとして動かしているphpです。今回のも、コマンドラインから起動すると正常にpg_connect できるけど、forwardから起動したときのみ失敗するんです。
いろいろなキーワードでググッたけど解決できずにハマリまくり。で、ようやくドンピシャで同じ問題にぶち当たっているページを発見。
[PHP-users 21353].forwardからの標準入力で起動したスクリプトでpg_connectができない
http://ml.php.gr.jp/pipermail/php-users/2004-April/021877.html
もろに全く同じ現象。
記事を追って行くと「PostgreSQLの再インストール」なんて話も出てきて、もはやこれまでか!と思ったんですが、最後まで読んで遂に解決。このかたはnobodyにgrantしたようですが、私の場合は、nobodyはすでにgrantしてるので、maillogを見てみたら、ユーザーがsendmailっぽいので
createuser sendmail
してから、grant all on TABLE_NAME to sendmail してみたら無事に動きました!!!ハマったハマった5時間も。
というわけで、環境によってはユーザー名が違うかもですが、.forwardからの標準入力で起動したスクリプトでpg_connectができない時は、grant周りを疑うと良いみたいです。
解決してみれば、まーそ~ゆー事だわな、って解るんですけどね・・・
カテゴリ:釣り