From 3ea9610796770bb2ba54d3c8c0f465a22eb9e3c8 Mon Sep 17 00:00:00 2001 From: Sem Date: Thu, 7 Nov 2013 06:01:06 +0100 Subject: Making video thumbnails faster (thanks to ura soul). --- thumbnail.php | 77 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 24 deletions(-) (limited to 'thumbnail.php') diff --git a/thumbnail.php b/thumbnail.php index bd93f8e63..7a4ca8b6c 100644 --- a/thumbnail.php +++ b/thumbnail.php @@ -1,35 +1,64 @@ getSubtype() != "videolist_item") { +// won't be able to serve anything if no joindate or guid +if (!isset($_GET['joindate']) || !isset($_GET['guid'])) { + header("HTTP/1.1 404 Not Found"); exit; } -$readfile = new ElggFile(); -$readfile->owner_guid = $item->owner_guid; -$readfile->setFilename("videolist/{$item->guid}.jpg"); -$contents = $readfile->grabFile(); +$join_date = (int)$_GET['joindate']; +$owner_guid = (int)$_GET['owner_guid']; +$guid = (int)$_GET['guid']; + +$mysql_dblink = @mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true); +if ($mysql_dblink) { + if (@mysql_select_db($CONFIG->dbname, $mysql_dblink)) { + $result = mysql_query("select name, value from {$CONFIG->dbprefix}datalists where name='dataroot'", $mysql_dblink); + if ($result) { + $row = mysql_fetch_object($result); + while ($row) { + if ($row->name == 'dataroot') { + $data_root = $row->value; + } + $row = mysql_fetch_object($result); + } + } + + @mysql_close($mysql_dblink); + + if (isset($data_root)) { -// caching images for 10 days -header("Content-type: image/jpeg"); -header('Expires: ' . date('r',time() + 864000)); -header("Pragma: public", true); -header("Cache-Control: public", true); -header("Content-Length: " . strlen($contents)); + // this depends on ElggDiskFilestore::makeFileMatrix() + $user_path = date('Y/m/d/', $join_date) . $owner_guid; -echo $contents; -exit; + $filename = "$data_root$user_path/videolist/{$guid}.jpg"; + $size = @filesize($filename); + if ($size) { + header("Content-type: image/jpeg"); + header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true); + header("Pragma: public"); + header("Cache-Control: public"); + header("Content-Length: $size"); + readfile($filename); + exit; + } + } + } + +} + +// something went wrong so load engine and try to forward to default icon +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); +elgg_log("Profile icon direct failed.", "WARNING"); +forward("mod/videolist/graphics/videolist_icon_{$size}.png"); -- cgit v1.2.3