PHP 确实不会输出错误堆栈,但通过函数,还是能够获取到错误堆栈的。
function getBacktrace() {
ob_start();
debug_print_backtrace();
return ob_get_clean();
}
调用上面这个函数取得错误堆栈,再用 file_put_contents('log_path', FILE_APPEND); 写入日志文件即可。
还有一个办法:为 PHP 安装 xdebug 扩展
windows 下的安装方法 安装好后,修改 php.ini
B. PHP中error_log()函数的使用方法
本文实例讲述了PHP中error_log()函数的使用方法。分享给大家供大家参考。具体分析如下:
今天遇到一个问题需要调试,但是只能通过日志打印调试,就用到了error_log这个函数
需要打印的是一台服务器发送到我们服务器的post数据
代码如下:(key和value都打印了)
复制代码
代码如下:if(!empty($_POST)
){
while
(list($key,
$val)
=
each($_POST))
{
@error_log("$key
=>
$val",
3,'/tmp/test_post_allstarpay.log'
);
}
}
error_log有四个参数
,主要是前3个,第一个是log日志写入内容,第二个是日志存入方式3表示存入指定位置,第三个是存入位置
服务器用的是centos
,tmp有读写权限
所以就写入tmp内了
error_log会自动生成相应的log文件,不需要手动创建!
希望本文所述对大家的php程序设计有所帮助。
C. php实现的debug log日志操作类实例
本文实例讲述了php实现的debug
log日志操作类。分享给大家供大家参考,具体如下:
<?php
class
Tool
{
public
static
function
log($info)
{
$time
=
date('m-d
H:i:s');
$backtrace
=
debug_backtrace();
$backtrace_line
=
array_shift($backtrace);
//
哪一行调用的log方法
$backtrace_call
=
array_shift($backtrace);
//
谁调用的log方法
$file
=
substr($backtrace_line['file'],
strlen($_SERVER['DOCUMENT_ROOT']));
$line
=
$backtrace_line['line'];
$class
=
isset($backtrace_call['class'])
?
$backtrace_call['class']
:
'';
$type
=
isset($backtrace_call['type'])
?
$backtrace_call['type']
:
'';
$func
=
$backtrace_call['function'];
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/debug.log',
"$time
$file:$line
$class$type$func:
$info\n",
FILE_APPEND);
}
}
class
Action
{
public
function
a()
{
$this->b();
}
public
function
b()
{
$this->c();
}
public
function
c()
{
Tool::log('sdfsdf');
}
}
$action
=
new
Action();
$action->a();
这里再补充一个函数:
function
loginfo($format)
{
$args
=
func_get_args();
array_shift($args);
$d
=
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,
1)[0];
$info
=
vsprintf($format,
$args);
$data
=
sprintf("%s
%s,%d:
%s\n",
date("Ymd
His"),
$d["file"],
$d["line"],
$info);
file_put_contents(__DIR__."/log.txt",
$data,
FILE_APPEND);
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP错误与异常处理方法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
D. php后台操作日志怎么做
配置log4j
最常用的log方法
很多log可以利用它输出
且配置简单
E. php怎么增加log日志来
1、使用指定的文件记录错误报告日志
使 用指定的文件记录错误报告日志使用指定的文件记录错误报告日志使用指定的文件记录错误报告日志 如果使用自己指定的文件记录错误日志,一定要确保将这个文 件存放在文档根目录之外,以减少遭到攻击的可能。并且该文件一定要让PHP脚本的执行用户(Web服务器进程所有者)具有写权限。假设在Linux操作系 统中,将/usr/local/目录下的error.log文件作为错误日志文件,并设置Web服务器进程用户具有写的权限。然后在PHP的配置文件中, 将error_log指令的值设置为这个错误日志文件的绝对路径。
需要将php.ini中的配置指令做如下修改:
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误
2. display_errors = Off ;不显示满足上条 指令所定义规则的所有错误报告
3. log_errors = On ;决定日志语句记录的位置
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度
5. error_log = E:/php_log/php_error.log ;指定产生的 错误报告写入的日志文件位置
PHP 的配置文件按上面的方式设置完成以后,并重新启动Web服务器。这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记 录在自己指定的错误日志/usr/local/error.log中。此外,不仅可以记录满足error_reporting所定义规则的所有错误,而且 还可以使用PHP中的error_log()函数,送出一个用户自定义的错误信息。
F. 记录PHP错误日志 display_errors与log_errors的区别
display_errors
错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。
display_errors
=
On
开启状态下,若出现错误,则报错,出现错误提示
dispaly_errors
=
Off
关闭状态下,若出现错误,则提示:服务器错误。但是不会出现错误提示
log_errors
在正式环境下用这个就行了,把错误信息记录在日志里。正好可以关闭错误回显。
对于PHP开发人员来说,一旦某个产品投入使用,那么第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。
某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?
将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。
当然也可以记录错误日志到指定的文件中。
复制代码
代码如下:
#
vim
/etc/php.inidisplay_errors
=
Off
log_errors
=
On
error_log
=
/var/log/php-error.log
另外也可以设定error_log
=
syslog,使这些错误信息记录到操作系统的日志里。
display_errors
=
Off
//display中文意思是显示所以display_error=off的意思就是不显示错误了!
error_reporting
设定错误讯息回报的等级
2047我记得应该是E_ALL。
php.ini
文件中有许多配置设置。您应当已经设置好自己的
php.ini
文件并把它放在合适的目录中,就像在
Linux
上安装
PHP
和
Apache
2
的文档说明中所示的那样(请参阅
参考资料)。在调试
PHP
应用程序时,应当知道两个配置变量。下面是这两个变量及其默认值:
display_errors
=
Off
//关闭所有错误信息,为ON时为显示所有错误信息。
error_reporting
=
E_ALL
E_ALL能从不良编码实践到无害提示到出错的所有信息。E_ALL
对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出
所以不建议使用2047,最好把默认值改为:error_reporting
=
E_ALL
&
~E_NOTICE
PHP.ini中display_errors
=
Off失效的解决
问题:
PHP设置文件php.ini中明明已经设置display_errors
=
Off,但是在运行过程中,网页上还是会出现错误信息。
解决:
经查log_errors=
On,据官方的说法,当这个log_errors设置为On,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors
这个指定的Off失效,错误信息还是打印了出来。于是将log_errors
=
Off,问题就解决了。
经常见到error_reporting(7)直意为:设定错误讯息回报的等级。
value
constant
1
E_ERROR
2
E_WARNING
4
E_PARSE
8
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
64
E_COMPILE_ERROR
128
E_COMPILE_WARNING
256
E_USER_ERROR
512
E_USER_WARNING
1024
E_USER_NOTICE
2047
E_ALL
2048
E_STRICT
然而7=1+2+4
就是出错时显示1
E_ERROR
2
E_WARNING
4
E_PARSE
复制代码
代码如下:
<?php
//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR
|
E_WARNING
|
E_PARSE);
//报告所有错误
error_reporting(E_ALL);
?>
G. 怎么让php打印错误日志
(1)使用echo ,简单输出
(2)使用print_r(),可以有规则的打印复杂结构
(3)var_mp递归输出某种结构体
(4)print(),简单打印
可以将你要输出的错误内容放到上述语句或函数内进行打印输出;也可以写入某个文件,作为你的Log日志:file_put_contents('/test1.txt',$value['value'],FILE_APPEND)等这类文件函数
以上是我自己工作中总结的PHP调试方法,挺好用的。
H. 如何开启PHP日志功能
开启步骤如下:
1. 打开php.ini文件。
以ubuntu为例,这个文件在: /etc/php5/apache2 目录下为例。
2. 搜索并修改下行,把Off值改成On
display_errors = Off
3. 搜索下行
error_reporting = E_ALL & ~E_NOTICE
或者搜索:
error_reporting = E_ALL & ~E_DEPRECATED
修改为
error_reporting = E_ALL | E_STRICT
4. 修改Apache的 httpd.conf,
以Ubuntu 为例, 这个文件在:/etc/apache2/ 目录下,这是一个空白文件。
添加以下两行:
php_flag display_errors on
php_value error_reporting 2039
5. 重启Apache,就OK了。
重启命令: :sudo /etc/init.d/apache2 restart.
I. php程序一般怎么打log
php没有log这个函数,一般都是手动使用echo来输出想要的数据.
另外可以开启php自身的输出,不过只能自动输出,提示,警告和错误
J. php打log共有几种方式
不明白你说的方式怎么划分,如果单纯以函数输出就算的话,应该有很多种方法,比如
echo
sprintf
print_r
var_mp
die
还有很多就不一一列举了。
如果是吧log输出到外部文件的话可以用:
error_log
file_put_contents