【问题标题】:Apache Parallel Path Document RootApache 并行路径文档根目录
【发布时间】:2013-03-01 15:54:07
【问题描述】:

我在 apache2 (Windows 7) 中建立了一个网站,假设我的 DocumentRoot 是 /mysite/content

但我也有包含在并行目录中,例如 /mysite/lib

所以我的 index.php 文件说:

require_once("/mysite/lib/myfile.php");

但它不会找到该文件,因为它从文档根目录中获取它。所以它正在寻找

/mysite/content/mysite/lib/myfile.php instead of /mysite/lib/myfile.php

我无法创建根目录 /mysite,因为包含的文件是指根目录 mysite/content。任何想法如何解决这个问题?

【问题讨论】:

  • 你有没有第一个斜线的尝试?
  • 在需要时始终使用相对路径。否则你的代码永远无法移动!
  • 嗯,这是一个很大的网站,它们是绝对的,所以不能真正改变
  • @Sam,如果没有第一个斜杠,它将添加到服务器根目录的路径,并且 apache 错误,因为没有文件。
  • 好像在linux下可以,linux是否也检查根目录以及DocumentRoot?

标签: php windows apache


【解决方案1】:

您必须更改 php.ini 文件中的包含路径

【讨论】:

    【解决方案2】:

    当包含尝试使用完全限定的路径名​​时,这样您就不会在需要 php 文件时遇到这些问题。您可以将__DIR__ 常量与 realpath 结合使用,以建立一种根目录,然后包含您需要的内容。

    让我们假设根目录是 something/public 并且您想从 something/libs 中包含它。假设您在某些/公共的 index.php 中,您将执行以下操作:

    $rootPath = realpath(__DIR__ . "/../");
    require_once $rootPath . "/libs/somefile.php";
    

    我认为这应该可以帮助您解决问题。在 *nix 系统上,请注意您需要 apache 拥有 libs 目录的权限才能从那里读取。

    【讨论】:

      【解决方案3】:

      这个答案的本质是找到当前 index.php 位置并确定应用程序的基本路径,然后使用该基本路径,相对轻松地解决应用程序中的任何问题。

      您可以从 php 获取信息:下面的示例路径是针对 xampp 服务器设置的,您可能(可能)得到不同的结果,但它们(我希望)是正确的。

      $path = str_replace('\\','/',dirname(__FILE__));
      

      这将为您提供 index.php 的服务器相对路径,例如: 'd:/xampp/htdocs/mysite/content'

      然后您可以通过

      删除“内容”
      $path = substr($path, 0, strrpos($path,'/')+1);
      

      现在您将拥有类似应用程序根目录的内容:

      'd:/xampp/htdocs/mysite/'

      现在您可以通过以下方式访问 lib:

      require_once($path.'lib/myfile.php');
      

      希望这有帮助。

      【讨论】:

      • 我真的希望我没有误解你的问题。 :D
      【解决方案4】:

      这很可能是您的 php.ini 的问题。

      在您的 webroot 中创建一个名为 phpinfo.php 的文件,其内容为:

      <?php
      phpinfo();
      

      没有别的了。保存它然后在您的网络浏览器中加载它,您正在寻找两件事

      1. 安全模式
      2. open_basedir

      如果安全模式已开启,请将其关闭。如果 open_basedir 不是 none,请将其设置为 none。如果您出于某种原因无法编辑 php.ini,您可以在 .htaccess 中设置:

      php_admin_value open_basedir none
      

      来源
      http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-include-dir
      http://www.php.net/manual/en/ini.core.php#ini.open-basedir

      【讨论】:

        【解决方案5】:

        你可以在调用require_once("myfile.php");之前使用这样的东西:

        $base  = realpath(dirname(__FILE__) . '/../');
        $paths = array(
            $base . '/mysite/lib',
            '.',
            get_include_path()
        );
        
        set_include_path(implode(PATH_SEPARATOR, $paths));
        

        【讨论】:

          猜你喜欢
          • 2015-01-28
          • 2011-05-27
          • 2016-06-21
          • 1970-01-01
          • 2014-02-19
          • 2016-04-17
          • 2011-04-13
          • 1970-01-01
          • 2013-04-28
          相关资源
          最近更新 更多