在PHP中从根目录设置函数中的地址


Set addresses in a function from root in PHP

我正在使用WAMP服务器编写localhost上的脚本。我想让我的网站多语言,所以我定义了一个函数,你可以在下面看到:

function p($name,$langIn = 'fa_IR')
{
    switch ($langIn) {
        case 'en_US':
            require('/inc/languages/en_US/all_lang_en_US.php');
        break;
        default:
            require('/inc/languages/fa_IR/all_lang_fa_IR.php');
    }
    if(isset($lang[$name]))
        echo $lang[$name];
    else
        echo '<span style="color: red;">Error!</span>';
}

存储在localhost/aroozi/inc/functions/global_func.php中的函数。所需的地址在localhost/aroozi上正常工作,但当我将注册表值发布到localhost/aroozi/processors/register.php时,它不起作用,脚本将停止工作,因为我在localhost/aroozi/inc/header.php的页面标题中使用了p()函数:

<!Doctype html>
<head>
.
.
.
<title><?php p('title',$lang); ?></title>
.
.
.

我的基本问题是如何设置一个地址,以便在脚本的所有目录中工作?

我的基本问题是我如何设置一个地址,以便在所有的脚本的目录?

问题是您依赖于相对路径-如require('/inc/languages/…) -这不是一个好的做法。你可能会发疯,试图平衡/../甚至../../的设置位置。避免它的最好方法是在主配置中设置一个基本路径。

你可以在配置文件中这样设置:

$BASE_PATH = '/full/path/to/your/codebase/here/';

如果你不知道你的文件系统的基本路径是什么,就把这行代码放在你的PHP代码中;如index.php:

echo "Your path is: " . realpath(dirname(__FILE__)) . "<br />";

然后加载该页面。在靠近顶部的地方会有这样的文本:

你的路径是:/full/path/to/Your/codebase/here/

有了这个集合,你就可以像这样修改你的代码:

include_once 'config.php';
function p($name,$langIn = 'fa_IR')
{
    global $BASE_PATH;
    switch ($langIn) {
        case 'en_US':
            require_once($BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');
        break;
        default:
            require_once($BASE_PATH . 'inc/languages/fa_IR/all_lang_fa_IR.php');
    }
    if(isset($lang[$name]))
        echo $lang[$name];
    else
        echo '<span style="color: red;">Error!</span>';
}

注意我所做的更改如下:

  • 本例中设置config.phpinclude_once。把它放在代码中有意义的地方。
  • 在函数内设置global $BASE_PATH;,以便$BASE_PATH可以轻松加载到函数中。
  • require调用更改为require_once,因为这只是更好的实践&帮助代码避免多个require调用可能导致脚本爆炸的情况。
  • require_once调用中设置$BASE_PATH . 'inc/languages/以实际使用$BASE_PATH概念。

是的,设置通过相对路径加载的config.php,然后在下一行使用$BASE_PATH,似乎需要更多的工作,但好处是,一旦设置了这些config.php行,您就不再需要担心它了。然后可以设置$BASE_PATH以满足您所处的任何设置的需要。

EDIT:根据评论,原来的海报不理解文件系统路径之间的区别&web服务器URL。为了尽可能清楚,这是Windows中原始海报报告的文件系统路径:

C:'wamp'www'aroozi

这是通过web浏览器访问WAMP URL的web URL:

http://localhost/aroozi

当对http://localhost/aroozi的文件发出请求时,web服务器查看文件系统上的C:'wamp'www'aroozi内部。因此,该路径被认为是文件系统上的基本路径。

所以使用我上面的例子,这将设置为Apache PHP使用如下:自PHP &Apache在WAMP中通过Unix/Linux路径设置工作:

$BASE_PATH = '/wamp/www/aroozi';

或者使用constants.php中的原始海报配置设置:

定义(' BASE_PATH ', '/里面/www/aroozi ');

然后在require/include前面加上$BASE_PATHBASE_PATH,就像这样:

require_once($BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');

或:

require_once(BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');