Размер и счетчик скачиваний файла на PHP. MySQL не используется. Благодаря гибкости и удобству использования является хорошим решением в ряде случаев.
A. Блок счетчика и файла, который предлагается к скачиванию и число скачек которого выводится:
1. Создать директорию (expl_dl
), в которую поместить предлагаемый для скачивания файл (expl.zip
).
2. Создать в этой же директории пустой файл (expl.txt
), в котором будет храниться число скачиваний.
3. Создать в этой же директории файл обработчика числа скачиваний (expl.php
):
<?php
$f=fopen("expl.txt","a+");
flock($f,LOCK_EX);
$count=fread($f,100);
@$count++;
ftruncate($f,0);
fwrite($f,$count);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
Header("location:expl.zip");
?>
B. Блок определения размера файла:
До <!DOCTYPE>
:
<?php
function filesize_get($file)
{
// проверяем, существует ли файл
if(!file_exists($file)) return "Файл отсутствует.";
//определяем размер файла
$filesize = filesize($file);
// Если размер переданного в функцию файла больше 1кб
if($filesize > 1024)
{
$filesize = ($filesize/1024);
// если размер файла больше одного килобайта
// пересчитываем в мегабайтах
if($filesize > 1024)
{
$filesize = ($filesize/1024);
// если размер файла больше одного мегабайта
// пересчитываем в гигабайтах
if($filesize > 1024)
{
$filesize = ($filesize/1024);
$filesize = round($filesize, 2);
return $filesize." GB";
}
else
{
$filesize = round($filesize, 2);
return $filesize." MB";
}
}
else
{
$filesize = round($filesize, 2);
return $filesize." Kb";
}
}
else
{
$filesize = round($filesize, 2);
return $filesize." bytes";
}
}
?>
C. Блок вывода в браузер:
Между <body></body>
:
<a href="expl.php">Скачать файл</a>
<!--выводим ссылку для скачивания-->
<?php
$file="expl.zip"; // инициализируем переменную определения размера нужным файлом
echo " Размер: <span style=\"color:blue\">".filesize_get($file)."</span> |"; //выводим размер этого файла
$s=file("expl.txt"); // инициализируем переменную файлом, хранящим число скачиваний нужного файла
echo " Скачан: <span style=\"color:red\">$s[0]</span> раз"; //выводим результат
?>
Собственно, синтаксис с выводом $s[0]
хромает, хоть и работает: нужно или через включение – {$s[0]}
, или через стандарт – echo " Скачан: <span style=\"color:red\">".$s[0]."</span> раз";
Поскольку используется только php
, то показания счетчика скачиваний в браузере изменяются при обновлении страницы.
Комментарии:
Спеццц#
Попробовал, что то не работает… Мне надо что бы показывало размер файла по ссылке, например – dl.google.com/edgedl/chrome/install/GoogleChromeStandaloneEnterprise.msi (размер – 20мб) а точнее – GoogleChrome (размер – 20мб) И так на разных страницах с разными ссылками.. Не пашет в общем, как его применить в моем случае, что бы работало, подскажите. Спасибо.
coder.hol.es /* Админ */#
Может зависеть от хостинга, движка – если допускается выполнение php5.2 и выше, то должно работать. Попробуйте на локалке (денвере, например) – пример рабочий, поэтому нужно попробовать найти причину, имхо. Тем более, что вам нужен только размер, без счетчика – тогда только функция filesize_get($file), в которую (т.е. присваиваете $file) передаете правильный путь к нужному файлу.
Спеццц#
Движок используемый для применения скрипта – DLE. Я там имел ввиду, что ссылки на скачивание все внешние… как с этим быть? Создаю файл li.php, в нем код: который вы пишите "До <!DOCTYPE>", инклудю его до <!DOCTYPE>… Создаю файл link.php, в нем код: <?php $file="expl.zip"; // инициализируем переменную определения размера нужным файлом echo " Размер: <span style=\"color:blue\">".filesize_get($file)."</span> |"; //выводим размер этого файла ?> Ссылки добавляю через доп. поля. Я не говорил что не работает вообще, просто это я не то делаю, а как правильно не знаю. Помогите применить, не получается. Спасибо.
coder.hol.es /* Админ */#
По размеру внешнего файла, посмотрите: _http://www.internet-technologies.ru/articles/article_839.html#subscribeCansel; с ДЛЕ не работаю, но попробуйте задать вопрос здесь: _http://www.cy-pr.com/forum/f63/
Андрей#
А как сделать чтоб архив rar скачивался? Ато он шифрует его.