我试图在IIS下安装我的PHP以显示错误,但我根本没有运气.我试过了
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
在脚本中,没有任何显示,只是一个空白屏幕.
我尝试编辑我的PHP.ini文件和设置
error_reporting = E_ALL
display_errors = On
Run Code Online (Sandbox Code Playgroud)
也试过了
error_reporting = E_ALL
display_errors = stdout
Run Code Online (Sandbox Code Playgroud)
但是当我的脚本出错时,屏幕上根本没有显示任何内容.
有什么建议?
每当调用未定义的函数时,都不会记录错误.而是脚本停止执行.更糟糕的是,如果我运行php -l filename.php,它会显示没有语法错误.我正在使用自定义错误处理程序函数,但即使是第一行也永远不会到达.
当调用未定义的函数时,如何让它运行我的错误处理程序?
我使用的是PHP 5.3.2-1.以下是设置错误处理程序的代码:
error_reporting(-1);
$old_error_handler = set_error_handler( "userErrorHandler" );
set_exception_handler('exception_handler');
Run Code Online (Sandbox Code Playgroud)
虽然它们确实适用于其他错误,但都没有到达错误处理程序和异常处理程序.
我想要这个的原因是我最终不得不在我的代码中放置调试语句以查看它在停止执行之前得到多远这是一个缓慢的过程,而错误消息会告诉我错误信息的文件和行号.
我有一个基于来自网站的自定义示例的plupload实例,除了显示来自服务器端上传脚本的错误消息(下载中示例文件夹中的upload.php)之外,它运行完美.
正在显示本地错误消息,例如,如果我尝试上传受限制的文件类型,我会收到我期望的错误消息,但是,服务器端消息没有显示.
我知道upload.php文件正在被正确触发,因为我的上传成功处理,并且我已设置睡眠功能以验证正在请求文件.在那一刻我只是放在upload.php顶部的行,以协助调试,只是睡了10秒钟并返回错误信息,这仍然无法正常工作.
upload.php
sleep(10);
die('{"jsonrpc" : "2.0", "error" : {"code": 500, "message": "THIS IS AN ERROR."}, "id" : "id"}');
...(Rest of normal upload.php file)...
Run Code Online (Sandbox Code Playgroud)
我正在使用的javascript包含在下面,你们可以给予的任何帮助将非常感激,因为我已经花了太长时间在这上面而且这个问题阻碍了我能够推送我的代码.
谢谢,
亚历克斯
// Fanart
$(function() {
var fanart_uploader = new plupload.Uploader({
runtimes : 'html5,flash,html4',
browse_button : 'fanart_pickfiles',
container : 'fanart_container',
drop_element : 'fanart_drop',
chunk_size : '1mb',
max_file_size : '8mb',
url : '/upload.php?gameid=<?= $gameid ?>&arttype=fanart',
flash_swf_url : '/js/plupload/js/plupload.flash.swf',
silverlight_xap_url : '/js/plupload/js/plupload.silverlight.xap',
filters : [
{title : "Image files", extensions : "jpg,png"},
]
});
fanart_uploader.bind('Init', function(up, …Run Code Online (Sandbox Code Playgroud) 我已经在我的网站上工作了一年多了,我非常渴望最终将它放在那里供人们使用。然而它已经变得相当大了——我几乎想说超出了我的控制——最重要的是,我实际上只是一个自学的业余程序员。
所以我想确保 php 产生的任何错误都记录在一个文件中,这样我就可以访问该文件并跟踪错误。
目前我的设置如下:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
?>
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好,我的 error.log 文件将包含如下内容:
[14-May-2013 00:16:26] PHP 注意:未定义的变量:/home/www/dir/index.php 第 14 行中不存在变量[14-May-2013 00:16:28] PHP 注意:未定义的变量:第 14 行 /home/www/dir/index.php 中不存在变量
太好了,错误已记录。
但现在我有一个问题:
他们都排成一排,没有间断。使其难以阅读。如何在新行中获取每个错误?
我看到有一个时间戳。惊人的!我如何添加用户的 IP 地址等内容或任何其他自定义内容?
再次,我的问题:
如何更改 PHP 在错误日志文件中写入错误的方式? 特别是,如何在记录每个错误后创建一个新行,以便 error.log 文件更易于阅读。如何添加自定义数据和值(例如 IP 地址)?
答案: 我最终做了以下事情 - 这似乎在某种程度上重现了 php 按标准所做的事情,并且可以从那里进行修改。
<?php
function my_error_handler($type, $message, $file, $line, $vars)
{
switch($type)
{
case 1: // 1 //
$type_str = 'ERROR';
break;
case 2: // 2 //
$type_str = 'WARNING';
break; …Run Code Online (Sandbox Code Playgroud) 用什么方式获取js报错产生的ajaxError事件的函数调用者?
我已经用 jQuery 构建了一个 js 错误 repo 应用程序,我可以处理全局发生的正常 js 错误,但是我在 ajax 错误方面遇到了问题。正常错误的时候我可以得到错误的行号!我试图用全局 ajax 处理程序之一“ajax 错误”来捕获它们,但我不确定如何获取该 ajax 调用者或调用者名称的行号。
请看底部!
const error_log_url = '/log';
const errorPost = function (data) {
$.ajax({
url: error_log_url,
type: 'post',
data: data,
success: function (res) {
console.log(res)
}, error: function (res) {
console.log(res)
}
})
}
window.addEventListener('error', function (e) {
let params = {
message: e.message || "Exception Handler",
url: e.filename || "",
lineno: e.lineno || 0,
colno: e.colno || 0
}
errorPost(params)
}, true);
// wrap …Run Code Online (Sandbox Code Playgroud) 我正在使用我们的XAMPP设置作为测试服务器开发PHP应用程序.
应用程序准备好部署后,我必须将其上传到客户端的服务器,
问题是客户端的服务器正在运行IIS 7,每次出现PHP错误时它只显示一个空白页面...
现在,我的应用程序error_reporting(E_ALL)已经设置,我无法访问php.ini文件(不要问为什么!)...
我已经尝试了各种参数组合error_reporting():http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
任何人都可以指向我的另一种方式让错误显示出来吗?
顺便说一句:我正在使用codeigniter,我已经尝试了它提供的error_logging函数无济于事......
好吧,既然我已经进一步了解它,我意识到这是一个愚蠢的问题,而且是错误的.事实证明,我维护的遗留代码的作者正在使用php_init语句将错误日志添加到不同的文件中.hi-jacking在输出缓冲打开的同时发生,使得看起来好像输出缓冲丢失了我的错误消息.
所以,主持人,随便删除这个.感谢那些善意回答的人.
给出以下PHP脚本:
<?php
error_log('test');
ob_start();
error_log('test2');
ob_end_flush();
?>
Run Code Online (Sandbox Code Playgroud)
我得到以下错误日志输出:
[04-Feb-2010 11:30:38] test
Run Code Online (Sandbox Code Playgroud)
为什么输出缓冲会吃掉我的错误消息?我怎么能让它停下来?
或者,是否有另一种方法可以将消息从输出缓冲区中走私出来,还是只是一个黑洞?
(使用PHP 5.2.4-2ubuntu5.10)
所以我有xampp,事情根本不报告任何事情......我甚至强迫错误,它没有做任何事......
我用了
error_reporting(-1);
ini_set( 'display_errors', 1 );
Run Code Online (Sandbox Code Playgroud)
根据这份文件http://php.net/manual/en/function.error-reporting.php
也error_reporting(E_ALL);没有做任何事......
我发现在我的系统上"error_reporting"被关闭了.所以我打开它(E_ALL),现在我有很多错误.
如果你对我的错误感兴趣:
Notice: Undefined index: page in …path/file.php on line 22
Notice: Undefined offset: 1 in …path/file.php on line 49
Notice: Undefined offset: 2 in …path/file.php on line 57
Notice: Undefined offset: 3 in …path/file.php on line 58
Notice: Undefined variable: out in …path/file.php on line 85
Notice: Undefined variable: out in …path/file.php on line 109
Notice: Use of undefined constant M_DESCRIPTION - assumed 'M_DESCRIPTION' in …path/file.php on line 181
Notice: Use of undefined constant GA_TRACKER - assumed 'GA_TRACKER' in …Run Code Online (Sandbox Code Playgroud) 我当前的php.ini文件设置为报告除弃用和严格标准以外的所有错误,如下所示:
error_reporting = E_ALL & ~E_STRICT & ~E_DEPRECATED
Run Code Online (Sandbox Code Playgroud)
使用此设置的原因是我们迫切需要在托管我们网站的Linux服务器上执行PHP升级; 问题是,已弃用的功能和严格的标准建议将很快填满170多个网站的错误日志文件.这些错误主要是由于函数没有声明为静态等等.最终我们将通过所有站点并修复这些问题,但与此同时我们需要抑制错误.
我在本地测试环境中遇到的问题(运行我们希望升级到的PHP版本 - 5.4.3)是错误仍然显示以下打印之前:
SCREAM: Error suppression ignored for
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我深入了解为什么忽略错误抑制以及如何正确地抑制错误?
提前致谢.