Apache并行path文档根目录

我有一个网站设置在apache2(Windows 7),说我的DocumentRoot是/ mysite /内容

但是我也有一个并行目录,比如/ mysite / lib

所以我的index.php文件说:

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

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

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

我不能做根/ mysite,因为包含的文件是指根,mysite /内容。 任何想法如何解决这个问题?

你必须改变php.ini文件中的包含路径

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

让我们假设root目录是/ public,并且你想包含某些东西/ libs。 假设你在index.php中的东西/公共,你会做到以下几点:

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

我认为这应该有助于你的问题。 在nix系统上,要小心你需要apache拥有权限到libs目录才能从那里读取。

这个答案的本质是找到当前的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的/'

现在你可以通过只是说:

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

希望这是有帮助的。

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

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

 <?php phpinfo(); 

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

  1. 安全模式
  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");之前,你可以使用类似的东西require_once("myfile.php");

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