php require_once 不起作用,关于php:require_once()或die()无法正常工作

有谁知道为什么我的require_once()或die(); 不管用。 总是显示致命错误,而不是我输入die()的错误消息。 请参阅以下代码:

require_once ('abc.php') or die("oops");

错误信息显示如下

"Fatal error: controller::require_once() [function.require]: Failed opening required '1' (include_path='....."

我键入的不是消息("哎呀")。

或具有比require / require_once更高的优先级。因此php评估

('abc.php') or die("oops")

在将结果传递给require_once之前。或采用两个布尔操作数。 ('abc.php')计算为true,因此整个表达式为true并且

require_once true;

被调用。 require_once接受一个字符串,bool(true)-> string => 1 =>

Failed opening required '1'

您在那里不需要or或die(...)。如果无法读取该文件,则require_once仍将停止php实例。

辉煌的答案。 需要强调的是require_once不是函数。 它是一元运算符(或语言构造,如果您愿意的话),因此echo,new,include等也是如此。

谢谢! 通过以一种似乎可以接受的方式添加die(),虽然有点糟糕,但它抛出一个错误,即看起来像找不到文件和/或要求它失败-或-包含文件中的错误...实际上是 require() or die()处的错误代码

由于include是一种特殊的语言构造而不是一种函数,因此它不需要参数表的括号:

Because include() is a special language construct, parentheses are not needed around its argument. Take care when comparing return value.

实际上,它只有一个参数,将其包装在其他括号中不会改变任何内容:

1 ≡ (1) ≡ ((1)) ≡ (((1))) ≡ …

因此,您的声明与此相同(参数包装器已包装):

require_once (('abc.php') or die("oops"));

因此,我们有一个布尔表达式作为参数,它为true或false。并且这些值分别具有等效于"1"和""的字符串:

var_dump((string) true ==="1");

var_dump((string) false ==="");

这就是为什么出现此错误的打开要求" 1"错误消息的原因。

但是像这样在正确的地方使用括号可以使它像您想要的那样工作:

(@include_once 'abc.php') or die("oops");

此处'abc.php'显然是参数,并且die("oops")的析取是对include_once的返回值执行的。如果文件不存在,则@运算符只是忽略错误消息includ_once将会抛出。

PS:print也是一种特殊的语言构造,其工作方式相同。

评估时:

require_once ('abc.php') or die("oops");

由于某种原因,PHP首先评估" OR die(" oops")"。

强制PHP评估" require_once('abc.php')",将其括在方括号中。

(require_once ('abc.php')) OR die("oops");

但是,如果" require"失败,PHP将停止处理,因此请改用" include"(请参阅??https://stackoverflow.com/a/2418514/1704651)。另外,include_once之前的@符号会禁止来自MySQL的错误消息,因此仅输出" oops"。

(@include_once ('abc.php')) OR die("oops");

可以正常工作。

资料来源:我自己的沮丧和https://bugs.php.net/bug.php?id=22342

包含或死亡也是我所使用的。 当您需要澄清文件丢失的原因时(例如,需要定义的配置文件),它很有用

将@放在include之前可能是个坏主意。 @include会抑制包含文件以及该文件包含的所有文件中的所有错误,这使故障排除和错误处理成为噩梦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值