0

您将如何从 php 中的日志文件中读取 1000 字节的数据?我尝试使用

fread ($fp, 1000) 

但问题是如果文件少于 1000 字节,那么它根本不会读取?另一个问题是它读取 1000 字节的块,但最后如果剩下的块小于 1000 字节,它会忽略它吗?

$all_data = array();
while (($data = fread($file_handle, 1000)) !== false && strlen($data) == 1000) {
$all_data[] = $data;
}
fclose($file_handle);

谢谢 !

4

1 回答 1

2

从您的 while 循环中删除 strlen() ,即停止它返回少于 1000 个字节,正如您特别告诉它的那样。

每个大于 1 字节的字符(例如 utf-8 字符)如果它们出现在您正在阅读的文件中,也会给您带来很多问题,因为突然之间您将读取 1000 个字节但不返回字符串1000 个字符。

编辑:刚刚注意到你读错了文件,我只是假设它在某些情况下对你有用,但我会假设它根本不起作用。

基本上,如果您尝试读取超出文件的字节长度, fread 不会返回 false,它只是返回一个空字符串(假设它检测到 EOF 并立即返回,但我不能说我知道 php 内部的每一件事) .

最快的解决方案也是改变它:

while (($data = fread($file_handle, 1000)) !== false && !empty($data)) {

以便它在第一个空返回时退出。

或者,按照文档的建议执行并使用 EOF 测试功能(这是您理想情况下应该做的,以避免任何问题)。

while (!feof($file_handle) {
   $all_data[] = fread($file_handle, 1000)); 
}

注意:我不确定您为什么将其存储到数组中。数组受与通用字符串变量相同的内存限制,因此如果您打算使用它来克服file_get_contents内存限制,它将无法工作。

于 2013-09-25T21:03:07.273 回答