【问题标题】:How do I make php handle file downloads of incomplete file?如何让 php 处理不完整文件的文件下载?
【发布时间】:2010-06-23 20:29:41
【问题描述】:

例如,我有一个文件正在通过 ftp 上传,并且文件大小发生了变化。我事先知道文件大小。那么,即使文件没有完成上传并等待文件大小在完成缓冲之前匹配,我如何让 php 将其发送到客户端浏览器。下面的代码不会更新句柄,也不会看到对文件所做的更改。我每次都可以通过 fopen 但也许有合适的方法?谢谢

$buffer = '';
$cnt =0;
$handle = fopen($filename, 'rb');
if ($handle === false) {
  return false;
}
while ($cnt < $totalSize) {
  $buffer = fread($handle, 2048);
  echo $buffer;
  ob_flush();
  flush();
  $bufferLen = strlen($buffer);
  $cnt += $bufferLen;
  if(!$bufferLen) sleep(1);
}
fclose($handle);

【问题讨论】:

    标签: php upload ftp download buffer


    【解决方案1】:

    关闭并重新打开文件会有帮助吗?然后您可以 fseek 到您离开的地方,并继续推送文件的其余部分。

    尝试在 cnt += $bufferLen; 之后添加类似这样的内容;

    if(feof($handle) && ($cnt < $totalSize)) {
      fclose($handle);
      sleep(1);
      $handle = fopen($filename, 'rb');
      fseek($handle, $cnt);
    }
    

    删除if(!bufferLen) sleep(1); 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多