Я нашел этот отличный скрипт для загрузки и защиты файлов из каталога:
http://www.gowondesigns.com/?page.getfile
И я тоже видел этот код с сайта:
// local file that should be send to the client $local_file = 'test-file.zip'; // filename that the user gets as default $download_file = 'your-download-name.zip'; // set the download rate limit (=> 20,5 kb/s) $download_rate = 20.5; if(file_exists($local_file) && is_file($local_file)) { // send headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); // flush content flush(); // open file stream $file = fopen($local_file, "r"); while (!feof($file)) { // send the current file part to the browser print fread($file, round($download_rate * 1024)); // flush the content to the browser flush(); // sleep one second sleep(1); } // close file stream fclose($file); } else { die('Error: The file '.$local_file.' does not exist!'); }
Как я могу объединить их? Я имею в виду, как я могу использовать скрипт getfile и добавить к нему скорость загрузки?
Я попытался добавить:
while (!feof($file)) { // send the current file part to the browser print fread($file, round($download_rate * 1024)); // flush the content to the browser flush(); // sleep one second sleep(1); }
Но вместо $ file я думаю, что это должно быть $ fd, и у меня не было положительных результатов
Что я делаю не так?
Основываясь на вашем комментарии – я предполагаю, что вы хотите следующее:
// open file stream $file = fopen($local_file, "r"); while (!feof($file)) { // send the current file part to the browser print fread($file, round($download_rate * 1024)); // flush the content to the browser flush(); // sleep one second sleep(1); } // close file stream fclose($file);
Однако вы должны отметить, что именно весь сценарий заставит его успешно запросить пользователя для загрузки файла и ограничения скорости. Просто переименуйте первый скрипт в свой вопрос как download.php, а затем ссылку на него как <a href='download.php?id=1'>Download 1</a>
(тогда будет загружен файл ID 1).
<?php $file_id = $_GET['id']; if($file_id == 1){ // local file that should be send to the client $local_file = 'test-file.zip'; // filename that the user gets as default $download_file = 'your-download-name.zip'; } else { die('Invalid file selected for download'); } // set the download rate limit (=> 20,5 kb/s) $download_rate = 20.5; if(file_exists($local_file) && is_file($local_file)) { // send headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); // flush content flush(); // open file stream $file = fopen($local_file, "r"); while (!feof($file)) { // send the current file part to the browser print fread($file, round($download_rate * 1024)); // flush the content to the browser flush(); // sleep one second sleep(1); } // close file stream fclose($file); } else { die('Error: The file '.$local_file.' does not exist!'); } ?>
<?php $file = @$_GET["file"]; $rate = 100; // kb/sn if (!file_exists($file)) {die("File Not Found");} header("Content-Disposition: attachment; filename=" . $file); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Length: " . filesize($file)); flush(); // this doesn't really matter. $fp = fopen($file, "r"); while (!feof($fp)) { echo fread($fp, $rate * 1024); flush(); sleep(1); } fclose($fp); ?>
Я использую это. И не проблема.