我正在尝试将在Apache 2.2上运行的旧Intranet站点移动到本地计算机上的WAMP设置(最新版本)。
我目前遇到的一个问题是require_once
路径无法打开,我无法确定原因是什么。
我安装了WAMP:
C:\Wamp
我更改了http.conf和vhosts.conf以从
更改文档根目录C:\Wamp\www
到
C:\Wamp\www\Intranet
此文件夹包含index.php
,我可以看到在浏览localhost时正确加载。
Index.php有一个从
加载welcome.php的iFrame/site/welcome.php
这可以在iFrame加载时起作用,但会抛出500错误。
启用PHP错误,iFrame中的welcome.php
页面在require_once
上给出了错误。 require_once
是:
/site/login/config.php.
正如您所看到的,我在这里使用绝对路径,因此index.php能够加载/site/welcome.php
这一事实告诉我它正在加载正确的文件:
C:\Wamp\www\Intranet\site\welcome.php
我希望我的require_once
能够加载绝对路径:
C:\Wamp\www\Intranet\site\login\config.php
哪个是有效的文件路径。
令我困惑的是,我使用的第一个绝对路径似乎是从文档根目录开始,而不是物理目录根目录。
我正在使用的第二个绝对路径似乎不是从文档根目录开始的。
更有趣的是,如果我更改require_once
:
/site/login/config.php
到
/login/config.php
它有效吗?!我不指望它,因为这表明我指定的绝对路径实际上是一条相对路径?
答案 0 :(得分:1)
我倾向于解决大多数include / require错误是通过设置变量路径:
$path = dirname(__FILE__);
include($path.'/file.php');
这可以防止您在不同的环境中遇到麻烦,在这种情况下是Windows和Linux。
甚至更好:
define('ROOTPATH', realpath(dirname(__FILE__) . '/'));
require ROOTPATH.'login/config.php';
另一件事,可能不会导致你的问题,但是做好练习就是设置DIRECTORY_SEPaRATOR
。
define('DS', DIRECTORY_SEPARATOR);
include(DS.'home'.DS.'www'.DS);
这将使PHP使用正确的斜杠(/
或\
)
答案 1 :(得分:1)
我不认为这条路径(var numbers = [];
var sum = 0;
for (var i = 3; i <= 100; i = i + 3) {
numbers[i] = i;
document.write("<br/>" + i);
sum = sum + i;
}
document.write("<br/>sum = " + sum);
)在Windows机器上有意义。
比硬编码完整文件路径更好,在运行时确定它。
E.g:
/site/login/config.php
然后包含您的配置文件,来自 welcome.php 将是:
define('ROOT_DIR', realpath(dirname(__FILE__)));
// because *nix and Windows path separators aren't the same (/ vs \)
define('DS', DIRECTORY_SEPARATOR);
// just for convenience sake, you could use DIRECTORY_SEPARATOR on its own.
我认为除了你在iframe声明中使用的路径(这是一个url路径)与你在require中使用的路径(这是一个文件系统路径)混淆。