2013-03-01 179 views
1

我有一个网站的Apache2(Windows 7)中设置了,说我的DocumentRoot是/ mysite的/内容阿帕奇平行路径文档根

,但我也有包括在并行的目录,说/ mysite的/ lib目录

所以我的index.php文件说:

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

,而是因为它需要它的文档根目录也不会找到该文件。因此它正在寻找

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

而且由于包含的文件指的是根,mysite的/内容我不能让根/ mysite的。任何想法如何解决这个问题?

+0

您是否尝试过不使用fi第一个斜线? – Sam 2013-03-01 15:56:54

+0

需要时始终使用相对路径。否则,您的代码将无法移动! – arkascha 2013-03-01 16:04:57

+0

好吧,这是一个大型网站,它们是绝对的,所以不能真正改变 – 2013-03-01 16:07:01

回答

1

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

1

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

让我们假设root目录是/ public,并且您想要从某些/ libs包含。假设你在index.php文件中,你需要执行以下操作:

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

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

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'); 

希望这是有帮助的。

+0

我真的很希望我没有误解你的问题。 :d – Ihsan 2013-03-08 08:41:04

0

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

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

<?php 
phpinfo(); 

而没有别的。保存它,然后它加载到你的网页浏览器,你正在寻找两件事情

  1. 的safe_mode
  2. 的open_basedir

如果safe_mode设置为on,将其关闭。如果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

0

你可以在致电require_once("myfile.php");之前,请使用以下内容:

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

set_include_path(implode(PATH_SEPARATOR, $paths));