Firefox更新到71.0 OSX后随机下载失败

问题描述 投票:0回答:2

我正在从Web服务器下载存储在Webroot之外的文件。 PHP正在处理文件传输。一切都可以在其他所有浏览器上正常运行,并且可以在Firefox上运行,直到最新的浏览器更新为止。

现在文件有时会完成,有时会失败,并显示以下消息:

xxxxx.part could not be saved, because the source file could not be read.

这是完全随机的,同一文件将失败3或4次,然后下载而不会出现问题,也可以在首次尝试下载文件时没有问题。这绝对没有道理。

我已经尝试过列出HERE的所有内容,但没有任何修复方法。

我已经读到,服务器最初报告的文件大小小于实际文件大小,这是一个问题。显然,Firefox过去对此还可以,但是现在将任何此类文件标记为已损坏。可以在FF首选项中将其禁用,但这根本不理想,因为此脚本在提供mp3,wav和zip文件的下载存储上运行。

这是我如何使用PHP服务文件的内容:

if (file_exists($filepath)) {

  if (ini_get('zlib.output_compression')) {
      ini_set('zlib.output_compression', 'Off');
  }

  set_time_limit(0);
  $fp = @fopen($filepath, 'rb');

  if ($fp) {

      if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
          header('Content-Description: File Transfer');
          header('Content-Type: application/octet-stream');
          header('Content-Disposition: attachment; filename="'. $filename .'"');
          header('Expires: 0');
          header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
          header("Content-Transfer-Encoding: binary");
          header('Pragma: public');
          header("Content-Length: ". self::get_file_size($filepath));
      } else {
          header('Content-Description: File Transfer');
          header('Content-Type: application/octet-stream');
          header('Content-Disposition: attachment; filename="'. $filename .'"');
          header("Content-Transfer-Encoding: binary");
          header('Expires: 0');
          header('Pragma: no-cache');
          header("Content-Length: ". self::get_file_size($filepath));
      }

      fpassthru($fp);
      fclose($fp);

      ob_flush();
      flush();
  }
}

这是计算文件大小的函数(它位于同一类中:]

public static function get_file_size ($file) 
{
    $fp = @fopen($file, "r");
    @fseek($fp,0,SEEK_END);
    $filesize = @ftell($fp);
    fclose($fp);
    return $filesize;
}

正如我说的那样,这在所有其他浏览器上均能完美运行,并且在FF上一直有效,直到此最新更新为止。

有人获得任何潜在的服务器端解决方案,以确保传输正确的文件大小数据吗?

php firefox download filesize
2个回答
1
投票

我猜这是因为您正在通过使用模式r而不是模式rb打开文件来检查文件大小。将其更改为后者。 (此外,如果您没有充分的理由不使用filesize,则只需这样做,而不要自己编写。)


0
投票

哇,这很尴尬:/

经过数小时的尝试之后,我想到的一切都证明我需要做的就是在脚本结尾处退出脚本。奇怪的是,其他浏览器都没有这个问题,但是Firefox显然更挑剔。

filesize
© www.soinside.com 2019 - 2024. All rights reserved.