Файл отслеживания завершен, загрузка - PullRequest
6 голосов
/ 25 февраля 2010

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

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

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

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

1 голос
/ 25 февраля 2010

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

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

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

...