PHP:使用include处理错误
在第一条语句中,我们没有将()放在@fopen周围,它工作得很好。 但是在第二个例子中,如果我没有放这些(),它不会显示任何消息PHP:使用include处理错误,php,error-handling,include,Php,Error Handling,Include,在第一条语句中,我们没有将()放在@fopen周围,它工作得很好。 但是在第二个例子中,如果我没有放这些(),它不会显示任何消息 那么为什么include必须用() 您应该使用文件\u exists而不是使用@,因为后者涵盖了各种问题。更好的解决办法是 $file= @fopen("ssssss.php", r) or die("not found"); (@include("ssssss.php")) or die("not found"); 及 这并不是include的一个好用法。如果需要
那么为什么include必须用() 您应该使用
文件\u exists
而不是使用@
,因为后者涵盖了各种问题。更好的解决办法是
$file= @fopen("ssssss.php", r) or die("not found");
(@include("ssssss.php")) or die("not found");
及
这并不是include的一个好用法。如果需要包含php文件并在失败时生成错误,请使用
require
或require\u一次
如果需要获取整个文件的内容,可以使用file\u get\u contents()
此外,我同意Nigel Ren关于使用@
-这是一种危险的做法,应该避免。我同意其他答案中的建议,但您问题的实际答案是:
在PHP文档中,他们说在比较include的返回值时要小心
这是因为它是一个特殊的构造,不需要括号
因此,当您执行此操作时(不使用环绕括号):
实际上是这样做的,因为或
首先计算:
@include("ssssss.php") or die("not found");
现在,“ssss.php”是一个非空字符串,其逻辑计算结果为true
或
是一个逻辑运算符,如果其中任何一个参数为真(或两者都为真),则该运算符将给出真。
此外,这个操作符是短路的:如果第一个参数为true,php已经知道操作符或
将返回true,因此它不会浪费时间计算第二个参数,并且不会执行die()
最后,或
给出了true,你的句子如下:
@include (("ssssss.php") or die("not found"));
Php试图“包含1”,它会发出警告,但由于@
,它不会发出警告
给你一张支票
你的第一句话不一样
@include (1);
fopen
只是一个带有括号的普通Php函数。这里您需要记住两个运算符:=
和或
=
的值大于或
,因此,如果fopen的结果被正确地分配给$file
(确实如此),则该操作将返回true。而且,正如我之前解释的,“true或
其他任何内容”,给出了true,但由于短路运算符,die()未执行。谢谢Rich,我不关心获取文件内容。我只是想知道这两条语句在错误处理方面的区别。我注意到Include使用了特殊的方式,所以我想找出背后的原因谢谢奈杰尔。这两种说法根本不相关。它们是分开的。唯一相关的是错误处理。这是我的问题。为什么我必须将()与include一起使用,而另一个不能!PHP中有很多东西是不可预测和“奇怪”的。但是使用包含或die
逻辑是不好的做法。我认为在任何地方使用die
都是不好的做法,你应该把更多的精力放在好的做法上,而不是试图找出为什么这很奇怪。非常感谢@nanocv。我现在明白了。但是为什么它会变成“@include(1)”?但是同样的概念也可以应用于第一个代码!!:<代码>$file=@fopen((“ssss.php”,r)或die(“未找到”)代码>但它没有!!!不客气@Mahmoud!我编辑了我的答案,在两条评论中解释了你的问题(记录在案)。希望有帮助!那太好了。回答得很好。我非常感激。最后一个问题,“ssss.php”的逻辑计算结果是否始终为true?甚至这个文件都不存在?这不是有点奇怪吗?!!是的,总是这样。在这种情况下,php看不到文件名,它只看到一个字符串。如果尝试执行此操作,如果(“hello.php”)
,则条件始终为true。字符串仅在为空或“0”时计算为false。很乐意帮忙!
@include (("ssssss.php") or die("not found"));
@include (1);
$file= @fopen("ssssss.php", r) or die("not found");