В настоящее время существует множество веб-сайтов для размещения файлов ( uploading websites
), и это, например, количество баллов за полную загрузку определенного файла.
Мой вопрос: я хочу понять, в чем заключается идея, которую они используют!
Как он рассчитывает только на полную загрузку файла?! я имею в виду, если я отменил загрузку файла после его запуска, он не будет считать точку! как он знал! есть ли какая-либо функция php, способная узнать, отменил ли я загрузку определенного точного файла или нет!
этот вопрос был все время в моем сознании и думал об этом, но я не могу понять, как это работает или какова его идея. ~ спасибо
Это можно сделать, используя мой другой ответ в качестве базы. Как я могу загрузить доступ к файлам вне каталога public_html? и заменяя readfile( $filename )
с readfileWhileConnected( $filename )
:
/** Read $filename until EOF or disconnect, * if disconnect then error_log() count of bytes read already */ function readfileWhileConnected( $filename ) { // Save and set ini values: $user_abort = ignore_user_abort(); ignore_user_abort(false); // Get file size and set bytes_sent to zero: $fsize = filesize($filename); $bytes_sent = 0; // Open file: $f = fopen($filename, 'r'); // Read file: while($chunk = fread($f, 1024)) { // Check if connection is still open: if(!connection_aborted()) { // Send $chunk to buffer (if any), then flush() buffers: echo $chunk; flush(); // Add $chunk length to $bytes_sent $bytes_sent += strlen($chunk); } else { // Close file: fclose($f); error_log("Connection closed at $bytes_sent/$fsize"); exit(); } // Close file: fclose($f); // Reset ini values: ignore_user_abort($user_abort); return $bytes_sent; } }
После того, как у вас class myNewSuperDownloadHandlerClass { ... }
новый блестящий class myNewSuperDownloadHandlerClass { ... }
, убедитесь, что вы только загружаете файлы через filedownload.php
описанные здесь, или если вы сделали хороший myNewSuperDownloadHandlerClass()
, используйте его, просто убедитесь, что readfileWhileConnected()
используется для каждой загрузки, требующей опроса статуса соединения.
Вы можете легко добавить обратный вызов для запуска, если пользователь закрывает соединение, здесь всего 2 выхода. (многие функции, которые часто return false; return true; return null; return false; return true;
и т. д.)