Также решает проблему переполнения буфера при скачивании больших файлов
function file_force_download($file) { if (file_exists($file)) { // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт // если этого не сделать файл будет читаться в память полностью! if (ob_get_level()) { ob_start(); ob_end_clean(); } // заставляем браузер показать окно сохранения файла header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); // читаем файл и отправляем его пользователю if ($fd = fopen($file, 'rb')) { while (!feof($fd)) { print fread($fd, 1024); } fclose($fd); } exit; } }
htaccess в корне
RewriteCond %{REQUEST_URI} \.(3gp|3GP|jar|sis|apk|rar|zip)$ RewriteCond %{HTTP_REFERER} !^http://(.+\.)?site\.me/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(3gp|3GP|jar|sis|apk|rar|zip)$ http://site.me/?err [L]