summaryrefslogtreecommitdiff
path: root/include/functions.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2017-10-08 17:10:05 +0300
committerAndrew Dolgov <[email protected]>2017-10-08 17:14:56 +0300
commit8b73bd28d81b4fd08a44ed6cc46ebedcab65f0b2 (patch)
tree17367aaf5179aef32aaddb53cf0202584a5a8e26 /include/functions.php
parent852496fa15fd2e749bb867301e155fb46fb6fc76 (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.php30
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;
+ }
+ }
+