2009-06-20 11 views
1

私は同じページに含める必要がある2つの 'ライブラリ'を持っています。シンプルマシンフォーラムとWordpress。関数名は2つの異なるライブラリのPHPで競合します

しかし、お互いに矛盾するis_admin()関数があります。

Fatal error: Cannot redeclare is_admin() (previously declared 
in /home/site.com/wordpress/wp-includes/query.php:100)in /home/site.com/smf/Sources/Security.php on line 82) 

これを回避するにはどうすればよいでしょうか?たとえば、あるライブラリのすべての呼び出しをis_admin2()に変更する必要はありません。

答えて

2

あなたはあまり選択肢がありませんが、関数の名前を変更するか、クラスの周りのすべての関数をラップすると思います。これはPHPの問題です< = 5. *:名前空間がなく、開発者はオブジェクト指向のアプローチを使用するよりも、ゆるい関数でいっぱいのスクリプトを書くことを好むことがよくあります。

1

私は(私はそれが掲示板のものであろう推測している)小さなライブラリの各関数呼び出しの名前を変更し、手動で弾丸をかむだろう。がんばろう。

0

PHP 5.3を使用すると、名前空間をサポートする可能性があります。実装の詳細はわかりませんが、でなければ、異なる名前空間にライブラリをラップすることはできません。

残念ながら、5.3はまだ安定版リリースには達していません。もしあなたが/それを使用したくないのであれば、名前を変更することを含まない唯一のオプションは、別々の2つのPHPスクリプトを作成し、別々のインタプリタで起動し、何らかの形で通信させる(パイプ、ソケット、一時ファイル)。私にとってLuckly

0

が、これは単純な機械フォーラムでis_adminのdeclerationで見つかったコメントでした。

// Grudge chickens out and puts this in for combatibility. This will be ripped out on day one for SMF 1.2 though ;) 

そのいずれにしても必要ではないようだ...私は私も毎回アップグレードするときに、これを削除することを忘れないようにしなければならない少しanoying ...

1

is_admin_wp()is_admin_smf()に機能を変更します。次に、独自のis_admin()関数を定義します。これは単純なラッパーに過ぎません。

function is_admin() { 
    // from what function is_admin was called? 
    list (, $last) = debug_backtrace(); 
    if (strpos($last['file'], 'wordpress') >= 0) { 
     $fn = 'is_admin_wp'; 
    } else { 
     $fn = 'is_admin_smf'; 
    } 
    $args = func_get_args(); 
    return call_user_func_array($fn, $args); 
} 
+0

今後この問題を抱える人には悪い考えではありません。ありがとう –