【问题标题】:PHP $_SERVER['DOCUMENT_ROOT']PHP $_SERVER['DOCUMENT_ROOT']
【发布时间】:2012-11-15 09:49:14
【问题描述】:
        $username;
        $welcomeMessage;
        if( isset( $_SESSION['username'] ) ){
            $username = $_SESSION['username'];
            $welcomeMessage = "Hello $username! | ";
            $welcomeMessage .= '<a href="'.$_SERVER['DOCUMENT_ROOT'].'/nmc/Admin/LogoutProcessor.php">Logout</a>';
        } else {
            $welcomeMessage = "Welcome | ";
            $welcomeMessage .= '<a href="'.$_SERVER['DOCUMENT_ROOT'].'/nmc/Admin/LoginPage.php">Login</a>';
        }

上面的代码返回“file:///C:/xampp/htdocs/nmc/Admin/LoginPage.php”

我正在使用xampp开发一个网站,基本上使用自己的服务器处理,所以我不能使用上面的链接。我在不同的目录中有几个网页必须链接到 LoginPage.php,我需要一个标准链接。以上代码在一个Class中,不同目录下的其他页面都可以调用。

谁能告诉我如何解决这个问题?

谢谢!

【问题讨论】:

  • 删除$_SERVER['DOCUMENT_ROOT'] 怎么样?你为什么首先使用它?
  • 或者尝试使用 $_SERVER['HTTP_HOST'] 代替;这应该会给你一些类似于localhost的东西
  • @Carsten 因为上面的代码是在一个类中构建网页的。有许多来自不同目录的页面调用这个类。
  • 我认为使用 $_SERVER["DOCUMENT_ROOT"] 的一个重要原因是实时服务器只能以这种方式工作,因此当您将其上传到实时服务器时,您需要它是相同的。这就是我现在坐的船。我必须将 $_SERVER["DOCUMENT_ROOT"] 用于我的实时服务器。所以我需要让我的本地服务器以同样的方式运行。

标签: php


【解决方案1】:

$_SERVER['DOCUMENT_ROOT'] 返回

当前脚本正在执行的文档根目录,在服务器的配置文件中定义。

您可以使用$_SERVER['HTTP_HOST'] 或绝对路径,例如&lt;a href="/nmc/Admin/LoginPage.php"&gt;Login&lt;/a&gt;

【讨论】:

    【解决方案2】:

    在这种情况下,最好创建一个 config.php 文件并将其保存在您的根目录中。在配置文件中,您定义了一些参数。

    在每个页面中调用这个配置文件。您的配置文件可能与以下类似。

    define('APP_NAME',"beta");  
    define('HTTP_SERVER', 'http://localhost/'); 
    define('SITE_NAME', 'http://localhost/');   
    define('DOCUMENT_ROOT',$_SERVER['DOCUMENT_ROOT'].APP_NAME); 
    

    您还可以为您认为将在多个地方使用的图像、css 等定义目录。

    所以不是

    $welcomeMessage .= '<a href="'.$_SERVER['DOCUMENT_ROOT'].'/nmc/Admin/LogoutProcessor.php">Logout</a>';
    

    你会写,

    $welcomeMessage .= '<a href="'.HTTP_SERVER.'/nmc/Admin/LogoutProcessor.php">Logout</a>';
    

    【讨论】:

    • 通常同意,但有时(尤其是在继承代码中)您必须使用类似这些行的东西来访问该配置文件本身。
    【解决方案3】:
     $_SERVER['DOCUMENT_ROOT']
    

    返回一个物理文件系统路径。它不是 HTTP URL。

    尝试删除它以使用绝对 URL 路径:

     <a href="/nmc/Admin/LoginPage.php">Login</a>
    

    或尝试改用 $_SERVER['HTTP_HOST']。

    顺便说一句,read $_SERVER documentation

    【讨论】:

      【解决方案4】:

      如果你使用 Wamp Server 或类似服务器,“/”是“www”文件夹的文档根目录,所以你必须写"/yoursitesfoldername/nmc/Admin/LogoutProcessor.php"

      【讨论】:

        【解决方案5】:

        我继承了一个到处使用它的站点,所以当我用 xampp 对其进行测试时,我最终创建了一个虚拟主机来加载该站点。

        详情请看这篇文章:http://www.dreamincode.net/forums/topic/307265-change-serverdocument-root-path-for-xammp-light/

        这是我的httpd-vhosts.conf 文件:

        <VirtualHost *:80>
            ServerAdmin webmaster@localhost
            DocumentRoot "C:/xampp/htdocs/examplesite/nested/path/to/content"
            ServerName example.localhost
            ErrorLog "logs/example.localhost-error.log"
            CustomLog "logs/example.localhost-access.log" common
        </VirtualHost>
        

        【讨论】:

          猜你喜欢
          • 2013-08-12
          • 2011-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多