Content-length-header nicht korrekt gesetzt

Ich habe ein php-Skript (eigentlich https://drupal.org/project/file_force), die den Benutzer zwingen, klicken Sie auf einen link den download-link, indem die korrekten Header an die response.

Dieser link funktioniert 90% der Zeit. Gelegentlich wird der falsche content-length übergeben wird, damit die Benutzer werden immer scheinbar abgeschnitten-Dateien. Der Fehler wiederholt sich konsequent auf bestimmte Dateien, aber wenn diese Dateien neu hochgeladen, der Fehler kann nicht angezeigt werden auf die neue Instanz, die macht mich denken, dass dies nicht ein Problem mit den Dateien, sondern stattdessen ein cache irgendwo. Also lief ich clearstatcache() jedes mal ohne Erfolg. Was ist merkwürdig ist, dass php die übergabe des richtigen Datei-Größe, oder sagt, es ist, wenn ich übergeben Sie die Zeichenfolge es ist das einfügen in eine log-Datei.

Hier ist der relevante code:

  clearstatcache();
  return array(
    'Content-Type: ' . $mimeinfo,
    'Content-Disposition: ' . $disposition . '; filename="' . basename($filepath) . '";',
    //Content-Length is also a good header to send, as it allows the browser to
    //display a progress bar correctly.
    //There's a trick for determining the file size for files over 2 GB. Nobody
    //should be using this module with files that large, but… the sprintf()
    //trickery makes sure the value is correct for files larger than 2GB. See
    //note at http://php.net/filesize
    'Content-Length: ' . sprintf('%u', filesize($filepath)),
  );

Ein Beispiel für die Ausgabe von sprintf('%u', filesize($filepath)) auf eine Datei, die nicht funktioniert, ist 2682059 die irgendwie übersetzt wird, zu 1740048 wenn der browser zu sehen bekommt, es.

Ich habe versucht, das entfernen der sprintf-Funktion ohne Erfolg.
Ich habe auch versucht, dass Sie keinen Content-Length-Erklärung bei allen, aber jemand ist immer angebracht, mit der falsche Wert trotzdem. Das Letzte Stück der Beweise, die vielleicht schlägt manchen anderen code überschreiben, der content-Header bin ich hier, aber es zu lassen scheint allein anderen Headern, die ich ändern in den obigen code zu testen, dass die Theorie.

Irgendwelche Gedanken an, wo Sie zu suchen?

  • Haben Sie versucht, mit der überprüfung die Größe der Datei, die Sie mit filesize($filepath)?
  • Jup, die erste Zahl (2682059) ist das, was filesize($filepath) Retouren.
Schreibe einen Kommentar