Добрый день! Имеются статьи на блоге. Каждый блог имеет свой id номер. Как сделать чтобы по id номер статьи счетчик читал количество просмотров данной статьи?
сделать скрипт (назовем его counter.php' ) на каком то домене при обращении к нему с блога счетчик считал срипт: <? вставить проверку по IP откуда идет запрос... типа что бы чужаки не накрутили счетчик $blogId = (int)$REQUEST_['blogId']; $postId = (int)$REQUEST_['postId']; тут загрузка массива $s[$blogId][$postId]++; тут сохранение массива ?> ну и в блоге вставляете что-то типа file_get_contents('http://example.com/counter.php')
О что то есть Был бы очень благодарен, если Вы помогли занести эти данные($s[$blogId][$postId]++ в БД MySQL
Смысл в том что, если я буду сохранять данные в сессию, то время загрузки страницы увеличится в двое или даже больше. --- Добавлено, 10 сен 2013 --- Вот нашел решение, напишу код полностью, может кто как и я ищет ответ на этот вопрос: Код: <?php /////////////////////////////////////////// /// Скрипт статистики просмотров станиц /// /////////////////////////////////////////// /* данные для соединения с MySQL */ $INFO['sql_host'] = "localhost"; $INFO['sql_user'] = "user name"; $INFO['sql_pass'] = "user pass"; $INFO['sql_database'] = "database name"; /* проверка, есть ли запись в MySQL */ /* таблице с таким id или ее нет */ function searchID($id) { $result = mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'"); $num_rows = mysql_num_rows($result); if ($num_rows>0) { return True; } else { return False; } } /* Читает запись из MySQL таблицы */ /* возвращает ассоциированный массив */ function MySQLRead($id) { $id = addslashes($id); $result = mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'"); return (array)mysql_fetch_assoc($result); } /* Обновление времени для конкретной записи */ function UpdateTime($id, $time) { $id = addslashes($id); $time = addslashes($time); $result = mysql_query ("UPDATE `my_log` SET `date` = '".$time."' WHERE `page_id` = '".$id."'"); return $result; } /* Обновление счетчиков для записи с указанным id */ function UpdateCounders($id, $all, $today) { $id = addslashes($id); //$time = addslashes($time); $result = mysql_query ("UPDATE `my_log` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'"); return $result; } /* Запись всех значений "По умолчанию" */ function Default_Write($id) { $id = addslashes($id); $result = mysql_query ("INSERT INTO `my_log` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60*60*24)."');"); return $result; } $unical_page_id_gid = md5($_SERVER['REQUEST_URI']); // получение md5() хэша из url страницы $link = mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']); // Соединение с MySQL mysql_select_db ($INFO['sql_database']); // Выбор базы данных if (!searchID($unical_page_id_gid)) // существует ли запись с таким id { Default_Write($unical_page_id_gid); // запись всех значений по умолчанию define("Today_and_all_counter", "Просмотров: 1"); } else // если не существует { $tmp = MySQLRead($unical_page_id_gid); // считаем значения $all = $tmp['all'] + 1; $today = $tmp['today'] +1; if (time()>=$tmp['date']) // если сутки с момента записи прошли { UpdateTime($unical_page_id_gid, (time()+60*60*24)); // обновим дату UpdateCounders($unical_page_id_gid, $all, 1); // обновим счетчики define("Today_and_all_counter", "Просмотров: 1"); } else // если еще нет { /* обновим счетчики */ UpdateCounders($unical_page_id_gid, $all, $today); } /* устанавливаем константу с текущими значениями счетчиков */ define("Today_and_all_counter", "Просмотров:<b> $all</b>"); } mysql_close($link); // Разрываем соединение с MySQL ?>
я не говорил о сесии... а с другой стороны - чем это увеличит? загрузить файл, сохранить файл в базе будет выглядить так - загрузить файл, разобрать его, получить данные, обновить, сохранить файл ну и где действий больше?
Я вы о каком виде хранения имели ввиду? И о каком файле идет речь? Мы же о данных говорим... Не знаю как, но я пробовал сохранять данные в сессии и время загрузки страницы увеличилось в разы. Хранить в БД хорошо тем что каждый id номер сохраняет защирфованном виде, а это соотвественно хорошо тем что id номер поста не будет повторятся.
бред пишите ваши проблемы с фалом сесий - проверка настроек решит это ваабщето имелось ввиду простая запись и чтения файла, не вижу смысла хранить такую мелочь в базе нужно шифрование используйте шифрование а вот о каком защищеном виде речь едет - не понятно Id статьи у разных блогов могут повторятся
Во во вов) зашем так жизнь усложнять такими скриптами) добавляем в БД в таблицу с постами столбик PHP: ALTER TABLE table ADD count int(11) NOT NULL DEFAULT 0; потом в скрипте(шаблоне) просмотра поста добавляем такой вот запрос PHP: UPDATE table SET count = (count + 1) WHERE post_id = ЧЕМУ ТО ТАМ РАВНО тоесть переменная с ID шкой поста вот и вся считалка
речь шла о простоте потом речь пошла о быстродействии... для такой мелочи использовать работу с базой... а можно еще если уж так надо, установить счетчик яндекса и настроить графики
а пример что выше я привел не простой и не обладает быстродействием? 1 столбик с добавлен к таблице к которой и так делается запрос выборки. а апдейт одной колонки в БД незаметен даже если считать время выполнения приложения. к тому же столбик является с типом целых чисел, ето сказка.
ты сначала обоснуй работу своего скрипта а не вставляем тут то там то... говорю еще раз, выборка из БД и так уже происходит!!! и взять лишних пару символов не затратит ресурсов и не замедлит запрос в твоем случае будет отдельно обращаться к отдельному файлу, чем больше обращений к файлам(много файлов раскиданых) тем меньшая производительность. или ты даже не можешь обосновать принцип действия своего кода?
Шифрование не для защиты используется, а для того чтобы id поста не повторялись и не сбивался счетчик. Да бывает такое что id поста одинаковые, а счетчик должен быть для каждого свой. --- Добавлено, 10 сен 2013 --- Попробуй и твой вариант. --- Добавлено, 10 сен 2013 --- Не могли бы Вы полностью написать код или примерчик привести, а то я с вашего кода толком не че и не понял. --- Добавлено, 10 сен 2013 --- Ребята большое Вам спасибо за ответы и за советы! Воспользовался советом nix, создал поле и сделал к ниму запрос.
даже не поленюсь полностью написать пусть ТС порадуется Код: <?php $ip=$_SERVER['REMOTE_ADDR']; if(!in_array($ip, array('192.168.0.1','192.168.0.2'))) die(); $filename = 'counter.dat'; $blogId = (int)$_REQUEST['blogId']; $postId = (int)$_REQUEST['postId']; if (file_exists($filename)) include($filename); else { $counter[$blogId][$postId] = 0; } $counter[$blogId][$postId]++; file_put_contents($filename, '<? $counter = '.var_export($counter, TRUE)); ?>