伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

Plesk環境下でのMDB2

Pleskで運用しているドメインについて、
各ドメインの設定画面で、
 

 
↑この赤枠のチェックを外せば、PHPのsafe modeをオフにできますが、
Pleskでsafe modeをオフにしても、open_basedirの設定は残ったままです。
 
PEAR MEDB2では、この設定だけではエラーが発生するケースが考えられます。
  
MDB2.phpのfileExists()内を見ると、
拡張機能や各DBへのドライバファイルの存在をチェックするのに、
safe modeがオフのときは is_readable()でファイルをチェックし、
そうでないときは、fopen()でチェックしているようです。
 
MDB2ではsafe modeオフのときのみ、is_readable()が使えないという前提で設計されていますが、
実際はそれだけでは不十分で、is_readable()はopen_basedirの制約もうけますから、
MDB2.phpのインストール場所などによっては、
safe modeはオフであるけれど、open_basedirの設定が残るPlesk環境下では、エラーが発生してしまいます。
 
解決方法は、2つ。
 
1)vhost.confでopen_basedirをno_valueにする。
クララオンラインサイトに説明がありますので、御覧ください。
http://support.clara.jp/clarafaq/index.php?action=artikel&id=45&artlang=ja
 
2)MDB2.phpを改変してしまう。
MDB2.phpの

    function fileExists($file)
    {
        // safe_mode does notwork with is_readable()
        if (!@ini_get('safe_mode')) {
             $dirs = explode(PATH_SEPARATOR, ini_get('include_path'));
             foreach ($dirs as $dir) {
                 if (is_readable($dir . DIRECTORY_SEPARATOR . $file)) {
                     return true;
                 }
            }
        } else {
            $fp = @fopen($file, 'r', true);
            if (is_resource($fp)) {
                @fclose($fp);
                return true;
            }
        }
        return false;
    }

    function fileExists($file)
    {
        // safe_mode does notwork with is_readable()
        if( false ){
             $dirs = explode(PATH_SEPARATOR, ini_get('include_path'));
             foreach ($dirs as $dir) {
                 if (is_readable($dir . DIRECTORY_SEPARATOR . $file)) {
                     return true;
                 }
            }
        } else {
            $fp = @fopen($file, 'r', true);
            if (is_resource($fp)) {
                @fclose($fp);
                return true;
            }
        }
        return false;
    }

に変更する。
 
2のがお手軽かなー。でも、fopenな上に@でエラー制御してるので、パフォーマンスは落ちます。ご注意を。
 
ま、あれですけど、open_basedirとかの制約を受けてる状態で、積極的にPEARを利用しようとするほうが、技術者としては間違っているかもしれませんが(^-^;

1 Comment

  1. Wholesale new nike nfl draft jerseys online

コメントを残す

Your email address will not be published.

*