Я создаю скрипт, чтобы сохранять статистику загрузки, но я бы хотел только обновить статистику, если файл был загружен НАСТОЯЩИМ.
Проблема заключается в том, что браузеры (например, Explorer 9, Chrome, …) автоматически начинают загрузку файла, пока диалог «сохранить / открыть» все еще открыт. Это означает, что файл может полностью загрузиться (в указанный вами каталог темпа, который я предполагаю), прежде чем пользователь укажет, где его сохранить (или пока Explorer по-прежнему показывает желтую предупреждающую панель).
Пользователь может решить отменить сохранение, даже если файл был успешно загружен. Как я могу сказать браузерам, чтобы они не загружались автоматически? Возможно, какой-то HTTP-заголовок? Любые другие решения?
Вы не можете делать то, что хотите. Это невозможно, по крайней мере, так, как вы просите.
То, что вы можете сделать, это поместить некоторый код в установщик, который обращается к вашему серверу при его запуске, и тогда ваш скрипт сможет отслеживать его. Это обычно делается, но, безусловно, не является надежным. Многие люди загружают программное обеспечение и устанавливают офлайн. (В частности, пользователи удаленного доступа, которые все еще существуют тысячами). Кроме того, нет гарантии, что установщик не будет заблокирован программным обеспечением брандмауэра или чем-то еще.
Так что все зависит от того, насколько плохо вам нужно знать, когда он был установлен. Если это имеет решающее значение, то перед установкой ваш установщик должен проверить с сервером. Конечно, это можно взломать, и вы ничего не можете с этим поделать. Но я подозреваю, что это сработает для ваших целей.
Кроме того, не забывайте о нескольких установках за загрузку.
Я не думаю, что вы это видите. Вы должны будете позволить кому-то заплатить за программное обеспечение, прежде чем отправлять его клиенту.
И я предлагаю вам позволить сайту запомнить покупку, поэтому, если что-то пошло не так во время загрузки, пользователь может повторить попытку, не заплатив лишний раз (или связавшись с администратором).
Ну, имея некоторую промежуточную страницу, чтобы подтвердить «да, я хочу загрузить это», может в основном устранять отмененные загрузки.
Теперь я не уверен, что это вполне возможно, но вы можете попытаться обслуживать файл через PHP, а не обычную загрузку с Apache. В PHP вы можете использовать readfile для работы с файлом из PHP-скрипта. Таким образом, вы можете вызвать readfile, flush и определить количество обслуживаемых байтов. Если это не соответствует количеству байтов в файле, оно было прервано. Я не уверен, что readfile работает так, но его стоит экспериментировать.
Заметьте, что до сих пор не будет исправлено то, о чем говорил Марсель, о том, что нужно нажать «Отменить» до завершения загрузки tempfile.