我有一个网络应用程序,每天生成数百封电子邮件,其中一个最常见的支持请求是我的电子邮件未到达的原因 - 在大多数情况下,邮件已由我们发送但已被延迟或被拒绝接收器
我们可以告诉的唯一方法是通过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=
从那时起,分页就被打破了。
以这种方式读取的数组中的文件大小或项目数是否有限制?如果没有,任何想法为什么会发生这种情况?
答案 0 :(得分:1)
代码看起来不错,应该可行。我猜内存分配存在一些问题。以下链接可能会有所帮助。
答案 1 :(得分:0)
如果它只是您正在搜索的电子邮件地址,为什么不只是有一个表单,他们可以提交他们正在搜索的电子邮件地址,并让您的PHP脚本通过搜索该地址的文件读取?除非我误解了这个问题,否则没有理由以这种方式手动进行搜索?