我有一个来自其他开发人员的旧代码设置,我在我的服务器上设置相同,我看到了一行
<?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中是否有任何设置可以帮助我克服这个问题.
@是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) 结合起来,以便在生产环境中优雅地终止。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |