使用完全限定的URL时出现require()问题

Maw*_*awg 1 php

因此,我的代码使用相对路径,但遇到了一些常见文件的问题,这些文件可能包含/要求来自不同的目录级别.

无论如何绝对路径更有效率,对吧?因此,我将所有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)

无论如何,这是一个很长的帖子,说我错过了一些简单的观点并询问它是什么.

cas*_*nca 7

当您require使用完整的URL时,PHP向服务器发出请求并获取PHP脚本的输出 - 这将不包含任何实际的PHP代码(除非脚本本身输出PHP代码).

此外,您不会在使用相对路径和绝对路径之间看到任何明显的性能差异,因此不要过于担心它.事实上,你的路径不是绝对路径,但绝对URI,并取出一个URI实际上将是方式比使用本地路径慢.


Ami*_*far 5

require_once需要服务器上的路径而不是URL。因此,例如,您不能通过http://www.foo.com/test.php,但可以通过/var/www/foo/test.php。如果您输入http://路径,则它将仅包含输出,而不包含php函数。