标签: error-reporting

即使使用error_reporting(0),PHP会回显错误的原因是什么?

PHP会强制显示错误的原因是什么,无论你告诉它禁用什么?

我试过了

error_reporting(0);
ini_set('display_errors', 0); 
Run Code Online (Sandbox Code Playgroud)

没有运气.

php error-reporting ini-set

11
推荐指数
1
解决办法
5万
查看次数

E_ALL的重点是什么?E_STRICT如果它与E_ALL的值相同?

  • E_ALL等于8191(0001 1111 1111 1111)
  • E_STRICT等于2048(0000 1000 0000 0000)

使用按位OR组合它们:

1 1111 1111 1111
  1000 0000 0000
Run Code Online (Sandbox Code Playgroud)

我们得到与原始值完全相同的E_ALL:

1 1111 1111 1111
Run Code Online (Sandbox Code Playgroud)

什么是做的点error_reporting(E_ALL | E_STRICT),如果我们可以简单做error_reporting(E_ALL)来获得同样的事情?

php error-reporting

11
推荐指数
1
解决办法
7994
查看次数

PHP error_reporting(0)会影响错误记录,还是仅显示?

是否error_reporting(0);有错误记录(到文件)任何影响,还是只是禁止在屏幕上显示错误?

谢谢.

php error-logging error-reporting

11
推荐指数
1
解决办法
4382
查看次数

E_NOTICE?== E_DEBUG,避免使用更复杂的error_handler的isset()和@

有哪些更好的方法可以避免isset()应用程序逻辑中的大量内容,并且需要保留查看调试消息(E_NOTICE)的能力?

首先推定:E_NOTICE不是错误,它是用词不当,实际上应该是E_DEBUG.然而,虽然这对于未设置的变量(PHP仍然是脚本语言)是正确的,但是一些文件系统函数等也会抛出它们.因此,需要开发 E_NOTICEs.

然而,并非所有调试通知都是有用的,这就是为什么在整个应用程序逻辑中引入isset()和@ 是一个常见的(不幸的)PHP习惯.isset/empty肯定有很多有效的用例,但总的来说它似乎是语法盐,实际上可能阻碍调试.

这就是我目前使用error_reporting书签和哑开/关开关的原因:

// javascript:(function(){document.cookie=(document.cookie.match(/error_reporting=1/)?'error_reporting=0':'error_reporting=1')})()

if (($_SERVER["REMOTE_ADDR"] == "127.0.0.1")
    and $_COOKIE["error_reporting"])
{
    error_reporting(E_ALL|E_STRICT);
}
else {/* less */}
Run Code Online (Sandbox Code Playgroud)

然而,这仍然让我有一个问题,即一旦启用就有太多通知来搜索.作为解决方法,我可以使用@ error suppress运算符.与isset()不同,它不会完全终止调试选项,因为自定义错误处理程序仍然可以接收抑制的E_NOTICE.因此,将预期的调试通知与潜在问题分开可能会有所帮助.

然而,这同样令人不满意.因此问题.有没有人使用或知道更复杂的PHP错误处理程序.我在想象:

  • 输出未过滤的错误/警告/通知(使用CSS绝对定位?)
  • 和AJAX-whatnot允许客户端检查和抑制
  • 但也保存了预期和" 已批准 "通知或警告的过滤列表.

当然,某些框架必须已经有这样的用户错误处理程序.

  • 基本上我对警告/通知管理很感兴趣.
  • 完全没有E_NOTICE抑制.
  • E_NOTICES 通缉.只是少了一些.默认情况下突出显示我可能关心的,而不是预期的.
  • 如果我在没有?order =参数的情况下运行,则会出现预期的NOTICE.由于预期,我不需要多次通知.
  • 但是,当处于完全调试模式时,我希望通过所述调试通知的存在(或更有趣的缺失)来看到存在未定义的变量. - >这就是我认为它们的用途.避免使用isset带来语言隐含的打印语句.
  • 还要意识到这是关于普通PHP表单处理语义适用的用例,而不是严格必须的应用程序区域.

哦,我有人请帮助改写这个.冗长的解释失败了.

php error-reporting

11
推荐指数
3
解决办法
1291
查看次数

php错误报告未初始化的字符串偏移量:0

我正在做一些PHP的东西,而不是它是调试模式.所以我就是我们

error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问字符串的任何字符时,由于错误报告而导致错误.

$sentence = "Hello World"; 
$sentence[0]   //Uninitialized string offset: 0
Run Code Online (Sandbox Code Playgroud)

编辑:

public static function prepareSentence($sentence)
{
    $sentence = trim($sentence);
    if ($sentence[0] == '"')  //Uninitialized string offset: 0 
        $sentence = substr($sentence, 1, strlen($sentence));

    if ($sentence[strlen($sentence) - 1] == '"')
        $sentence = substr($sentence, 0, -1);

    if ($sentence[0] == '"' || $sentence[strlen($sentence) - 1] == '"')
        return self::prepareSentence($sentence);
    return $sentence;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能在开发模式下工作.我需要error_reporting(E_ALL);

提前致谢.

php error-reporting

11
推荐指数
1
解决办法
4万
查看次数

为什么PHP 5.2.14不会显示任何错误(甚至从命令行)?

我在Windows 2008 R2服务器和Windows 7 64位上安装了PHP 5.2.10和PHP 5.2.14(x86非线程安全的Win32版本).

出于某种原因,PHP 5.2.14拒绝显示错误消息.

即使我设置了以下设置,php.ini如果我使用5.2.14,也不会报告任何错误:

error_reporting = E_ALL
display_errors = On
Run Code Online (Sandbox Code Playgroud)

即使在使用php.exe故意语法错误从命令行运行测试脚本时,也会发生这种情况:

C:\ PHP>php test.php

PHP正在使用正确的php.ini文件,因为我可以在运行时看到我的设置发生变化php.exe -i.

我还注意到php.exe在PHP 5.2.14中启动非常慢.

当我在同一台机器上使用PHP 5.2.10执行相同的测试集时,我收到错误消息报告就好了.

这两个php.ini文件都是库存(基于php.ini-recommended),但修改了error_reportingdisplay_errors设置.

php error-handling configuration error-reporting

10
推荐指数
3
解决办法
1万
查看次数

使用delayed_job发送电子邮件时报告错误

当使用AirBrake或ExceptionNotifier等工具发送延迟的作业时,获取错误报告的正确方法是什么?

我试图创建自己的延迟作业类,但由Mailer.welcome()(或类似)创建的邮件对象未正确序列化.我也尝试error(job, exception)PerformableMailerPerformableMethod类中添加一个方法,但是我认为通常与序列化相关的错误更多.我为序列化尝试了psych和sych.

error-reporting delayed-job ruby-on-rails-3 airbrake exception-notifier

10
推荐指数
1
解决办法
1400
查看次数

PHP 5.4:禁用警告"从空值创建默认对象"

我想将代码从PHP 5.2迁移到5.4.到目前为止这个工作正常,只是我使用的所有代码都广泛使用了一个没有任何初始化的成员的对象,如:

$MyObject->MyMember = "Hello";
Run Code Online (Sandbox Code Playgroud)

这会产生警告:"从空值创建默认对象"

我知道解决方案是使用:

$MyObject = new stdClass();
$MyObject->MyMember = "Hello";
Run Code Online (Sandbox Code Playgroud)

但是在我的所有代码中改变这一点将是很多工作,因为我在不同的项目中多次使用它.我知道,这不是很好的风格,但遗憾的是,我无法在接下来的几周内将其添加到我的所有代码中.

我知道我可以将php error_reporting设置为不报告警告,但我希望能够仍然获得其他警告和通知.启用或禁用E_STRICT似乎不会影响此警告.那么有没有办法禁用此警告?!

php error-reporting

10
推荐指数
1
解决办法
5万
查看次数

在Objective-C中由于整数溢出而处理和报告内存分配错误的最佳方法是什么?

首先,让我说我理解我所描述的问题是如何以及为什么会发生的.我是计算机科学专业,我理解溢出/下溢和签名/无符号算术.(对于那些不熟悉该主题的人,Apple的安全编码指南会简要讨论整数溢出.)

我的问题是关于在检测到这种错误后报告和恢复,更具体地说是在Objective-C框架的情况下.(我编写和维护CHDataStructures.)我有一些集合类,它们分配用于存储对象的内存并根据需要动态扩展.我还没有看到任何与溢出相关的崩溃,可能是因为我的测试用例主要使用了理智的数据.但是,给定未经验证的值,事情可能会很快爆炸,我想阻止它.

我已经确定了至少两种可能发生这种情况的常见情况:

  1. 调用者将非常大的无符号值(或负符号值)传递给-initWithCapacity:.
  2. 添加了足够的对象以使容量动态扩展,并且容量已经增大到足以导致溢出.

简单的部分是检测是否会发生溢出.(例如,在尝试分配length * sizeof(void*)字节之前,我可以检查是否length <= UINT_MAX / sizeof(void*),因为未通过此测试将意味着产品将溢出并可能分配比预期更小的内存区域.在支持它的平台上,checkint.h API是另一种选择.)更难的部分是确定如何优雅地处理它.在第一种情况下,呼叫者可能更好地(或至少在思维模式中)处理故障.第二种情况可能发生在代码中将对象添加到集合中的任何位置,这可能是非常不确定的.

那么,我的问题是:在这种情况下,当整数溢出发生时,"好公民"Objective-C代码如何表现?(理想情况下,由于我的项目是一个与Cocoa中的Foundation基本相同的框架,我想建模它的行为方式以获得最大的"阻抗匹配".我发现的Apple文档中没有提及太多所有这一切.)我认为,无论如何,报告错误是给定的.由于添加对象的API(可能导致方案2)不接受错误参数,我可以做些什么来帮助解决问题,如果有的话?在这种情况下,真正考虑的是什么?如果我能做得更好,我不愿意故意编写容易崩溃的代码......

memory-management error-reporting objective-c integer-overflow

9
推荐指数
1
解决办法
622
查看次数

无法让PHP报告错误

我看不到任何PHP错误.我已经尝试了我可以找到的每个技巧来打开错误报告,但没有任何作用.

display_errors已打开且error_logging已打开,但当我查看任何有错误的页面时,我得到一个空白页面.

/var/log/php.log不存在.

如果我设置了本地日志文件,则无法创建任何内容.

我一直在测试的文件是

<?php
ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);
ini_set('error_log','script_errors.log');
ini_set('log_errors','On');


$a=

phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

php error-reporting

9
推荐指数
1
解决办法
1万
查看次数