Мне нужно знать, выбрал ли пользователь загрузку и нажал кнопку отмены, что не совпадает с ошибкой чтения файла. Я проверил счетчик, возвращенный функцией readfile, но он показывает байты в файле, даже если пользователь отменил загрузку из диалогового окна «Сохранить как».
Причина, по которой это необходимо, заключается в том, что мой сайт имеет разовую загрузку, когда участник дает разрешение на другое использование для загрузки своего файла один раз, а затем разрешение исчезает. Но если участник нажимает кнопку загрузки, а затем решает не загружать ее правильно, я не хочу, чтобы моя база данных обновлялась, чтобы показать, что он получил файл.
Это касается защиты интеллектуальной собственности, поскольку файлы являются собственностью пользователя, который их загрузил, и мне нужно вести учет того, что именно другие участники загрузили файл, в случае, если они начнут распространяться по Интернету. Но если функция readfile всегда отражает размер файла (то есть эти байты были каким-то образом переданы), я не могу узнать, был ли файл действительно загружен.
Я видел несколько постов на эту тему, но никаких реальных решений о том, что должно быть часто нужно, загружали или нет? Знание того, что они нажали кнопку загрузки, на самом деле не говорит, решили ли они пройти через нее, поскольку диалоговое окно «Сохранить как» позволяет кому-то отменить фактическое завершение загрузки.
Для полноты, вот мой код загрузки вплоть до функции readfile:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=$download_name");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize("sub/$doc_file"));
ob_clean();
flush();
$wasdownloaded = readfile("sub/$doc_file");