0

ローカル環境と本番環境で異なるパスを持つファイルを含めようとすると、混乱し続けます。

たとえば、usercontroller.phpファイルにこれがあります:

require_once(__DIR__ . '/config.php');

私のローカルホストではusercontroller.php、(プロジェクトのルートディレクトリ)にあり、そこにありますwww/myproject/inc/config.phpwww/myproject/

これは失敗します。

私が欲しいのは、プロジェクトのルートを定義する方法だけです。つまり、ローカルホストではファイルがローカルホストのディレクトリ内に配置されているため、本番サーバーで問題が発生していますwww/projectname/projectname

基本パスを単純に定義し、require_onceそこからビルドする最良の方法は何ですか?

すなわちrequire_once($basePath . 'inc/filename.php'

4

5 に答える 5

0

すべてのプロジェクトには、この情報を保持する config.php ファイルが含まれている必要があります。

config.php

define('ENVIRONMENT', 'PRODUCTION');
// define('ENVIRONMENT', 'TESTING');
// define('ENVIRONMENT', 'DEVELOPMENT');

switch (ENVIRONMENT) {
    case 'PRODUCTION':
        define('BASE_URL', 'http://www.mysite.com');
        define('BASE_PATH', '/');
        break;
    case 'TESTING':
        define('BASE_URL', 'http://test.mysite.com');
        define('BASE_PATH', '/test/');
        break;
    case 'DEVELOPMENT':
        define('BASE_URL', 'http://localhost/');
        define('BASE_PATH', '/www/myproject/');
        break;
}

次に、URL ヘルパー ファイルがあるかもしれません。

url_helper.php

function site_url($relative) {
    return BASE_URL . $relative;
}

function redirect($uri = '', $method = 'location', $http_response_code = 302) {
    if ( ! preg_match('#^https?://#i', $uri)) {
        $uri = site_url($uri);
    }

    switch($method) {
        case 'refresh' : header("Refresh:0;url=".$uri);
                break;
        default : header("Location: ".$uri, TRUE, $http_response_code);
                break;
    }
    exit;
}

そしてロードヘルパー。

load_helper.php

function load_file($uri) {
    require BASE_PATH . $uri;
}

function load_class($class) {
    if ( ! class_exists($class))
        load_file('class/' . $class);
}

これらの関数は、ニーズに合わせてより堅牢にすることができます。利点は、本番/開発、さまざまなサーバー、または単に特定の環境に対して異なる構成を使用できることです。いつも site_url 関数を使用してサイトの URL を生成している場合、1 つのファイルを 1 つ変更するだけで、URL の解釈方法を簡単に変更できます。

于 2013-04-05T00:15:57.383 に答える