LAMPで画像付きメールの投稿システムを開発しております。


現在、画像メールの受信、解析まではできているのですが、DBへの登録が行えなく悩んでいます。

Command died with status 255: "
/usr/bin/php -q /var/www/html/app/mail/mail.php >> /tmp/mail_log.txt".

Command output: PHP Fatal error: Class 'MDB2' not found in
/var/www/html/app/mail/mail.php on line 3

メールを投稿するとmail.phpが起動するようになっていまして、
mail.php内でMDB2を経由してDBへ接続をしようとしているのですが、エラーとなって上記のような文章が返信されてきます。


メール受信

/etc/aliases でmail.phpが起動するようにセット

mail.phpが起動して解析開始
 解析が完了したのでDBへ接続し登録を始める

エラー

エラーのメールが返ってくる

原因がつかめておらずこのような場合、どのような対処を行えばよいでしょうか?

procmail?か何かでスクリプトを動かしている場合は何か対応が必要なのでしょうか。

ご知見のある方教えていただけますと助かります。
php5.3.8
postfix2.3
mysql5.5

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/12/04 22:06:50
  • 終了:2011/12/05 16:25:10

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/12/04 22:47:00

ポイント100pt

(1)原因
'MDB2' not found なので、
MDB2への相対パスが間違っているってことです

(2)MDB2がどこにあるかの調査
Linuxのコマンドラインから下記のコマンドを入力すると、
PEARへの絶対パスが出力されます

pear config-get php_dir

(3)プログラム修正
mail.phpを書き直す
dirname(__FILE__)を用いて相対パスにしても間違いではありませんが、
ライブラリの読み込みは絶対パスを用います

require_once 'MDB2.php';
   ↓
require_once '絶対パス/MDB2.php'

(4)応用
PEARを使うたびに絶対パスを書くのは面倒でしょう
php.iniにPEARへの絶対パスを書いておけば、
ライブラリの位置を確認してプログラムを書き直したりする必要がなくなり、
単純に'MDB2.php'だけを書けば良いことになるわけです
指定方法は絶対パスを用います
(相対パスはphpのワーキングディレクトリによって、
 違った場所を指してしまうためダメなのです
 だから、前述3でも絶対パスを用いているわけです)

include_path=".;PEARの絶対パス"
他3件のコメントを見る
id:windofjuly

>ブラウザとrootのカレントディレクトリが違う

前々回ならびに今回で、
「動かし方によって始点が違う」ことは理解されたことと思いますが、
それだけではなくて、
「実行しているユーザーによっても見えるものや見え方が違う」のでやっかいです

ブラウザから見た場合にはapacheユーザーの視点であり始点になり、
rootでログインして見た場合にはrootの視点であり始点になりますので、
確認なさったようにカレントが違うということになったりします

さてここで・・・mail.phpを動かしているのは誰でしょう?

それはpostfixユーザーのはずです(そちらのセットアップ状況によります)
rootではなくpostfixユーザーでログオンして、
/usr/share/pear/MDB2.php の存在確認をしてみてください

>require_once("../macros/db_connect.php");

ブラウザからのアクセスで問題がないなら、そのまま相対パスで良いです
ブラウザからも、コマンドラインからも使うのであれば、
絶対パス(どこから使っても絶対に同じ場所を指し示す)に替えた方がいいです

こんなことを言うのは失礼かもしれしれませんが、
Linuxのユーザー管理とファイル管理の基礎を学びなおしたほうが多分ですがスッキリします
phpやpostfixなどではなくて、Linuxの入門書を何冊か読んでみてください
一日か二日かけて軽く読み流すだけでも大きく違ってくるはずですから・・・

2011/12/05 13:02:17
id:kuso47

丁寧なお返事有難うございます。
おっしゃられる通り、linuxについてもプログラミングについても知識がかなり浅くご迷惑をおかけします。

Linuxの入門書を購入して読みながら進めてみます。

ただ、どうしても時間がない状況でしてまた質問してしまうかと思いますがどうぞよろしくお願いいたします。

2011/12/05 16:31:08

その他の回答(1件)

id:kodairabase No.1

kodairabase回答回数661ベストアンサー獲得回数802011/12/04 22:46:59

PEAR::MDB2 がインストールされていないのではありませんか?
http://pear.php.net/manual/ja/package.database.mdb2.php

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/12/04 22:47:00ここでベストアンサー

ポイント100pt

(1)原因
'MDB2' not found なので、
MDB2への相対パスが間違っているってことです

(2)MDB2がどこにあるかの調査
Linuxのコマンドラインから下記のコマンドを入力すると、
PEARへの絶対パスが出力されます

pear config-get php_dir

(3)プログラム修正
mail.phpを書き直す
dirname(__FILE__)を用いて相対パスにしても間違いではありませんが、
ライブラリの読み込みは絶対パスを用います

require_once 'MDB2.php';
   ↓
require_once '絶対パス/MDB2.php'

(4)応用
PEARを使うたびに絶対パスを書くのは面倒でしょう
php.iniにPEARへの絶対パスを書いておけば、
ライブラリの位置を確認してプログラムを書き直したりする必要がなくなり、
単純に'MDB2.php'だけを書けば良いことになるわけです
指定方法は絶対パスを用います
(相対パスはphpのワーキングディレクトリによって、
 違った場所を指してしまうためダメなのです
 だから、前述3でも絶対パスを用いているわけです)

include_path=".;PEARの絶対パス"
他3件のコメントを見る
id:windofjuly

>ブラウザとrootのカレントディレクトリが違う

前々回ならびに今回で、
「動かし方によって始点が違う」ことは理解されたことと思いますが、
それだけではなくて、
「実行しているユーザーによっても見えるものや見え方が違う」のでやっかいです

ブラウザから見た場合にはapacheユーザーの視点であり始点になり、
rootでログインして見た場合にはrootの視点であり始点になりますので、
確認なさったようにカレントが違うということになったりします

さてここで・・・mail.phpを動かしているのは誰でしょう?

それはpostfixユーザーのはずです(そちらのセットアップ状況によります)
rootではなくpostfixユーザーでログオンして、
/usr/share/pear/MDB2.php の存在確認をしてみてください

>require_once("../macros/db_connect.php");

ブラウザからのアクセスで問題がないなら、そのまま相対パスで良いです
ブラウザからも、コマンドラインからも使うのであれば、
絶対パス(どこから使っても絶対に同じ場所を指し示す)に替えた方がいいです

こんなことを言うのは失礼かもしれしれませんが、
Linuxのユーザー管理とファイル管理の基礎を学びなおしたほうが多分ですがスッキリします
phpやpostfixなどではなくて、Linuxの入門書を何冊か読んでみてください
一日か二日かけて軽く読み流すだけでも大きく違ってくるはずですから・・・

2011/12/05 13:02:17
id:kuso47

丁寧なお返事有難うございます。
おっしゃられる通り、linuxについてもプログラミングについても知識がかなり浅くご迷惑をおかけします。

Linuxの入門書を購入して読みながら進めてみます。

ただ、どうしても時間がない状況でしてまた質問してしまうかと思いますがどうぞよろしくお願いいたします。

2011/12/05 16:31:08

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません