diff options
author | Andrew Dolgov <[email protected]> | 2017-10-08 17:10:05 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2017-10-08 17:14:56 +0300 |
commit | 8b73bd28d81b4fd08a44ed6cc46ebedcab65f0b2 (patch) | |
tree | 17367aaf5179aef32aaddb53cf0202584a5a8e26 /include/functions.php | |
parent | 852496fa15fd2e749bb867301e155fb46fb6fc76 (diff) |
remove apache-specific x-sendfile stuff
implement a hook (HOOK_SEND_LOCAL_FILE) which plugins may use to send files
via httpd-specific implementation to increase performance typically on larger files
Diffstat (limited to 'include/functions.php')
-rw-r--r-- | include/functions.php | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/functions.php b/include/functions.php index 203454747..392042b90 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2514,3 +2514,33 @@ } } + /* this is essentially a wrapper for readfile() which allows plugins to hook + output with httpd-specific "fast" implementation i.e. X-Sendfile or whatever else + + hook function should return true if request was handled (or at least attempted to) + + note that this can be called without user context so the plugin to handle this + should be loaded systemwide in config.php */ + function send_local_file($filename) { + if (file_exists($filename)) { + $tmppluginhost = new PluginHost(); + + $tmppluginhost->load(PLUGINS, PluginHost::KIND_SYSTEM); + $tmppluginhost->load_data(); + + foreach ($tmppluginhost->get_hooks(PluginHost::HOOK_SEND_LOCAL_FILE) as $plugin) { + if ($plugin->hook_send_local_file($filename)) return true; + } + + $mimetype = mime_content_type($filename); + header("Content-type: $mimetype"); + + $stamp = gmdate("D, d M Y H:i:s", filemtime($filename)) . " GMT"; + header("Last-Modified: $stamp", true); + + return readfile($filename); + } else { + return false; + } + } + |