Strict Standards: Resource ID#29 used as offset, casting to integer (29) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#31 used as offset, casting to integer (31) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#32 used as offset, casting to integer (32) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: PHP-cтраничка с числом закачек [2]
ТвойWeb » WebMaster класс » PHP/Perl » PHP-cтраничка с числом закачек

Страниц (2): « 1 [2]
 

11. ETC - 16 Февраля, 2004 - 15:49:37 - перейти к сообщению
Вот тут я накатал. Особо не тестил, но, вроде работает. Считает закачки файлов и пишет в файл counter.data. Сам файл скрипт нужно обозвать как out.php. Ссылка на файл должны выглядеть след. образом: http://mysite.ru/out.php?file=download/file.zip , где download/file.zip - полный путь от начала сайта, т.е. реально это http://mysite.ru/download/file.zip . Файл out.php необходимо положить в корневую директорию. Можно вывести статистику по файлам след. образом: открыть файл так: http://mysite.ru/out.php?list . Файл counter.data создаёт автоматически. Ну а вот и мои двухнедельные познания в PHP:
PHP:
<?
// Written by ETC [http://etc2002.narod.ru]
$exfile = "counter.data";
if (!file_exists($exfile)) {
$fp = fopen($exfile,"w");
fclose($fp);
}
if (isset($file)) {
$direcory = ".";
$filename = basename($file);
$directory = dirname($file);
if (strpos($directory,"..")>0) die("Hack attempt...");
if (!is_dir($directory)) die("Directory not found: ".$directory);
if (!file_exists($file)) die("File not found: ".$filename);
} else if (isset($list)) {
echo "<HTML>
<HEAD>
<TITLE>Статистика</TITLE>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">
<meta http-equiv=\"pragma\" content=\"no-cache\">
</HEAD>
<BODY BGCOLOR=\"#FFFFFF\">
<H3>Статистика обращений к файлам</H3>\n";

$fp = fopen($exfile,"a+");
$fr = fread($fp,filesize($exfile));
$files = explode("\n",$fr);
while (list($key,$value) = each($files)) {
$cfile = explode(":",$value);
echo "Файл <b>".$cfile[0]."</b> = <font color=\"#ff0000\"><b>".$cfile[1]."</b></font> закачек
\n";
}
echo "</BODY>\n</HTML>";
fclose($fp);
exit;
} else {
die("Bad request");
}
$fp = fopen($exfile,"a+");
$fr = fread($fp,filesize($exfile));
$files = explode("\n",$fr);
$akey = -1;
while (list($key,$value) = each($files)) {
$cfile = explode(":",$value);
$ccfile = $cfile[0];
if ($ccfile==$file) {
$akey = $key;
break;
}
}
if ($akey==-1) {
$fw = fwrite($fp,((filesize($exfile)>0)?"\n":"").$file.":1");
} else {
$count = substr($files[$akey],strpos($files[$akey],":")+1);
$count++;
$files[$akey] = $file.":".$count;
fclose($fp);
$fp = fopen($exfile,"w");
$fw = fwrite($fp,join("\n",$files));
}
fclose($fp);
header ("Location: ".$file);
?>
\n\n(Добавление)
Одно "НО": этот скрипт не выводит показаний типа: "этот файл скачан N раз". Если надо, то могу сделать...
12. TvoyWeb - 16 Февраля, 2004 - 16:09:50 - перейти к сообщению
ETC
:up::super::super::beer:
13. TvoyWeb - 17 Февраля, 2004 - 01:34:48 - перейти к сообщению
ETC, вот протестил твой скрипт.
1. Не работает при register_globals=Off
2. Одинаковые кавычки в обрамлении и внутри. Вот посмотри
PHP:
<? echo "<HTML>
<HEAD>
<TITLE>Статистика</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="pragma" content="no-cache">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H3>Статистика обращений к файлам</H3>n";
?>
Что не есть гуд и PHP ругается.
Должно быть хотябы так
PHP:
<? echo '<HTML>
<HEAD>
<TITLE>Статистика</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="pragma" content="no-cache">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H3>Статистика обращений к файлам</H3>n';
?>

3. В этом куске кода и в других ты используешь "n" для перевода строки. Это не работает. Используй просто тег "BR".
4. Для разделения строки из файла ты используешь "n", надо бы заменить на что нибудь оригинальное. Дело в том что из за этого скрипт порезал название файла аж в трех местах.
Ну вроде все.
14. ETC - 17 Февраля, 2004 - 06:09:01 - перейти к сообщению
TvoyWeb
Форум потёр мои обратные слеши, блин! Я не заметил... ещё бы ругаться будет! У меня обратные понатыканы, и n с обратным слешем и проч.. Т.е. где n, должно быть n и обратный слеш вначале. Короче сливайте отсюда: http://etc.newmail.ru/counter.zip\n\n(Добавление)
В след. раз я буду выкладывать файл, а не в виде кода... ошибок много. "n" с обратным слешем - это перевод строки и каждый файл записывается как новая строка. Щас напишу скрипт для выдачи "файл скачивался N раз"... выложу в том же архиве, что и выше. Пока этот качать можно, но в нём только один файл на данный момент...\n\n(Добавление)
Всё, добавил. Файл ftest.php - просто как тест, в нём описано, как подключить PHP-счётчик к основной странице и как выводить показания. out.php - собственно сам счётчик, как пользоваться - указано выше. fcounter.php - файл, подключаемый к основной странице, содержит функцию вывода значений скачиваний. А вообще можно всё усложнить, привязав к каждому IP одно скачивание, даже если несколько раз скачивали... хотя, я думаю, сойдёт и этот...
15. TvoyWeb - 17 Февраля, 2004 - 08:35:51 - перейти к сообщению
ETC
Не работает при register_globals=Off
Открой свой php.ini и настрой на register_globals=Off
В следующих версиях PHP, скорее всего этого параметра не будет, то есть он по умолчанию будет Off.
16. ETC - 17 Февраля, 2004 - 09:07:29 - перейти к сообщению
TvoyWeb
Посмотрю\n\n(Добавление)
TvoyWeb
Теперь работает =))). Кстати, метод, пардон, функция extract() тоже не очень безопасна, особенно HTTP_GET_VARS и HTTP_POST_VARS... лучше переписать скрипт попрямее, что я и сделал, заменив пару строк и перенеся часть скрипта в условие (хотя можно было и не делать, но так логичнее). Кстати, TvoyWeb, похоже эту ветку придётся переименовать, так как никто тут по Народу вопросов не задаёт, всё какие-то PHP, денверы Улыбка

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0385]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33