Apache并行路径文档根

时间:2013-03-01 15:54:08

标签: php windows apache

我在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

我无法创建root / mysite,因为包含的文件是指root,mysite / content。任何想法如何绕过这个?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

让我们假设根目录是/ public,你想要包含/ libs。假设您在某个/ public的index.php中,您将执行以下操作:

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

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

答案 2 :(得分:0)

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

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

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

这将为您提供index.php的服务器相对路径,例如: 'D:/ XAMPP / htdocs中/ mysite的/内容'

然后你可以通过

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

现在你将拥有类似于你的应用程序根目录的东西:

'd:/ XAMPP / htdocs中/ mysite的/'

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

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

希望这有用。

答案 3 :(得分:0)

这很可能是你的php.ini的一个问题。

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

<?php
phpinfo();

没有别的。保存它,然后将其加载到您的Web浏览器中,您正在寻找两件事

  1. safe_mode设置
  2. 的open_basedir
  3. 如果安装了safe_mode,请将其关闭。如果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

答案 4 :(得分:0)

您可以在调用require_once("myfile.php");之前使用此类内容:

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

set_include_path(implode(PATH_SEPARATOR, $paths));