0

Zend フレームワークが利用可能な場合に追加機能を追加する WordPress 用のプラグインを開発していますが、追加された機能は、フレームワークがまだ存在しない場合にユーザーがフレームワークをインストールすることを正当化するのに十分ではありません。

私の質問は、Zend が存在するかどうかを検出する良い方法はありますか? 明らかにget_include_path()、インクルードパスが何であれ、それを返すために使用できますが、それ以上はわかりません。正規表現を使用して、フレーズzendがパスに表示されるかどうかを判断できますが、それはせいぜい信頼性がないようです (偽陰性よりも偽陽性を考えていますが、人々がデフォルトのパスを使用していない場合、両方の可能性があると思います)。

この正規表現に頼る必要がある場合は、エラーが発生してそこから進むときにいつでもエラーをトラップできますが、より良い方法がある場合は、それを知っておくと役立ちます。

4

2 に答える 2

1

最も簡単な方法:

if (stream_resolve_include_path('Zend/Version.php')) {
    // ZF found
}

しかし、なぜこれを行う必要があるのか​​疑問に思います。フレームワークなしで動作するようにプラグインをコーディングする必要がある場合、フレームワークがあればそれを使用することで何を得ることができますか? これはコードを複雑にするだけのようです。

于 2013-01-29T09:39:20.507 に答える
0

はい、これはやや簡単です:

$zfPresent = (bool) stream_resolve_include_path("Zend/Application.php")

ファイルがインクルード パス内にあるstream_resolve_include_path()場合は絶対パスを返し、そうでない場合は false を返します。

したがって、それが見つかった場合、フレームワークは間違いなくそこにあります。

一部の人々にとっては塩の粒だけです。少なくとも PHP 5.3.2 が必要です。

参照: http://php.net/manual/de/function.stream-resolve-include-path.php

PHP のバージョンで上記の解決策を使用できない場合:

次のようなことを試してください:

set_error_handler(function($code, $text, $file, $line) {
    // Handle zend not present    

    /* So that internal error handling won't be executed */
    return true;
});

include("Zend/Application.php");

restore_error_handler();

本当にエレガントだとは思いませんが、Zend の検出にはある程度信頼できるはずです。別の方法は次のようなものです。

function checkForZf()
{
    $includePaths = array_merge(explode(PATH_SEPARATOR, get_include_path(), array($myAppsLib));

    foreach($includePaths as $path) {
        if (file_exists($path . DIRECTORY_SEPARATOR . 'Zend' . DIRECTORY_SEPARATOR . 'Application.php') {
            return true;
        }
    }
    return false;
}

これもある程度信頼できるはずですが、ファイルアクションはパフォーマンスが高くなります。パフォーマンスに関してテストするか、最初の検出後に状態をどこかに保存して、すべてのリクエストで実行する必要がないようにすることができます。

于 2013-01-29T08:26:12.207 に答える