Apache平行路径文档根目录


Apache Parallel Path Document Root

我在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/内容。有什么好办法吗?

必须更改php.ini文件中的include路径

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

让我们假设根目录是something/public,你想包含from something/libs。假设您在index.php中从某些/public中找到您将执行以下操作:

$rootPath = realpath(__DIR__ . "/../");
require_once $rootPath . "/libs/somefile.php";
我想这应该能解决你的问题。在*nix系统上,要注意这样一个事实,即您需要apache对libs目录具有权限才能从那里读取。

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

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

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

这将给你index.php的服务器相对路径,例如:' d:/xampp/根/mysite/内容"

则可以通过

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

现在你会得到类似的东西这是你的应用程序根目录:

' d:/xampp/根/mysite/'

现在你可以通过输入

来访问lib:
require_once($path.'lib/myfile.php');

希望对大家有帮助

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

在web浏览器中创建一个名为phpinfo.php的文件,内容为:

<?php
phpinfo();

没有别的了。保存它,然后加载到你的浏览器中,你正在寻找两个东西

  1. safe_mode
  2. open_basedir

如果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

在调用require_once("myfile.php");:

之前,您可以使用如下代码:
$base  = realpath(dirname(__FILE__) . '/../');
$paths = array(
    $base . '/mysite/lib',
    '.',
    get_include_path()
);
set_include_path(implode(PATH_SEPARATOR, $paths));