У меня есть сайт хостинга файлов, и пользователи зарабатывают вознаграждение за загрузки. Таким образом, я хотел знать, там способ, которым я могу отследить, загрузил ли посетитель целый файл так, чтобы не было никаких поддельных частичных загрузок только для вознаграждений.
Спасибо.
Если бы вы могли отслеживать коды ответов HTTP, возвращаемые вашим веб-сервером, и связывать их с сессиями, которые их генерируют, вы были бы в деле.
Код ответа 206 показывает, что система доставила часть информации, но не всю. Когда последний фрагмент файла будет отправлен, он не должен иметь код ответа 206.
Если вы можете связать это с сессиями пользователей, поместив код сессии в URL, тогда вы сможете начислять баллы на основе простого агрегирования журналов.
Я реализовал подобное решение на веб-сайте хостинга файлов.
Что вы хотите сделать, так это использовать обратный вызов register_shutdown_function, который позволяет вам определять конец выполнения php-скрипта независимо от результата.
Затем вы хотите, чтобы ваш файл находился в недоступном для Интернета месте на вашем сервере (ах), и чтобы ваши загрузки проходили через php: идея заключается в том, что вы хотите иметь возможность отслеживать, сколько байтов было передано в клиент.
Вот основной способ реализации (например:)
<?php
register_shutdown_function('shutdown', $args);
$file_name = 'file.ext';
$path_to_file = '/path/to/file';
$stat = @stat($path_to_file);
//Set headers
header('Content-Type: application/octet-stream');
header('Content-Length: '.$stat['size']);
header('Connection: close');
header('Content-disposition: attachment; filename='.$file_name);
//Get pointer to file
$fp = fopen('/path/to/file', 'rb');
fpassthru($fp);
function shutdown() {
$status = connection_status();
//A connection status of 0 indicates no premature end of script
if($status == 0){
//Do whatever to increment the counter for the file.
}
}
>?
Очевидно, что есть способы улучшить, поэтому, если вам нужны более подробные сведения или другое поведение, пожалуйста, дайте мне знать!