[PHP-users 26611] Re: PEAR のPOP3でlogin部分でエラー

KOYAMA Tetsuji koyama @ hoge.org
2005年 8月 25日 (木) 21:33:20 JST


小山です。

On 8/25/05, 倉谷蓮(有限会社コットンシステム開発) <ren @ ctnml.net> wrote:
> 尚、ログインの名前とパスが違うのにエラーを返さないという問題ですが今PEARの元コードのlogin部分に色々マークをうって調べたところログイン失敗時にFALSEというのは返らない(マニュアルには返ると書いてありますが…)ことが発覚し、成功したときだけtrueが返されることがわかったのでそう判定を書き換えたところうまくいきました。

マニュアルというのはこれのことでしょうか?

  http://pear.php.net/manual/ja/package.networking.net-pop3.login.php

確かに「失敗時には FALSEを返します」とありますね。
オリジナルの英文ドキュメントもそうなっているので、これはドキュメント
が追いついていない例ですね…。

PEARのコードは、PEARが持つエラー処理の仕組みにしたがっている事が
多いです。それは、成功時には true やなにか意味のある値を返し、失敗時
には PEAR_Error オブジェクトを返す、というものです。Net_POP3::login()
も今見たらそのようになっていました。なので

  $pop =& new Net_POP3;
  $pop->connect($hostname);
  $err = $pop->login($user, $passwd);
  if (PEAR::isError($err)) {
      die('ログイン失敗');
  }

のように PEAR::isError を用いて正否の判断をするのが正しいやり方です。

> ずいぶん問題が解決できてきて残るはこのメールサーバーの設定(?)です…

 dovecot は使った事ないので分かりません。:-)

-- 

  小山哲志@ビート・クラフト
  koyama @ beatcraft.com
  koyama @ hoge.org


PHP-users メーリングリストの案内