php - 处理、解析和流式传输大型文本文件的实用方法是什么?

标签 php javascript jquery linux centos

我目前有一个日志文件流(文本格式),它不断地被运行的进程追加。我是用PHP把它处理成JSON格式,然后用jQuery的getJSON解析。

我想知道在日志文件中获取数据的实用方法是什么。我使用了 jQuery 的 post 函数,文件太长而无法获取。函数 getJSON 没问题,但是日志文件变得足够长以至于 PHP 无法处理它,所以它没有传递给函数。

我考虑过限制日志文件(来自 CentOS 的 Tee'd)中的行数,并从日志文件中获取一定数量的行(速度不切实际),但我该怎么做呢?

最佳答案

只读取文件的最后部分,fseek到一个好的位置,然后从那里开始。例如:

define('FILE', '/var/log/logfile');
define('SIZE', 1024*1024);
if (filesize(FILE) <= SIZE) {
  $text = file_get_contents(FILE);
} else {
  $fh = fopen(FILE, 'r');
  fseek($fh, -SIZE, SEEK_END);
  // Remove up to newline to avoid a broken line
  $skip = strlen(fgets($fh));
  $text = fread($fh, SIZE - $skip);
  fclose($fh);
}
// Do your work with $text here...

关于php - 处理、解析和流式传输大型文本文件的实用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11067357/

相关文章:

php - magento 在现有表中添加一列

php - 在使用 jQuery $.ajax PHP/MySQL 插入后添加表行

javascript - fatal error : Array and string offset access syntax with curly braces is no longer supported in php 8. 0 pkcs5_unpad

javascript - 从 json 对象获取随机键/值对 javascript (p5.js)

javascript - 如何仅使用javascript获取域名?

javascript - 垂直和水平居中以及javascript滚动的问题

javascript - 如何在 JavaScript 中计算负整数的模数?

javascript - jQuery 检查一个元素是否正确 "dropped"

php - 需要帮助显示动态表

javascript - 无法调用未定义的方法 'toLowerCase'(Bootstrap Typeahead)