因此,我的代码使用相对路径,但遇到了一些常见文件的问题,这些文件可能包含/要求来自不同的目录级别.
无论如何绝对路径更有效率,对吧?因此,我将所有include/require更改为绝对路径,使用require_once('http://' . $_SERVER['HTTP_HOST'] . 'file_name.php');
$_SERVER['HTTP_HOST']是对的,不是吗?当我用Google搜索时似乎如此.
这要求我在php.ini中设置'allow_url_include = on`并重启Apache.
所以,现在我的情况看起来像这样(简化示例):
File2.php包含
<?php
function hello()
{
echo 'hello<br>';
}
?>
Run Code Online (Sandbox Code Playgroud)
如果file1.php包含
<?php
require_once('file2.php');
hello();
?>
Run Code Online (Sandbox Code Playgroud)
然后我看到预期的输出"你好",但如果我改变那行
require_once('http://' . $_SERVER['HTTP_HOST'] . '/file2.php');
Run Code Online (Sandbox Code Playgroud)
然后我得到"致命错误:在C:\ xampp\htdocs\file1.php中调用未定义的函数hello()"
(我想对c:\ xammp\httdos的引用来自Xdebug,因为PhpInfo显示了HTTP_HOST localhost)
无论如何,这是一个很长的帖子,说我错过了一些简单的观点并询问它是什么.
当您require使用完整的URL时,PHP向服务器发出请求并获取PHP脚本的输出 - 这将不包含任何实际的PHP代码(除非脚本本身输出PHP代码).
此外,您不会在使用相对路径和绝对路径之间看到任何明显的性能差异,因此不要过于担心它.事实上,你的路径不是绝对路径,但绝对URI,并取出一个URI实际上将是方式比使用本地路径慢.
require_once需要服务器上的路径而不是URL。因此,例如,您不能通过http://www.foo.com/test.php,但可以通过/var/www/foo/test.php。如果您输入http://路径,则它将仅包含输出,而不包含php函数。