有没有办法在PHP中集中处理错误报告?我希望通过电子邮件通知我的申请引发的所有错误.
在整个应用程序中实现此目的的最佳方法是什么?
谢谢
在PHP中从MySQL切换到PDO.在过去,当一个查询被运行并且由于某种原因没有被执行时,我能够向自己发送一封包含mysql_error()消息的电子邮件,如下所示:
$query = "SELECT dogs FROM animals";
$res = mysql_query($query);
if (!$res) {
$error = "Error Message: " . mysql_error();
mail("my@email.com","Database Error",$error);
}
Run Code Online (Sandbox Code Playgroud)
从那时起,当网站上的数据库出现问题时,我会被emil警告.
我的PDO设置如下:
setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
Run Code Online (Sandbox Code Playgroud)
我有一个尝试catch在PDO连接本身,但我想得到准备和执行的错误消息,因为它们发生如下:
$query = "SELECT cats FROM animals";
$sql = $pdo->prepare($query);
if (!$sql->execute()) {
$error = "Error Message: " . (pdo error message here);
mail("my@email.com","Database Error",$error);
}
Run Code Online (Sandbox Code Playgroud)
有关如何在电子邮件主题中分配PDO错误消息的任何想法?如果准备失败使用errorInfo()但是执行错误(例如数组的无效参数计数),我能够得到一条逻辑错误消息,我似乎无法收到错误消息.
感谢您的帮助.
这就是我告诉 php 要做的:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
ini_set('error_append_string', 'APP');
ini_set('error_prepend_string', 'PRE');
?>
Run Code Online (Sandbox Code Playgroud)
希望我能在一个文件中报告所有错误,在消息之前使用“PRE”,在消息之后使用“APP”。(我的目标是将 PRE 和 APP 变成 /n /r 之类的……)
但我的错误报告日志如下所示:
[14-May-2013 00:16:26] PHP 通知:未定义变量:第 14 行 /home/www/dir/index.php 中的 nonexistentvariable [14-May-2013 00:16:28] PHP 通知:未定义变量:第 14 行 /home/www/dir/index.php 中不存在变量
没有PRE,没有APP...
我如何将它放入那里,以便我的错误报告文件将每个错误都放在换行符上,而不是一串对我没有帮助的错误?
编辑: 所以我注意到 ini_set('display_errors', '1'); “APP”和“PRE”字符串是显示在页面上的错误消息中。
这意味着我真的需要找出我可以在哪里更改 php 如何记录错误的格式。例如整个时间戳的事情 - 在哪里指定?
编辑: 无法更改 php 记录错误的方式,您必须制作自己的错误处理程序。
回答: 为了真正实现我的目标,我提出了一个不同的问题(更准确地说)。 如何更改 PHP 在错误日志文件中写入错误的方式?
引用Django文档:
@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
UserProfile.create(user=request.user,
password=request.POST['pass_word'],
credit_card=request.POST['credit_card_number'],
name=request.POST['name'])
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,pass_word和credit_card_number POST参数的值将被隐藏,并在错误报告内的请求表示中用星号(******)替换,而name参数的值将被公开。
要在错误报告中系统地隐藏请求的所有POST参数,请不要向sensitive_post_parameters装饰器提供任何参数:
@sensitive_post_parameters()
def my_view(request):
...
Run Code Online (Sandbox Code Playgroud)
作为测试,我将以下代码添加到了Django 1.6应用程序中:
views.py:
@sensitive_post_parameters('sensitive')
def sensitive(request):
if request.method == 'POST':
raise IntegrityError(unicode(timezone.now()))
return render(request, 'sensitive-test.html',
{'form': forms.SensitiveParamForm()})
Run Code Online (Sandbox Code Playgroud)
forms.py:
class SensitiveParamForm(forms.Form):
not_sensitive = forms.CharField(max_length=255)
sensitive = forms.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
当我通过提交此表单时POST,我可以sensitive在Sentry报告中看到两个字段(包括)的值清除为当天。
我在这里做错了什么?我正在使用Django 1.6和Raven 3.5.2。
在此先感谢您的帮助!
我有一个web-app(2.5 servlet规范),一个spring dispatcherservlet处理任何正在/ error/*上的内容和一个错误页面,配置为将其路由到/ error /这样的东西:
<servlet>
<servlet-name>errorServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>errorServlet</servlet-name>
<url-pattern>/erorr/*</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/erorr/</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
和errorServlet-servelt.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<context:component-scan base-package="some.base.package"/>
<bean id="simpleUrlController" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/*">errorController</prop>
</props>
</property>
</bean>
<bean id="errorController" class="ErrorController">
<property name="formView" value="formView"/>
<property name="commandClass" value="Error"/>
<property name="commandName" value="errorNAMe"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
我需要帮助的地方:
我来自J2EE背景,似乎PHP开发人员通常使用以下语句来关闭和忽略通知:error_reporting(E_ALL&~E_NOTICE);
我正在使用的应用程序充满了关于未设置变量的消息?这对我来说似乎很奇怪.
我正在编辑.htaccess文件,以便对我的php.ini文件进行一些覆盖(我无法访问它).到目前为止,我已添加:
php_value max_execution_time 600
php_value error_reporting E_WARNING
php_value log_errors Off
Run Code Online (Sandbox Code Playgroud)
我正在编辑的应用程序(vTiger CRM)建议将"error_reporting"设置为"E_WARNING&~E_NOTICE".当我输入该值时,我最终得到错误500.如何添加正确的error_reporting值?谢谢.
自从我的测试服务器更新到PHP 5.3.3(Debian Squeeze)后,我遇到了关于PHP中错误报告的奇怪行为.
我像这样设置error_reporting:
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
并通过检查设置
echo error_reporting();
Run Code Online (Sandbox Code Playgroud)
与之相呼应30719.根据php.net,这意味着"所有错误和警告,如支持,除了级别E_STRICT.".
但是在下一行(类定义abstract class formInputContainer extends formContainer implements formElementValueable { ... })中,这会产生以下消息:
严格(2048):formInputContainer :: addElement()的声明应该与formContainer :: addElement()的声明兼容
为什么E_STRICT消息虽然未设置但仍会回显?即使更改为E_ALL&~E_STRICT也无济于事.
我在PHP中使用严格的标准选项,但我想禁用它,因为Joomla不喜欢它,我必须在我的localhost上使用Joomla.
在回答本网站上的另一个问题时,给出了这个解决方案:E_ALL & ~E_DEPRECATED & ~E_STRICT但这对我不起作用.我认为它只适用于PHP 5.4,而我使用的是5.3.8.
谁能告诉我应该用什么?我目前正在使用error_reporting(E_ALL & ~E_NOTICE).我也在使用,ini_set('display_errors')但仍然显示与严格标准相关的错误.
那么如何禁用严格的标准错误呢?
我尝试在我的非framework-php项目中设置Sentry.它就像一个魅力,但有一件事困扰着我:
代码非常不严格且容易出现问题.设想为每个用户点击发送有时50个通知哨兵似乎是一个很大的开销.(不,不幸的是,修复所有这些事情不在预算中!)
所以我的问题是:有没有办法告诉哨兵发送级别WARNING及以上的错误?
这是我的代码:
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
require_once 'Raven/Autoloader.php';
Raven_Autoloader::register();
$client = new Raven_Client('myurl');
$error_handler = new Raven_ErrorHandler($client);
$error_handler->registerExceptionHandler();
$error_handler->registerErrorHandler();
$error_handler->registerShutdownFunction();
Run Code Online (Sandbox Code Playgroud)