解析PHP错误日志问题– ;错误消息中的换行符(\n)
我正在尝试解析PHP错误日志。问题是用解析PHP错误日志问题– ;错误消息中的换行符(\n),php,regex,Php,Regex,我正在尝试解析PHP错误日志。问题是用\n破坏文件是不起作用的 explode(PHP_EOL, $log) 这不起作用,因为有些错误消息本身包含\n 那么如何将这样的文件按行分解呢 问题日志的摘录: [04-Jan-2012 21:28:48] PHP Notice: Use of undefined constant AY_FACEBOOK_TAB_URL - assumed 'AY_FACEBOOK_TAB_URL' in /var/www/[hidden]/default.layou
\n
破坏文件是不起作用的
explode(PHP_EOL, $log)
这不起作用,因为有些错误消息本身包含\n
那么如何将这样的文件按行分解呢
问题日志的摘录:
[04-Jan-2012 21:28:48] PHP Notice: Use of undefined constant AY_FACEBOOK_TAB_URL - assumed 'AY_FACEBOOK_TAB_URL' in /var/www/[hidden]/default.layout.tpl.php on line 36
[04-Jan-2012 22:38:02] PHP Notice: Use of undefined constant AY_FACEBOOK_TAB_URL - assumed 'AY_FACEBOOK_TAB_URL' in /var/www/[hidden]/default.layout.tpl.php on line 36
[04-Jan-2012 23:43:33] PHP Warning: file_get_contents(https://graph.facebook.com/4294967295/picture?type=large): failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error
in /var/www/[hidden]/result.tpl.php on line 11
[04-Jan-2012 23:43:33] PHP Notice: Undefined variable: image in /var/www/[hidden]/result.tpl.php on line 20
请注意HTTP/1.0 500内部服务器错误后的换行符 尝试使用
“\r\n”
并确保它们位于双引号之间。使用正则表达式匹配行首。它通常是一个日期/时间(时间戳)
此代码适用于我:
<?php
$content = file_get_contents('/var/log/php-log.log');
var_dump(preg_split('/\[\d\d-\w{3}-\d{4}\s+\d\d:\d\d:\d\d\]/', $content));
您需要更具体一些。至少具有换行条件。你怎么知道哪一个LF
结束一行,哪一个正好在中间?展示一个例子。如果你能提供一些日志的例子就好了。(错误消息中是否有换行符。)答案实际上取决于您试图对数据执行的操作。解析PHP日志的原因是什么?为什么不使用SplFileObject逐行读取文件?@mario,很简单str\u replace(array(“\n”,“\r”)、array(“\nN\u BREAK”,“\rR\u BREAK”)、[…])
告诉我,所有文件都只包含\n
BREAK.preg\u split('/\[\d\d-\w{3}-\d{4}\s+\d\d:\d:\d:\d:\d\d\]/',$error\u log,NULL,preg\u split DELIM u-DELIM u-CAPTURE分隔符本身不返回空。你知道为什么吗?因为你需要在分隔符周围加上括号:preg\u split('/(\[\d\d-\w{3}-\d{4}\s+\d\d:\d\d:\d\d\])/,$error\u log,NULL,preg\u split\u DELIM\u CAPTURE
请看这个:注意:如果设置了这个标志,**分隔符模式中带括号的**表达式也将被捕获并返回。