Intereting Posts

Страница загрузки PHP

Как часто эти страницы загрузки PHP (например, somesite.com/download.php?id=somefile) работают?

Первоначально я думал о странице, которая делает материал счетчика, а затем просто перенаправляет пользователя на URL-адрес файлов (который, кажется, является единственным ответом, данным в другом месте, однако я не вижу, как это обеспечивает всю функциональность), однако среди других вещи, это не помешает прямой ссылке, и не позволяет мне защищать паролем некоторые файлы. Некоторые сайты даже, похоже, реализуют ограничение скорости загрузки (на основе учетной записи пользователя), пользователей очереди и т. Д.

Как правило, они не перенаправляют URL-адрес файла. Вместо этого они используют readfile() чтобы напрямую выводить URL-адрес из readfile() места, где он хранится (обычно, где-то вне корня веб-сайта). Решает проблему прямой связи, защиты паролем, очереди и т. Д. Ограничение скорости должно быть на конце веб-сервера.

Чаще всего это делается с помощью readfile php-функции:

 if(is_allowed_to_download()){ header("Content-Disposition: attachment; filename=".basename( $file )); header("Content-Type: application/octet-stream"); header("Content-Length: ". filesize( $file ) ); header("Content-Transfer-Encoding: binary"); @readfile($file); exit; } 

Реже используются серверные решения – отправка заголовка X-SendFile: file-location.exe для lighttpd и apache с mod_xsendfile (nginx также имеет некоторый эквивалент). Это немного лучше, потому что http-серверы оптимизированы для обслуживания контента и позволяют использовать расширенное использование, например, заголовки Range (для ускорителей загрузки).

Они просто прослеживают много вещей о вас – файлы cookie, IP-адрес, ссылку реферера, имя браузера.

Это не проблема PHP. Чтобы сделать «загрузку» веб-браузера (будь то содержимое статического файла или тело динамически сгенерированного отчета), установите заголовок Content-Disposition в ответе HTTP . PHP позволяет настроить заголовки HTTP с помощью функции заголовка , поэтому ваш PHP-скрипт должен сделать это до потоковой передачи содержимого файла обратно на HTTP-клиент.

Если вы предшествуете своей функции DownloadFile () с некоторой проверкой безопасности, вы можете легко защитить файл, либо используя user_session, либо отправляя пароль как часть запроса.