include、include_once、require或require_once哪一个更好?

46
我有一个PHP文件,其中定义了服务器访问变量以及mysql_connect和mysql_select_db。由于这些函数在后端几乎每个页面都经常使用,我使用include(),目前它完美地为我工作。请问你建议使用哪种方法或函数?同时,我想知道如果我使用include()是否存在任何漏洞或是否安全? 编辑:请注意,我将使用$_SESSION变量。
8个回答

61

两者之间唯一的区别就是require及其姐妹函数require_once在文件未找到时将抛出致命错误,而includeinclude_once只会显示警告并继续加载页面剩余部分。如果您不希望PHP尝试在没有数据库信息的情况下加载页面的其余部分(我假设不希望这样),那么请使用require_once。您无需多次包含该文件,因此无需使用常规的require函数。


谢谢,我会使用require_once。是的,如果服务器访问变量出现问题,我希望脚本停止运行,因为在后端没有数据库连接时它没有任何意义。无论如何,我也可以这样使用:mysql_connect($host, $username, $password) or die(mysql_error()); 然后与include()一起使用,这也会强制脚本停止运行,和require_once一样,不是吗? - Ibrahim Azhar Armar
@Ibrahim Azhar Armar:是的,但为什么?我的意思是,你应该在任何情况下都有那种错误检查,但在这种情况下使用include没有任何意义。 - Sasha Chedygov
我同意并坚持使用require_once()。 - Ibrahim Azhar Armar

42

功能性工作:所有函数都执行类似的工作。在执行代码时,所有函数都会包含并评估特定文件。

功能性区别:

include vs include_once:include()和include_once()之间只有一个区别。如果代码已经包含了一个文件,那么如果我们使用include_once(),它将不会再次包含该文件。这意味着include_once()一次只包含一个文件。

include vs require:如果include()无法在指定的位置找到文件,则会抛出警告,但它不会停止脚本执行。对于相同的情况,require()将抛出致命错误并停止脚本执行。

require vs require_once:require()和require_once()之间只有一个区别。如果代码已经包含了一个文件,那么如果我们使用require_once(),它将不会再次包含该文件。这意味着require_once()一次只包含一个文件。

要获取详细的知识和示例,请查看这些精彩文章:
(1) http://www.readmyviews.com/include-vs-include-once/
(2) http://www.readmyviews.com/include-vs-require/


3

对于数据库连接变量,最好使用require_once()函数。如果连接失败,您可以显示失败消息。


1
如果您的页面没有数据库连接就无法工作,那么 require_once 将是唯一正确的选项(因为您不希望加载这些设置两次,只需加载一次即可)。即使设置文件不可用,include 也会尝试加载您的页面。

我也会使用 $_SESSION 变量,因为我正在处理后端,用户将根据会话授予访问权限,如果我使用 require_once(),这仍然足够好吗? - Ibrahim Azhar Armar

1
<?php

include('db.php');   

echo "<br>"."Included"."<br>";

include_once('db.php');

echo "<br>"."Again included"."<br>";

?>

在上面的代码中,我使用 include 语句在顶部包含了一个文件,该文件被包含。
接下来,我使用了 include_once 来包含相同的文件。但是由于文件已经在上面被包含过了,所以这里不会再次被包含。
输出:
Connected             -----This is from db.php File
Included

Again included


<?php

include_once('db.php');

echo "<br>"."Again included"."<br>";

include('db.php');

echo "<br>"."Included"."<br>";

?>

在上面的代码中,我使用了include_once,所以文件已被包含。

但在下一个代码中,我又对同一文件使用了include_once,那么该文件将再次被包含,输出结果为:

输出:

Connected
Again included
Connected
Included

0

Include include()语句包含并评估指定的文件。

Include Once include_once()语句在脚本执行期间包含并评估指定的文件。这与include()语句类似,唯一的区别是如果已经包含了文件中的代码,则不会再次包含。正如其名称所示,它只会被包含一次。

Require require()和include()在处理失败方面完全相同。它们都会产生一个警告,但require()会导致致命错误。换句话说,如果您希望缺少文件停止页面处理,请毫不犹豫地使用require()。

Require Once require_once()语句在脚本执行期间包含并评估指定的文件。这与require()语句类似,唯一的区别是如果已经包含了文件中的代码,则不会再次包含。


-1

使用require()更好。因为在脚本编译之前,文件已经被包含了。而include()则用于动态包含。


我不太确定你在这里想要表达什么,但它与OP的问题无关。 - Sasha Chedygov

-1
如果您在页面上包含多次,请使用include_once()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接