Php 获取项目根目录

Php 获取项目根目录,php,path,Php,Path,当试图包含在本地环境和生产环境中具有不同路径的文件时,我总是感到困惑 例如,我在我的usercontroller.php文件中有以下内容: require_once(__DIR__ . '/config.php'); 在我的本地主机上,usercontroller.php位于www/myproject/inc/中,config.php位于www/myproject/(项目根目录) 这是失败的 我想要的只是一种定义项目根的方法。i、 e在localhost上是www/projectname,在p

当试图包含在本地环境和生产环境中具有不同路径的文件时,我总是感到困惑

例如,我在我的
usercontroller.php
文件中有以下内容:

require_once(__DIR__ . '/config.php');
在我的本地主机上,
usercontroller.php
位于
www/myproject/inc/
中,
config.php
位于
www/myproject/
(项目根目录)

这是失败的

我想要的只是一种定义项目根的方法。i、 e在localhost上是
www/projectname
,在productions中是
/
,因为文件位于我的localhost上的
projectname
目录中,这会导致我的生产服务器出现问题

简单地定义一个基本路径并从此构建一次我的
require\u
的最佳方法是什么


i、 e.
require_once($basePath.inc/filename.php)
大多数项目使用
config.inc.php
文件,该文件位于可以定义这些内容的公共位置

config.inc.php

define('ROOT_FOLDER', '/');
define('APPLICATION_LINK', 'http://www.example.com/mysite');
require ('../config.inc.php');
echo '<a href="' . APPLICATION_LINK . '">Go home</a>';
script.php

define('ROOT_FOLDER', '/');
define('APPLICATION_LINK', 'http://www.example.com/mysite');
require ('../config.inc.php');
echo '<a href="' . APPLICATION_LINK . '">Go home</a>';
require('../config.inc.php');
回声';

每个项目都应该包含一个包含此信息的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\u 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;
}
function load_file($uri) {
    require BASE_PATH . $uri;
}

function load_class($class) {
    if ( ! class_exists($class))
        load_file('class/' . $class);
}
和一个加载助手

load_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;
}
function load_file($uri) {
    require BASE_PATH . $uri;
}

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

这些功能可以更强大,以满足您的需要。优点是您可以为生产/开发、各种服务器或仅为特定环境提供不同的配置。如果您始终使用site_url功能生成站点周围的url,您可以通过在单个文件。

也许像这样的东西可以解决这个问题

switch(dirname(__FILE__)) {
case '/www/myproject/inc/':
    //DEFINE SOMETHING
break;
case '/www/myproject/':
    //DEFINE SOMETHING
break;
}
\uuuu DIR\uuuu
中所述,返回使用该文件的目录

DIR-文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname(file)。除非是根目录,否则此目录名没有尾随斜杠。(在PHP 5.3.0中添加。)

要在外部目录中包含文件,您必须使用
从内部目录中“退出”

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


另一方面,我建议您检查一下是否正在使用PHP的名称空间。

我知道这个答案已经晚了,但您还没有接受任何答案,所以我想我会把我在大多数应用程序中使用的东西扔进锅里

首先,从您调用的
config.php
文件开始,您将始终需要使用相对引用,即示例中的
require_once'../config.php';
。当然,您可以从php命令“收集”配置文件的完整路径,但当您知道它的一个目录时,为什么要这样做在该文件中,您可以定义整个项目的基本路径。例如,在您的
www/myproject/inc/usercontroller.php
文件中,顶部看起来像:

<?php
require_once '../config.php';