84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
在使用workman 一个php方面的定时 计划任务框架。通过 定时 写入日志来记录定时任务成功还是失败,当日志文件大小为70M的时候级计划任务断掉了,后台读取日志也不能读取了。请教一下,php 写入日志文件 或者读取日志文件,一般日志文件为多大比较合适?看往上有文章说1G的日志文件也能读取,但是普通网站如何来控制日志文件的大小?
走同样的路,发现不同的人生
有可能并发高时,同时读写同一个文件时锁住了。对于读文件时,只要不fopen一个文件,多大都没关系,100G的文件也是没问题的使用fgets方法打开一个文件的指针,然后循环一行一行读取文件的方式不会有问题的。
不大懂后端,但是感觉这样的数据不是应该在服务器上配置么? 或者 php.ini 配置?
无论多大都能读写。就看你怎么读。是一次读一行,不是整个文件都读到内存里。
是不是超时了?默认php运行时间是30秒,你这种情况应该把超时设为无限制,好像是时set_time_limit(0);吧,不太记得了。
set_time_limit(0);
多大都是没问题的。但是执行是有时常限制的(也就是大家说的set_time_limit)但是把它改成0, 一旦某个步骤出了问题(比如数据库无法连接),会造成大量进程无法结束,从而耗尽系统资源。
所以建议你调用 shell_exec , 使用cli模式执行处理日志的那个php脚本
php.ini max_execution_time memory_limit php-fpm.conf request_terminate_timeout
有可能是内存超出配置最大值,或者执行时间超过限制.
file_get_contents和file是把整个文件读入内存.所以打开大文件时应该用fopen,获取文件指针(文件流),然后fgets一行一行读.http://cn2.php.net/fgets
不知道你用的这个框架是用什么方式来写入日志文件的,我用的是PHP自带的error_log()函数,工作方式是一直append新日志到文件末尾,实际试过大到几个G都没任何问题,可能因为它是只往文件末尾写,不读取。按我的理解,既然是记录是否成功的日志文件,应该只用写入、不用读出吧?你可以试试分析框架的日志写入部分代码,看看逻辑是怎样的。
有可能并发高时,同时读写同一个文件时锁住了。
对于读文件时,只要不fopen一个文件,多大都没关系,100G的文件也是没问题的
使用fgets方法打开一个文件的指针,然后循环一行一行读取文件的方式不会有问题的。
不大懂后端,但是感觉这样的数据不是应该在服务器上配置么? 或者 php.ini 配置?
无论多大都能读写。就看你怎么读。是一次读一行,不是整个文件都读到内存里。
是不是超时了?默认php运行时间是30秒,你这种情况应该把超时设为无限制,好像是时
set_time_limit(0);
吧,不太记得了。多大都是没问题的。
但是执行是有时常限制的(也就是大家说的set_time_limit)
但是把它改成0, 一旦某个步骤出了问题(比如数据库无法连接),会造成大量进程无法结束,从而耗尽系统资源。
所以建议你调用 shell_exec , 使用cli模式执行处理日志的那个php脚本
有可能是内存超出配置最大值,或者执行时间超过限制.
file_get_contents和file是把整个文件读入内存.
所以打开大文件时应该用fopen,获取文件指针(文件流),然后fgets一行一行读.
http://cn2.php.net/fgets
不知道你用的这个框架是用什么方式来写入日志文件的,我用的是PHP自带的error_log()函数,工作方式是一直append新日志到文件末尾,实际试过大到几个G都没任何问题,可能因为它是只往文件末尾写,不读取。
按我的理解,既然是记录是否成功的日志文件,应该只用写入、不用读出吧?你可以试试分析框架的日志写入部分代码,看看逻辑是怎样的。