从您的 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内存限制,它将无法工作。