我有一个网站设置在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浏览器中,您正在寻找两件事情
如果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));