我想这个密码是:
if(file_exists("amodule.inc.php"))
require_once("amodule.inc.php"); 由于require_once的使用而产生误导。
我认为--为了使逻辑和“措辞”保持一致-- "include_once“是恰当的(如果有一些论点根本不使用"if”,但我想集中讨论“要求vs包括”)。
就我的理解而言,“要求”和“包括”之间的唯一区别是,如果文件不存在,则要求有结果(停止),而只包含一个警告。
但是,在本例中,如果文件不存在,require_once代码无论如何都不会执行。因此,“要求”在我看来是个误导。
从表面上看,可以认为上面的代码使用了require_once和
if(file_exists("amodule.inc.php"))
include_once("amodule.inc.php");在我看来是“相同的”什么不是。因为:
“粗略”分析(如项目的自动检查)会抛出一条消息,即"amodule.inc.php“是一个重要的项目文件,而代码显示的情况并非如此。
此外,在执行"if“语句和require_once语句之间的cas (不太可能)中,可以删除文件。更糟糕的是,代码不会像预期的那样执行(在没有加载的情况下运行),而是放弃了。
那么,你们会怎么争论呢?
发布于 2013-10-06 14:33:35
关于第一个区别,你是对的。Include和require是相同的,但是如果缺少文件,require将停止程序运行,而include将继续运行并显示错误。
来自PHP手册的
require与include相同,除非失败,否则也会产生致命的E_COMPILE_ERROR级别错误。换句话说,它将停止脚本,而include只发出一个允许脚本继续的警告(E_WARNING)。
因此,如果您有大量的参数,那么,是的,include_once会更好,但如果没有看到代码,它将取决于您想要发生什么,如果文件丢失了。
发布于 2013-10-08 08:34:16
文件存在的事实并不意味着它是可读的,这是第一个问题:
http://php.net/manual/en/function.is-readable.php
包括发生的其他一些奇怪的事情,例如:
http://php.net/file_存在
警告此函数对于由于安全模式限制而无法访问的文件返回FALSE。但是,如果这些文件位于safe_mode_include_dir中,则仍然可以包含它们。
因此,检查file_exists是最著名的,但可能不是最正确的方法,以确定您是否可以包括一个文件。
这似乎是正确的解决办法:
http://php.net/stream_解决_包括_路径
根据与fopen()/ include相同的规则解析包含路径的文件名。
这将真正检查您是否可以包含该文件。
然后:如果你需要它:是的,在大多数情况下。如果类文件存在且可包含在加载之外,则应成功加载。如果php文件无法正确加载,在我看来,服务器/软件存在一个大问题,我们称之为致命问题。因此,对我们来说,使用require_once是有效的。
https://softwareengineering.stackexchange.com/questions/213713
复制相似问题