]> git.p6c8.net - jirafeau_mojo42.git/commitdiff
Add support for the X-Sendfile header/module to offload downloads. 102/head
authorHunter Fuller <hfuller@pixilic.com>
Thu, 17 Mar 2022 04:17:42 +0000 (23:17 -0500)
committerJérôme Jutteau <jerome@jutteau.fr>
Sat, 30 Apr 2022 19:25:40 +0000 (19:25 +0000)
With the appropriate config option enabled, Jirafeau will send the
X-Sendfile header instead of sending the file itself. As a result,
Apache/lighttpd will send the file without the intervention of Jirafeau,
and download resumes/seeking will also be enabled for this download.

If the user requested an encrypted file then this will not work, but it
should work in all other cases.

f.php
lib/config.original.php

diff --git a/f.php b/f.php
index e2547d7d36f19324089434fb10303890362a66a2..f7f378648fdf839aded9820adbbede0dfe880af5 100644 (file)
--- a/f.php
+++ b/f.php
@@ -272,11 +272,16 @@ elseif ($link['crypted']) {
 }
 /* Read file. */
 else {
 }
 /* Read file. */
 else {
-    $r = fopen(VAR_FILES . $p . $link['hash'], 'r');
-    while (!feof($r)) {
-        print fread($r, 1024);
+    if ($cfg['use_xsendfile']) {
+        $file_web_path = preg_replace('#^' . $_SERVER['DOCUMENT_ROOT'] . '#', '', VAR_FILES);
+        header('X-Sendfile: ' . $file_web_path . $p . $link['hash']);
+    } else {
+        $r = fopen(VAR_FILES . $p . $link['hash'], 'r');
+        while (!feof($r)) {
+            print fread($r, 1024);
+        }
+        fclose($r);
     }
     }
-    fclose($r);
 }
 
 if ($link['onetime'] == 'O') {
 }
 
 if ($link['onetime'] == 'O') {
index 365b5aae5795229fae33c333f3a5c837c83c4e8d..ecca24f33768b2124c42d8ffda26a4ff2d9104c2 100644 (file)
@@ -183,6 +183,16 @@ $cfg['file_hash'] = 'md5';
  */
 $cfg['litespeed_workaround'] = false;
 
  */
 $cfg['litespeed_workaround'] = false;
 
+/* Use the X-Sendfile header which should cause your webserver to handle
+ * the sending of the file. The webserver must be configured to do this
+ * using the mod_xsendfile module in Apache or the appropriate config in
+ * lighttpd. The offload will not happen in the case of server-side encrypted
+ * files, but all other cases should work. Benefits include being able
+ * to resume downloads and seek instantly in media players like VLC or
+ * the Firefox/Discord/Chrome embedded player.
+ */
+$cfg['use_xsendfile'] = false;
+
 /* Store uploader's IP along with 'link' file.
  * Depending of your legislation, you may have to adjust this parameter.
  */
 /* Store uploader's IP along with 'link' file.
  * Depending of your legislation, you may have to adjust this parameter.
  */

patrick-canterino.de