通过PHP读取日志文件

时间:2014-03-25 15:54:08

标签: php arrays

我有一个网络应用程序,每天生成数百封电子邮件,其中一个最常见的支持请求是我的电子邮件未到达的原因 - 在大多数情况下,邮件已由我们发送但已被延迟或被拒绝接收器

我们可以告诉的唯一方法是通过SSH连接到服务器,打开exim日志文件并搜索电子邮件地址,这是一个耗时的,也可能是危险的"因为我们不希望支持人员通过SSH登录,以防他们做一些愚蠢的事情。

我们想要一个简单的方法在我们的支持门户网站上通过https显示/var/log/exim/main.log的内容。目前该文件的大小不到1MB。

在这个阶段,我们使用了:

$file = file('/var/log/exim/main.log');
foreach ($file as $row) {
    print $row."<br>";
}

我们已经这样做了,因为它在它自己的行中显示每一行并使其更具可读性 - 它适用于前1000行/行,然后分页&#34;中断&#34;。 / p>

如果我们使用

打印数组
print_r($file);

它显示正常,但是一旦我们循环它就停止在数组中的条目1054处工作。

例如,我们得到:

2014-03-24 01:06:45 cwd=/home/domain/public_html 3 args: /usr/sbin/sendmail -t -i 
2014-03-24 01:06:45 1WRtLh-0001ke-5K <= apache@web01.domain.com U=apache P=local S=810 T="Message" from for email@email.com
2014-03-24 01:06:45 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc 1WRtLh-0001ke-5K 
2014-03-24 01:06:48 1WRtLh-0001ke-5K => email@email.com F= R=dnslookup T=remote_smtp S=827 H=mx1.mx [1.1.1.1] C="250 2.0.0 Ok: queued as C7E5F301206" 2014-03-24 01:06:48 1WRtLh-0001ke-5K Completed 2014-03-24 01:10:26 cwd=/home/domain/public_html/send 3 args: /usr/sbin/sendmail -t -i 2014-03-24 01:10:26 1WRtPG-0001lw-7y <= apache@web01.domain.com U=apache P=local S=825 T="Message 2" from 


for email2@email.com 2014-03-24 01:10:26 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc 1WRtPG-0001lw-7y 2014-03-24 01:10:29 1WRtPG-0001lw-7y => email2@email.com F=

从那时起,分页就被打破了。

以这种方式读取的数组中的文件大小或项目数是否有限制?如果没有,任何想法为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

代码看起来不错,应该可行。我猜内存分配存在一些问题。以下链接可能会有所帮助。

Where to edit for increase in memory in PHP ini file?

答案 1 :(得分:0)

如果它只是您正在搜索的电子邮件地址,为什么不只是有一个表单,他们可以提交他们正在搜索的电子邮件地址,并让您的PHP脚本通过搜索该地址的文件读取?除非我误解了这个问题,否则没有理由以这种方式手动进行搜索?