【发布时间】:2011-05-08 20:22:41
【问题描述】:
所以,我的代码使用了相对路径,但遇到了一些常见文件的问题,这些文件可能被不同目录级别包含/需要。
无论如何,绝对路径更有效,对吧?因此,我使用require_once('http://' . $_SERVER['HTTP_HOST'] . 'file_name.php'); 将所有包含/要求更改为绝对路径
$_SERVER['HTTP_HOST'] 是正确的,不是吗?当我用谷歌搜索时,似乎是这样。
这需要我在 php.ini 中设置“allow_url_include=on”并重新启动 Apache。
所以,现在我的情况看起来像这样(简化示例):
File2.php 包含
<?php
function hello()
{
echo 'hello<br>';
}
?>
如果 file1.php 包含
<?php
require_once('file2.php');
hello();
?>
然后我会看到预期的输出“hello”,但是如果我将该行更改为
require_once('http://' . $_SERVER['HTTP_HOST'] . '/file2.php');
然后我得到“致命错误:调用 C:\xampp\htdocs\file1.php 中未定义的函数 hello()”
(我猜c:\xammp\httdos的引用来自Xdebug,因为PhpInfo显示HTTP_HOST localhost)
无论如何,这是一个很长的帖子,说我遗漏了一些简单的点并询问它是什么。
【问题讨论】:
-
我什至没有阅读整个问题,但要求远程文件总是一个坏主意。
-
顺便说一句,
echo file_get_contents('http://' . $_SERVER['HTTP_HOST'] . '/file2.php');得到什么? -
@Mawg:用 FQU 包含文件而不是本地路径的原因是什么?
-
@Mawg:实际上并非如此。通常的做法是定义一个具有应用程序根目录绝对路径的常量,并根据该基本常量组合路径。即: require_once BASE_PATH 。 'path/to/concrete/file.php;`
-
@Mawg:该常量应该在某种“config”/“bootstrap”/“index”文件中只定义一次,无论您拥有并在其他所有文件中使用。
标签: php