我在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();
没有别的了。保存它,然后加载到你的浏览器中,你正在寻找两个东西
- safe_mode
- 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));