我们可以在变量名php中使用@符号

Roh*_*ani 5 php

我有一个来自其他开发人员的旧代码设置,我在我的服务器上设置相同,我看到了一行

<?php @$Days = $_POST['Days']; ?>
Run Code Online (Sandbox Code Playgroud)

这段代码在我的本地设置上运行良好,但是一旦我将其上传到服务器上,这就无法正常工作并返回网络错误,此代码后的所有代码/ HTML也无效.

虽然,我调试了这个问题并删除了这个.另外,我知道要处理错误,我们使用@符号,我也读过这个问题

我的疑问是上面的错误是什么,为什么没有显示,如果我想检查错误那么我该怎么做.

对于错误报告,我会告诉您我已经使用了以下代码

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>
Run Code Online (Sandbox Code Playgroud)

所以请告诉我为什么我的代码无法通过此声明,因为我有大约100个这样的代码块.php中是否有任何设置可以帮助我克服这个问题.

Ric*_*out 4

@是PHP中的错误抑制运算符,请查看文档

在您的示例中,它在变量名之前使用以避免出现 E_NOTICE 错误。如果在 $_POST 数组中,未设置 'Days' 键,它将抛出 E_NOTICE 消息,但在那里使用 @ 来避免 E_NOTICE。

代码无法在服务器上运行的原因可能是由于php.ini配置中的 eager.enabled 指令被禁用。

禁用scream应该可以解决问题。

更改 php.ini 中的指令,如下所示:

scream.enabled = 0
Run Code Online (Sandbox Code Playgroud)

如果你想在运行时禁用它,那么你可以使用 ini_set,如手册中所述:

ini_set('scream.enabled', false);
Run Code Online (Sandbox Code Playgroud)

编辑

评论中有人指出我的回答不够彻底。我会尝试在这里修改我的错误:)。

尖叫(并禁用@)可以/将破坏代码的原因是由于该变量没有值。如果代码的其余部分尝试使用该变量,它将引发错误。

此外,如果您向 E_NOTICE 附加错误处理程序,则 E_NOTICE 可能会引发错误。引用另一个问题

每当引发 E_NOTICE 或 E_WARNING 时,上面的代码都会抛出 ErrorException,从而有效地终止脚本输出(如果未捕获异常)。对 PHP 错误抛出异常最好与并行异常处理策略 (set_exception_handler) 结合起来,以便在生产环境中优雅地终止。

  • 通知不会停止执行,即使我们没有尖叫,所以我不确定这是否真的有帮助。 (2认同)