你如何从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);
谢谢!
答案 0 :(得分:2)
从while循环中删除strlen(),即停止返回少于1000个字节,正如你明确指出的那样。
每个> 1字节的字符(例如,utf-8字符),如果它们出现在您正在阅读的文件中,将会导致很多问题,因为突然之间您将读取1000字节但是不返回1000个字符的字符串。
编辑:刚刚注意到你读错了文件,我只是假设它在某些情况下适合你,但我会假设它根本不起作用。
基本上,如果你试图读取超出文件的字节长度,fread不返回false,它只返回一个空字符串(假设,它检测到EOF并立即返回,但我不能说我知道每一件事php internals)。
最快的解决方案也是改变它:
while (($data = fread($file_handle, 1000)) !== false && !empty($data)) {
这样它就会在第一次空回来时退出。
或者,执行文档建议并使用EOF测试函数(这是理想情况下应该做的,以避免任何问题)。
while (!feof($file_handle) {
$all_data[] = fread($file_handle, 1000));
}
注意:我不确定为什么要将它存储到数组中。数组受到与通用字符串变量相同的内存限制,因此如果您打算使用它来克服file_get_contents
内存限制,它将无效。