为什么 fread (PHP) 不读取整个文件?

  • 本文关键字:读取 文件 fread PHP php
  • 更新时间 :
  • 英文 :


我在PHP中有这段代码,用于加载本地文件:

$filename = "fille.txt";
$fp = fopen($filename, "rb");
$content = fread($fp, 25699);
fclose($fp);
print_r($content);
使用这段代码,我可以看到文件的所有内容。但是当我将$filename更改为外部链接时,例如:
$filename = "https:/.../texts/fille.txt";

我看不清文件的全部内容,他好像被剪掉了。有什么问题吗?

fread()功能可用于网络操作。但是网络连接的工作方式不同于文件系统操作。网络不能一次读取更大的文件,这不是典型网络的工作方式。相反,它们是基于包的。所以数据以块的形式到达。

如果你看一下你使用的函数的文档,你会看到:

一旦满足下列条件之一,读取停止:

  • […]

  • 一个数据包变为可用或套接字超时发生(对于网络流)

  • […]

所以你观察到的实际上是记录的行为。您需要在循环中继续读取包以获取整个文件。直到你接受了EOF

自己看看:https://www.php.net/manual/en/function.fread.php

在文档的后面你会看到这个例子:

示例#3 Remote fread()示例

<?php
$handle = fopen("http://www.example.com/", "rb");
if (FALSE === $handle) {
exit("Failed to open stream to URL");
}
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>

最新更新