我在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
我无法创建root / mysite,因为包含的文件是指root,mysite / content。任何想法如何绕过这个?
答案 0 :(得分:1)
您必须更改php.ini文件中的包含路径
答案 1 :(得分:1)
当包括尝试使用完全限定的路径名时,这样你就不会在需要php文件时遇到这些问题。您可以将__DIR__
常量与realpath结合使用,以便建立根目录的种类,然后包括您需要的内容。
让我们假设根目录是/ public,你想要包含/ libs。假设您在某个/ public的index.php中,您将执行以下操作:
$rootPath = realpath(__DIR__ . "/../");
require_once $rootPath . "/libs/somefile.php";
我认为这应该有助于解决您的问题。在* nix系统上要注意,你需要apache才能拥有对libs目录的权限,以便从那里读取。
答案 2 :(得分: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');
希望这有用。
答案 3 :(得分:0)
这很可能是你的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
答案 4 :(得分:0)
您可以在调用require_once("myfile.php");
之前使用此类内容:
$base = realpath(dirname(__FILE__) . '/../');
$paths = array(
$base . '/mysite/lib',
'.',
get_include_path()
);
set_include_path(implode(PATH_SEPARATOR, $paths));