人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの画像メール解析について質問させていただきます。

現在、PEARのmimeDecodeを利用しながら画像メールを受信し、保存する開発を行っております。

画像、テキストを解析して保存することはできたのですが画像を保存する際に
パスの指定が../のような相対パスでは保存できなかったため、こちらがなぜなのかわからず知見のある方にお聞きしたい次第です。

開発環境
php5.3.8
postfix 2:2.3

保存先ディレクトリ
/var/www/html/app/image/

メール解析用のphpが保管されているディレクトリ
/var/www/html/app/mail/mail.php


× mail.php→$image_path内で保存できなかったときの指定
../image/

◎ mail.php→$image_path内で保存できたときの指定
/var/www/html/app/image/

なぜこの指定をしなければいけないのかがわからず、要因がわかれば教えて頂きたくよろしくお願いいたします。

●質問者: aiueo
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tdoi
●30ポイント

PHPではなく、OS的な問題かと。
恐らく、procmailかなんかでphpスクリプトを起動してるんでしょうが、その辺りの仕組み次第でしょう。

ようは、「.」つまり、カレントディレクトリがどこの状態で動作しているかです。
スクリプトのあるディレクトリ以下としてやりたければ、

$image_path = dirname(__FILE__) . "/" . $image_name;


とでもすればよいかと。


aiueoさんのコメント
ありがとうございます、一度試してみます。phpスクリプトは/etc/aliasesで特定のアドレス宛にメールが来た時に作動するようにしています。 postmail: "| /usr/bin/php -q /var/www/html/app/mail/mail.php procmailというのも知らなかったため調べてみます。。

2 ● うぃんど
●70ポイント ベストアンサー

相対アドレスが使えなくて、さらに「保存先ディレクトリ」や
「phpが保管されているディレクトリ」とあわせての想像ですが・・・

CakePHPなどのフレームワーク使ってませんか?
だとすれば、「サーバーサイドでURLのReWriteが行われるために、
相対アドレスでは正常に動かない」と合点もいくのですが・・・

フレームワークなどを用いている場合は、例えば、
「CakePHP 相対パス」といったような具合に検索すると良いでしょうし、
返信欄に書き込んで回答を待ってみてもいいでしょう


aiueoさんのコメント
ありがとうございます、フレームワークは今のところ利用しておりません。

うぃんどさんのコメント
>フレームワークは今のところ利用しておりません WWWの下にあったので、 てっきり使っているものと思いましたが、ちがいましたか・・・ コメント欄にあるmail.phpのソースであれば特に問題なさそうなので・・・ tdoi さんの回答にありますが、 ワーキングディレクトリを確認してみてください getcwd関数で調べられます http://php.net/manual/ja/function.getcwd.php

aiueoさんのコメント
お返事ありがとうございます。LAMP+Jqueryをはじめて4カ月程度の素人でして、フレームワークの利用などがまだ追いついてきておりません。。cakePHPはとてもわかりづらいという評判もあるので避けているのですが、、、

うぃんどさんのコメント
>postmail tdoiさんのほうへの返信読みました tdoiさんのおっしゃるとおりですね phpの実体が存在する場所と、phpが動作している場所の違いです getcwd はphpが動作しているディレクトリを返します dirname(__FILE__) はphpの実体が存在するディレクトリを返します /var/www/html/app/mail/ を基準にするならば、 >|php| $image_path = dirname(__FILE__) . "/../image/" . $image_name; ||<

aiueoさんのコメント
ありがとうございます、確認してみました。 getcwdでみたところカレントのワーキングディレクトリが /var/spool/postfix となっていました。これはpostfix側のワーキングディレクトリ?だと思うので、 これだと保存先の指定がおかしい扱いになりますね。。。 dirname(__FILE__) をおこなってみたところ /var/www/html/app/mail とでまして、phpが実態するディレクトリがでてきました。 無事理由がわかりまして大変参考になりました。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ