你如何在php中读取文件中1000个字节的数据?

时间:2013-09-25 20:57:56

标签: php file fread

你如何从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);

谢谢!

1 个答案:

答案 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内存限制,它将无效。