Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:使用include处理错误_Php_Error Handling_Include - Fatal编程技术网

PHP:使用include处理错误

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的一个好用法。如果需要

在第一条语句中,我们没有将()放在@fopen周围,它工作得很好。 但是在第二个例子中,如果我没有放这些(),它不会显示任何消息


那么为什么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");