@@ -13,8 +13,9 @@ discard block |
||
| 13 | 13 | * @version 2.1 Beta 3 |
| 14 | 14 | */ |
| 15 | 15 | |
| 16 | -if (!defined('SMF')) |
|
| 16 | +if (!defined('SMF')) { |
|
| 17 | 17 | die('No direct access...'); |
| 18 | +} |
|
| 18 | 19 | |
| 19 | 20 | /** |
| 20 | 21 | * Shows an avatar based on $_GET['attach'] |
@@ -35,11 +36,11 @@ discard block |
||
| 35 | 36 | |
| 36 | 37 | if (!empty($modSettings['enableCompressedOutput']) && !headers_sent() && ob_get_length() == 0) |
| 37 | 38 | { |
| 38 | - if (@ini_get('zlib.output_compression') == '1' || @ini_get('output_handler') == 'ob_gzhandler') |
|
| 39 | - $modSettings['enableCompressedOutput'] = 0; |
|
| 40 | - |
|
| 41 | - else |
|
| 42 | - ob_start('ob_gzhandler'); |
|
| 39 | + if (@ini_get('zlib.output_compression') == '1' || @ini_get('output_handler') == 'ob_gzhandler') { |
|
| 40 | + $modSettings['enableCompressedOutput'] = 0; |
|
| 41 | + } else { |
|
| 42 | + ob_start('ob_gzhandler'); |
|
| 43 | + } |
|
| 43 | 44 | } |
| 44 | 45 | |
| 45 | 46 | if (empty($modSettings['enableCompressedOutput'])) |
@@ -71,8 +72,9 @@ discard block |
||
| 71 | 72 | } |
| 72 | 73 | |
| 73 | 74 | // Use cache when possible. |
| 74 | - if (($cache = cache_get_data('attachment_lookup_id-' . $attachId)) != null) |
|
| 75 | - list($file, $thumbFile) = $cache; |
|
| 75 | + if (($cache = cache_get_data('attachment_lookup_id-' . $attachId)) != null) { |
|
| 76 | + list($file, $thumbFile) = $cache; |
|
| 77 | + } |
|
| 76 | 78 | |
| 77 | 79 | // Get the info from the DB. |
| 78 | 80 | if (empty($file) || empty($thumbFile) && !empty($file['id_thumb'])) |
@@ -80,10 +82,9 @@ discard block |
||
| 80 | 82 | // Do we have a hook wanting to use our attachment system? We use $attachRequest to prevent accidental usage of $request. |
| 81 | 83 | $attachRequest = null; |
| 82 | 84 | call_integration_hook('integrate_download_request', array(&$attachRequest)); |
| 83 | - if (!is_null($attachRequest) && $smcFunc['db_is_resource']($attachRequest)) |
|
| 84 | - $request = $attachRequest; |
|
| 85 | - |
|
| 86 | - else |
|
| 85 | + if (!is_null($attachRequest) && $smcFunc['db_is_resource']($attachRequest)) { |
|
| 86 | + $request = $attachRequest; |
|
| 87 | + } else |
|
| 87 | 88 | { |
| 88 | 89 | // Make sure this attachment is on this board and load its info while we are at it. |
| 89 | 90 | $request = $smcFunc['db_query']('', ' |
@@ -176,13 +177,15 @@ discard block |
||
| 176 | 177 | } |
| 177 | 178 | |
| 178 | 179 | // Cache it. |
| 179 | - if (!empty($file) || !empty($thumbFile)) |
|
| 180 | - cache_put_data('attachment_lookup_id-' . $file['id_attach'], array($file, $thumbFile), mt_rand(850, 900)); |
|
| 180 | + if (!empty($file) || !empty($thumbFile)) { |
|
| 181 | + cache_put_data('attachment_lookup_id-' . $file['id_attach'], array($file, $thumbFile), mt_rand(850, 900)); |
|
| 182 | + } |
|
| 181 | 183 | } |
| 182 | 184 | |
| 183 | 185 | // Replace the normal file with its thumbnail if it has one! |
| 184 | - if (!empty($showThumb) && !empty($thumbFile)) |
|
| 185 | - $file = $thumbFile; |
|
| 186 | + if (!empty($showThumb) && !empty($thumbFile)) { |
|
| 187 | + $file = $thumbFile; |
|
| 188 | + } |
|
| 186 | 189 | |
| 187 | 190 | // No point in a nicer message, because this is supposed to be an attachment anyway... |
| 188 | 191 | if (!file_exists($file['filePath'])) |
@@ -232,8 +235,8 @@ discard block |
||
| 232 | 235 | } |
| 233 | 236 | |
| 234 | 237 | // Update the download counter (unless it's a thumbnail or resuming an incomplete download). |
| 235 | - if ($file['attachment_type'] != 3 && empty($showThumb) && $range === 0) |
|
| 236 | - $smcFunc['db_query']('attach_download_increase', ' |
|
| 238 | + if ($file['attachment_type'] != 3 && empty($showThumb) && $range === 0) { |
|
| 239 | + $smcFunc['db_query']('attach_download_increase', ' |
|
| 237 | 240 | UPDATE LOW_PRIORITY {db_prefix}attachments |
| 238 | 241 | SET downloads = downloads + 1 |
| 239 | 242 | WHERE id_attach = {int:id_attach}', |
@@ -241,12 +244,14 @@ discard block |
||
| 241 | 244 | 'id_attach' => $attachId, |
| 242 | 245 | ) |
| 243 | 246 | ); |
| 247 | + } |
|
| 244 | 248 | |
| 245 | 249 | // Send the attachment headers. |
| 246 | 250 | header('Pragma: '); |
| 247 | 251 | |
| 248 | - if (!isBrowser('gecko')) |
|
| 249 | - header('Content-Transfer-Encoding: binary'); |
|
| 252 | + if (!isBrowser('gecko')) { |
|
| 253 | + header('Content-Transfer-Encoding: binary'); |
|
| 254 | + } |
|
| 250 | 255 | |
| 251 | 256 | header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 525600 * 60) . ' GMT'); |
| 252 | 257 | header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($file['filePath'])) . ' GMT'); |
@@ -255,18 +260,19 @@ discard block |
||
| 255 | 260 | header('ETag: ' . $eTag); |
| 256 | 261 | |
| 257 | 262 | // Make sure the mime type warrants an inline display. |
| 258 | - if (isset($_REQUEST['image']) && !empty($file['mime_type']) && strpos($file['mime_type'], 'image/') !== 0) |
|
| 259 | - unset($_REQUEST['image']); |
|
| 263 | + if (isset($_REQUEST['image']) && !empty($file['mime_type']) && strpos($file['mime_type'], 'image/') !== 0) { |
|
| 264 | + unset($_REQUEST['image']); |
|
| 265 | + } |
|
| 260 | 266 | |
| 261 | 267 | // Does this have a mime type? |
| 262 | - elseif (!empty($file['mime_type']) && (isset($_REQUEST['image']) || !in_array($file['fileext'], array('jpg', 'gif', 'jpeg', 'x-ms-bmp', 'png', 'psd', 'tiff', 'iff')))) |
|
| 263 | - header('Content-Type: ' . strtr($file['mime_type'], array('image/bmp' => 'image/x-ms-bmp'))); |
|
| 264 | - |
|
| 265 | - else |
|
| 268 | + elseif (!empty($file['mime_type']) && (isset($_REQUEST['image']) || !in_array($file['fileext'], array('jpg', 'gif', 'jpeg', 'x-ms-bmp', 'png', 'psd', 'tiff', 'iff')))) { |
|
| 269 | + header('Content-Type: ' . strtr($file['mime_type'], array('image/bmp' => 'image/x-ms-bmp'))); |
|
| 270 | + } else |
|
| 266 | 271 | { |
| 267 | 272 | header('Content-Type: ' . (isBrowser('ie') || isBrowser('opera') ? 'application/octetstream' : 'application/octet-stream')); |
| 268 | - if (isset($_REQUEST['image'])) |
|
| 269 | - unset($_REQUEST['image']); |
|
| 273 | + if (isset($_REQUEST['image'])) { |
|
| 274 | + unset($_REQUEST['image']); |
|
| 275 | + } |
|
| 270 | 276 | } |
| 271 | 277 | |
| 272 | 278 | // Convert the file to UTF-8, cuz most browsers dig that. |
@@ -274,24 +280,22 @@ discard block |
||
| 274 | 280 | $disposition = !isset($_REQUEST['image']) ? 'attachment' : 'inline'; |
| 275 | 281 | |
| 276 | 282 | // Different browsers like different standards... |
| 277 | - if (isBrowser('firefox')) |
|
| 278 | - header('Content-Disposition: ' . $disposition . '; filename*=UTF-8\'\'' . rawurlencode(preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name))); |
|
| 279 | - |
|
| 280 | - elseif (isBrowser('opera')) |
|
| 281 | - header('Content-Disposition: ' . $disposition . '; filename="' . preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name) . '"'); |
|
| 282 | - |
|
| 283 | - elseif (isBrowser('ie')) |
|
| 284 | - header('Content-Disposition: ' . $disposition . '; filename="' . urlencode(preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name)) . '"'); |
|
| 285 | - |
|
| 286 | - else |
|
| 287 | - header('Content-Disposition: ' . $disposition . '; filename="' . $utf8name . '"'); |
|
| 283 | + if (isBrowser('firefox')) { |
|
| 284 | + header('Content-Disposition: ' . $disposition . '; filename*=UTF-8\'\'' . rawurlencode(preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name))); |
|
| 285 | + } elseif (isBrowser('opera')) { |
|
| 286 | + header('Content-Disposition: ' . $disposition . '; filename="' . preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name) . '"'); |
|
| 287 | + } elseif (isBrowser('ie')) { |
|
| 288 | + header('Content-Disposition: ' . $disposition . '; filename="' . urlencode(preg_replace_callback('~&#(\d{3,8});~', 'fixchar__callback', $utf8name)) . '"'); |
|
| 289 | + } else { |
|
| 290 | + header('Content-Disposition: ' . $disposition . '; filename="' . $utf8name . '"'); |
|
| 291 | + } |
|
| 288 | 292 | |
| 289 | 293 | // If this has an "image extension" - but isn't actually an image - then ensure it isn't cached cause of silly IE. |
| 290 | - if (!isset($_REQUEST['image']) && in_array($file['fileext'], array('gif', 'jpg', 'bmp', 'png', 'jpeg', 'tiff'))) |
|
| 291 | - header('Cache-Control: no-cache'); |
|
| 292 | - |
|
| 293 | - else |
|
| 294 | - header('Cache-Control: max-age=' . (525600 * 60) . ', private'); |
|
| 294 | + if (!isset($_REQUEST['image']) && in_array($file['fileext'], array('gif', 'jpg', 'bmp', 'png', 'jpeg', 'tiff'))) { |
|
| 295 | + header('Cache-Control: no-cache'); |
|
| 296 | + } else { |
|
| 297 | + header('Cache-Control: max-age=' . (525600 * 60) . ', private'); |
|
| 298 | + } |
|
| 295 | 299 | |
| 296 | 300 | // Multipart and resuming support |
| 297 | 301 | if (isset($_SERVER['HTTP_RANGE'])) |
@@ -299,9 +303,9 @@ discard block |
||
| 299 | 303 | header("HTTP/1.1 206 Partial Content"); |
| 300 | 304 | header("Content-Length: $new_length"); |
| 301 | 305 | header("Content-Range: bytes $range-$range_end/$size"); |
| 306 | + } else { |
|
| 307 | + header("Content-Length: " . $size); |
|
| 302 | 308 | } |
| 303 | - else |
|
| 304 | - header("Content-Length: " . $size); |
|
| 305 | 309 | |
| 306 | 310 | |
| 307 | 311 | // Try to buy some time... |
@@ -310,8 +314,9 @@ discard block |
||
| 310 | 314 | // For multipart/resumable downloads, send the requested chunk(s) of the file |
| 311 | 315 | if (isset($_SERVER['HTTP_RANGE'])) |
| 312 | 316 | { |
| 313 | - while (@ob_get_level() > 0) |
|
| 314 | - @ob_end_clean(); |
|
| 317 | + while (@ob_get_level() > 0) { |
|
| 318 | + @ob_end_clean(); |
|
| 319 | + } |
|
| 315 | 320 | |
| 316 | 321 | // 40 kilobytes is a good-ish amount |
| 317 | 322 | $chunksize = 40 * 1024; |
@@ -335,8 +340,9 @@ discard block |
||
| 335 | 340 | elseif ($size > 4194304) |
| 336 | 341 | { |
| 337 | 342 | // Forcibly end any output buffering going on. |
| 338 | - while (@ob_get_level() > 0) |
|
| 339 | - @ob_end_clean(); |
|
| 343 | + while (@ob_get_level() > 0) { |
|
| 344 | + @ob_end_clean(); |
|
| 345 | + } |
|
| 340 | 346 | |
| 341 | 347 | $fp = fopen($file['filePath'], 'rb'); |
| 342 | 348 | while (!feof($fp)) |
@@ -348,8 +354,9 @@ discard block |
||
| 348 | 354 | } |
| 349 | 355 | |
| 350 | 356 | // On some of the less-bright hosts, readfile() is disabled. It's just a faster, more byte safe, version of what's in the if. |
| 351 | - elseif (@readfile($file['filePath']) === null) |
|
| 352 | - echo file_get_contents($file['filePath']); |
|
| 357 | + elseif (@readfile($file['filePath']) === null) { |
|
| 358 | + echo file_get_contents($file['filePath']); |
|
| 359 | + } |
|
| 353 | 360 | |
| 354 | 361 | die(); |
| 355 | 362 | } |