Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP读取日志文件_Php_Arrays - Fatal编程技术网

通过PHP读取日志文件

通过PHP读取日志文件,php,arrays,Php,Arrays,我有一个每天生成数百封电子邮件的web应用程序,最常见的支持请求之一是为什么我的电子邮件没有到达-在大多数情况下,邮件是由我们发送的,但被收件人延迟或拒绝 我们唯一能知道的方法是通过SSH连接到服务器,打开exim日志文件并搜索电子邮件地址,这很耗时,而且可能“危险”,因为我们不希望支持人员通过SSH登录,以防他们做傻事 我们希望有一种简单的方式,通过https在我们的支持门户中显示/var/log/exim/main.log的内容。目前该文件的大小略低于1MB 在这一阶段,我们使用了: $fi

我有一个每天生成数百封电子邮件的web应用程序,最常见的支持请求之一是为什么我的电子邮件没有到达-在大多数情况下,邮件是由我们发送的,但被收件人延迟或拒绝

我们唯一能知道的方法是通过SSH连接到服务器,打开exim日志文件并搜索电子邮件地址,这很耗时,而且可能“危险”,因为我们不希望支持人员通过SSH登录,以防他们做傻事

我们希望有一种简单的方式,通过https在我们的支持门户中显示/var/log/exim/main.log的内容。目前该文件的大小略低于1MB

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

$file = file('/var/log/exim/main.log');
foreach ($file as $row) {
    print $row."<br>";
}
它显示的很好,但一旦我们循环通过它,它就会在数组中的条目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=
2014-03-24 01:06:45 cwd=/home/domain/public\u html 3参数:/usr/sbin/sendmail-t-i
2014-03-2401:06:45 1WRtLh-0001ke-5Kemail@email.comF=R=dnslookup T=remote\u smtp S=827 H=mx1.mx[1.1.1]C=“250 2.0.0确定:排队为C7E5F301206”2014-03-24 01:06:48 1WRtLh-0001ke-5K已完成2014-03-24 01:10:26 cwd=/home/domain/public\u html/send 3 args:/usr/sbin/sendmail-T-i 2014-03-24 01:10:26 1WRG-0001lw-7yemail2@email.comF=
从那时起,分页就被打破了


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

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

代码看起来不错,应该可以工作。我想内存分配有问题。下面的链接可能会有所帮助


据我所知,您唯一的限制是在服务器上创建的限制。数组的大小只能达到服务器上允许的最大内存限制。使用fopen/fgets/fclose可能会更幸运,因为这既不会填满内存,也不会创建大型数组。实际电子邮件地址不会显示在所有相关行上,因此我需要前后两行来查看整个日志条目,因此不确定这是否会发生work@bhttoan信息技术一旦找到,就很容易在电子邮件地址前后包含5行(或任意数量)。
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=