在PHP中访问/创建SITE_ROOT和SERVER_ROOT值的最佳方法?

时间:2010-06-03 07:27:17

标签: php

我需要2个不同的路径,一个用于包含,一个用于js / css等。我正在使用mod_rewrite。以下工作正常......

目前我的所有文件都包含在顶部

define('SERVER_ROOT',   'C:/wamp/www/site_folder/');
define('SITE_ROOT',     'http://localhost/site_folder/');

然后调用文件:

require_once SERVER_ROOT . 'st_wd_assets/inc/func_st_wd.php';    

<link rel="stylesheet" type="text/css" href="<?php echo SITE_ROOT;?>st_pages/user_area/css/user_area.css" media="screen"/>

正如您可能看到的,每次在localhost和我的实时服务器之间移动版本时,更新每个文件的顶部将是一项繁重的工作。

定义这些ROOT值的最佳/标准方法是什么?

我无法在$_SERVER超级全球范围内看到解决方案?人们通常只使用VirtualHosts吗?但那么是否仍然需要定义ROOT常数?

6 个答案:

答案 0 :(得分:2)

是。 人们通常只使用VirtualHosts。

有几种方法。

  • 您可以使用相对路径来包含配置文件。
  • 您可以使用$ _SERVER超全局的DOCUMENT_ROOT在其中放置配置文件。
  • 如果可能,您可以使用网络服务器配置。比如.htaccess中的php_value auto_prepend_file
  • 至少你可以检测你的环境并在两个根之间进行选择,两者都是在顶部的条件下写的。
  • 是的,如果你正在使用mod_rewrite - 制作一个包含所有其他文件的前端控制器,那么 - 只有一个文件可以放置这些设置。

答案 1 :(得分:1)

为什么不用

制作config.php文件
define('SERVER_ROOT',   'C:/wamp/www/site_folder/');
define('SITE_ROOT',     'http://localhost/site_folder/');

并且不会将其附加到每个文件的顶部。

require_once ('config.php');

一旦制作 - 将来没有问题。如果您正在移动您的网站 - 只需编辑或不覆盖配置文件。

答案 2 :(得分:0)

结合使用相对包含/要求和autoloading of classes,您可以完全避免使用SERVER_ROOT。像SITE_ROOT这样的东西属于配置文件,包含在需要的地方。

答案 3 :(得分:0)

如果您没有使用VirtualHosts,则$ _SERVER ['DOCUMENT_ROOT']可能无法返回正确的值。对于您的网站,它看起来会返回“C:/ wamp / www”

您可以使用这个简单的定义将SERVER_ROOT设置为当前目录,后跟斜杠(目录分隔符):

define('SERVER_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);

然后,应该将SERVER_ROOT定义为服务器的“C:/ wamp / www / site_folder /”。

但是,除非所有.php文件都包含在“C:/ wamp / www / site_folder /”中,否则这可能无效。 define将返回该文件夹的子目录中的.php文件的不同值。

答案 4 :(得分:0)

我使用php_uname('n')返回当前运行php的计算机的名称。有了这个,您可以制作每台计算机的配置文件:

$configFile = 'config/' . php_uname('n') . '.config.php';

if (file_exists($configFile)) {
    include($configFile);
}

然后将配置指令放在config / your_computer_name.config.php和config / live_servers_name.config.php中。

答案 5 :(得分:0)

在docroot中创建一个文件。称之为settings.inc。

//settings.inc:

define('SITE_ROOT',     'site_folder');
require_once (dirname(__FILE__)) . '/st_wd_assets/inc/func_st_wd.php';

然后在每个文件中

require_once (dirname(__FILE__)) . "/settings.inc";

不要担心css或超链接的根和诸如此类的东西。只需在“/".

前面加上它们