Отслеживание файла завершает загрузку

У меня есть сайт хостинга файлов, и пользователи зарабатывают вознаграждение за загрузки. Таким образом, я хотел знать, там способ, которым я могу отследить, загрузил ли посетитель целый файл так, чтобы не было никаких поддельных частичных загрузок только для вознаграждений.

Спасибо.

6
задан Shishant 24 February 2010 в 21:10
поделиться

2 ответа

Если бы вы могли отслеживать коды ответов HTTP, возвращаемые вашим веб-сервером, и связывать их с сессиями, которые их генерируют, вы были бы в деле.

Код ответа 206 показывает, что система доставила часть информации, но не всю. Когда последний фрагмент файла будет отправлен, он не должен иметь код ответа 206.

Если вы можете связать это с сессиями пользователей, поместив код сессии в URL, тогда вы сможете начислять баллы на основе простого агрегирования журналов.

1
ответ дан 17 December 2019 в 20:31
поделиться

Я реализовал подобное решение на веб-сайте хостинга файлов.

Что вы хотите сделать, так это использовать обратный вызов 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.
  }
}
>?

Очевидно, что есть способы улучшить, поэтому, если вам нужны более подробные сведения или другое поведение, пожалуйста, дайте мне знать!

1
ответ дан 17 December 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: