Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PowerCounter - проблемка
 
 автор: denvor   (08.12.2004 в 00:20)
 
 

Установил сабж, настроил. Но при щелчке на странице статистика показывает только увеличение счетчика страницы index.phtml и тестовой index.php, а остальных страниц - нет (при щелчке по ним увеличивается счетчик index.phtml).
В чем может быть проблема (остальные страницы - .shtml - что-то в апачевском файле настроить, да?)

   
 
 автор: cheops   (08.12.2004 в 00:25)   письмо автору
 
   для: denvor   (08.12.2004 в 00:20)
 

PowerCounter срабатывает только в том случае, если страница интерепретируется как php-стринца. Прописать расширение shtml в качестве PHP-скрипта можно в конфигурационных файлах httpd.conf или .htaccess как это описано по ссылке.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1010

   
 
 автор: denvor   (08.12.2004 в 09:41)
 
   для: cheops   (08.12.2004 в 00:25)
 

У меня файлы shtml. Получается настроить ЛИБО чтобы пхп срабатывал, либо SSI.
Копаем дальше:)

   
 
 автор: Сервер   (15.12.2004 в 20:52)
 
   для: denvor   (08.12.2004 в 09:41)
 

Вот и у меня та же ситуация!
Так обрадовался хорошему счетчику...
У меня весь сайт построен на ssi !
описанные выше варианты почему-то не работают.

RemoveHandler .html .htm .shtml
AddType application/x-httpd-php .php .htm .html .phtml

Как же все таки быть??

   
 
 автор: glsv (Дизайнер)   (16.12.2004 в 01:58)   письмо автору
 
   для: denvor   (08.12.2004 в 09:41)
 

Хм, так просто здесь нельзя. PHP-код не выполняется в файлах SHTML.

SHTML и PHP можно объединить несколькими способами:

1 вариант:
На страницы с расширением shtml можно подключать php-файлы следующим образом:

<!--#include virtual="phpfile.php" -->


2 вариант:
И обратно - в php-файлы можно подключать результат выполнения файлов shtml. На php это делается так:

<?
 virtual 
("file.shtml");
?>


Вот что говорит мануал php по этому поводу:
------------------
Функция virtual() предназначена для работы в среде сервера Apache и является эквивалентом конструкции <!--#include virtual...-->, используемой в mod_include. Эта функция выполняет подзапрос Apache. Она бывает полезной в тех случаях, когда вам нужно включить в свой скрипт результат выполнения других CGI программ или скриптов или обработки сервером Apache .shtml файлов. Имейте в виду, что CGI скрипты должны создавать корректные CGI заголовки. Как минимум, CGI скрипт должен создавать заголовок Content-type. Если вы хотите включить в скрипт PHP файлы, используйте функцию include() или функцию require(); функция virtual() не должна использоваться для включения файлов, которые сами по себе являются PHP скриптами.

Перед тем, как осуществится выполнение подзапроса, все буферы сбрасываются и выдаются в броузер, также отсылаются заголовки, помещенные в буфер.
-------------------------
PS:
При подключении shtml в php-файлы теряются shtml-переменные.
И нельзя делать вложенные вызовы. Например: в php-файл подключаем shtml-файл, в котором, в свою очередь подключается php-файл.

PPS: если у Вас сайт на shtml и Вам нужен только счетчик, то для Вас более подойдет первый вариант: вставка php-файлов в shtml-файлы. Хотя... мы не тестировали такой вариант работы счетчика. Возможны накладки.

   
 
 автор: Сервер   (16.12.2004 в 11:51)
 
   для: glsv (Дизайнер)   (16.12.2004 в 01:58)
 

Спасибо за ответ!
Я подключил к моему shtml файлу "phpfile.php"

<!--#include virtual="phpfile.php" -->

в котором дал ссылку на "count.php"

<?php
// Подключаем счётчик
include "../zalen/count.php";
?>

В итоге счетчик считает "phpfile.php" как посещенную страницу а shtml остается не посчитанным,
тогда, я в shtml поставил ссылку на прямую к файлу подсчета count.php
И снова не то... счетчик считает, как посещенную "саму count.php" страницу.
ХМ...

Я однако не программист, я просто дизайнер. Может решение на поверхности а я его не вижу....

   
 
 автор: glsv (Дизайнер)   (16.12.2004 в 12:53)   письмо автору
 
   для: Сервер   (16.12.2004 в 11:51)
 

Хм… тогда надо тестировать. Попробую смоделировать ситуацию у себя и завтра отпишусь.

   
 
 автор: Сервер   (17.12.2004 в 18:15)
 
   для: glsv (Дизайнер)   (16.12.2004 в 12:53)
 

Можно конечно каждому SHTML файлу прикрепить свой PHP c тем же названием.
Но это если сайт из 10 страниц, а если сайт большой?...

   
 
 автор: glsv (Дизайнер)   (18.12.2004 в 00:46)   письмо автору
 
   для: glsv (Дизайнер)   (16.12.2004 в 12:53)
 

"Завтра" не получилось - пишу "послезавтра" :)

У себя я настроил счетчик. Но на реальном хостинге нужно экспериментировать с серверными переменными. Пока попробуем на $_SERVER["REDIRECT_DOCUMENT_NAME"]

В файле count.php замените строку
    $page=$PHP_SELF;

на
$page="/".$_SERVER["REDIRECT_DOCUMENT_NAME"];


Подключение в shtml-файлы осуществляется так:
<!--#include virtual="../counter/count.php" --> 

Т.е. относительный путь к файлу count.php

   
 
 автор: Сервер   (18.12.2004 в 09:56)
 
   для: glsv (Дизайнер)   (18.12.2004 в 00:46)
 

Спасибо за ответ!
Я использую "PowerCounter 2.1.2."

Такой строки в моем файле нет: $page=$PHP_SELF;

Высылаю полный код файла "count.php "

<?php
///////////////////////////////////////////////////
// Система учёта посещаемости сайта - PowerCounter
// 2003-2004 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Кузнецов М.В. (kuznetsov@softtime.ru)
// Голышев С.В. (softtime@softtime.ru)
///////////////////////////////////////////////////
include "config.php";
// Формируем строчку с ip
if($obtip == 0) $ip = $_SERVER['REMOTE_ADDR']; // По умолчанию
if($obtip == 1) $ip = urldecode(getenv(HTTP_CLIENTIP)); // www.nodex.ru
// Если подсеть доступна, добавляем её через слеш
$forward = getenv(HTTP_X_FORWARDED_FOR);
if (!empty($forward) && ($forward != $_SERVER['REMOTE_ADDR'])) $ip = $ip."/".$forward;
// Это строчка с реферером - URL страницы, с которой посетитель пришёл на
// сайт
$reff = urldecode($_SERVER["HTTP_REFERER"]);
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if($dbcnx)
{
// Выбираем базу данных
if(@mysql_select_db($dbname,$dbcnx))
{
$query = "SELECT id_page FROM pages WHERE name='".$_SERVER['PHP_SELF']."'";
$pgs = mysql_query($query);
if ($pgs)
{
// Выясним, первичный ключ (id_page) текущей страницы
if(mysql_num_rows($pgs)>0) $id_page = mysql_result($pgs,0);
// Если данная страница отсутствует в таблице pages
// и не разу не учитывалась - добавляем данную страницу в таблицу.
else
{
$query = "INSERT INTO pages VALUES (0, '".$_SERVER['PHP_SELF']."', 0)";
mysql_query($query);
// Выясняем первичный ключ только что добавленной
// страницы
$id_page = mysql_insert_id();
}
}
// Определяем строку USER_AGENT
$useragent = $_SERVER['HTTP_USER_AGENT'];
$browser = 'none';
// Выясняем браузер
if(strpos($useragent, "MSIE") !== false)
if(strpos($useragent, "Opera") == null) $browser = 'msie';
if(strpos($useragent, "Opera") !== false) $browser = 'opera';
if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
// Выясняем операционную систему
$os = 'none';
if(strpos($useragent, "Win") !== false) $os = 'windows';
if(strpos($useragent, "Linux") !== false
|| strpos($useragent, "Lynx") !== false
|| strpos($useragent, "Unix") !== false) $os = 'unix';
if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
// Выясняем принадлежность к поисковым роботам
if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
if(substr($useragent, 0, 9) == "Googlebot") $os = 'robot_google';
if(substr($useragent, 0, 6) == "Yandex") $os = 'robot_yandex';
if(substr($useragent, 0, 5) == "Aport") $os = 'robot_aport';
$search = 'none';
// Выясняем принадлежность к поисковым системам
if(strpos($reff,"yandex")) $search = 'yandex';
if(strpos($reff,"rambler")) $search = 'rambler';
if(strpos($reff,"google")) $search = 'google';
if(strpos($reff,"aport")) $search = 'aport';
if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';

// Заносим всю собранную информацию в базу данных
$query_main = "INSERT INTO ip VALUES (
0,
'$ip',
NOW(),
$id_page,
'$browser',
'$os',
'$search')";
@mysql_query($query_main);
// Если имеется реферер, заносим информацию о нём в отдельную таблицу
if(!empty($reff) && $search != "own_site")
{
$query_reff = "INSERT INTO refferer VALUES (
0,
'$reff',
now(),
'$ip',
$id_page,
'$search')";
@mysql_query($query_reff);
}
}
}
?>

   
 
 автор: glsv (Дизайнер)   (18.12.2004 в 10:50)   письмо автору
 
   для: Сервер   (18.12.2004 в 09:56)
 

Ага, в этой версии прямо в код забито $_SERVER['PHP_SELF']
Тогда ее нужно заменить на вышеприведенную. Я 2 включения в коде нашел … но нужно cheopsa-а спросить. Нет ли там еще где подводных камней.

   
 
 автор: Сервер   (18.12.2004 в 11:43)
 
   для: glsv (Дизайнер)   (18.12.2004 в 10:50)
 

Все заменил.
Считает но опять не то, что надо :)

в таблице подсчета страниц сайта показывает только корень сайта,
"http://adler-reisen.com" то есть без названия страницы.

   
 
 автор: glsv (Дизайнер)   (18.12.2004 в 12:18)   письмо автору
 
   для: Сервер   (18.12.2004 в 11:43)
 

Вы на хосте тестируете?
Вам нужно подобрать переменную, которая будет показывать адрес текущей страницы shtml.

Попробуйте проверить вот эти переменные.

$_SERVER["REDIRECT_SCRIPT_FILENAME"]
$_SERVER["REDIRECT_REQUEST_URI"]
$_SERVER["REDIRECT_SCRIPT_NAME"]
$_SERVER["REDIRECT_DOCUMENT_URI"]
$_SERVER["REQUEST_URI"]


Или попробуйте сами найти.
Создате shtml-файл

<html>
<head>
</head>
<!--#include virtual="phpinfo.php" --> 
</html>

И в той же директории создайте подключаемый файл phpinfo.php, в котором будет:
<?php phpinfo(); ?>


Откройте в браузере созданный shtml-файл и найдите в фиолетовых таблицах переменную, где будет содержаться имя shtml-файла. Именно эта переменная и нужна.

   
 
 автор: Сервер   (18.12.2004 в 13:31)
 
   для: glsv (Дизайнер)   (18.12.2004 в 12:18)
 

ооооо!!!
Правильно сработало вот это:

$_SERVER["REQUEST_URI"]

Вы специально его последним в списке написали? :)))
Все работает правильно.
Спасибо, буду пользоваться.

И еще масенький вопросик.
Как-то можно исключить себя из списка подсчитываемых?

   
 
 автор: cheops   (18.12.2004 в 13:47)   письмо автору
 
   для: Сервер   (18.12.2004 в 13:31)
 

>И еще масенький вопросик.
>Как-то можно исключить себя из списка подсчитываемых?
Пожалуй если только IP-адрес статичный

   
 
 автор: Сервер   (18.12.2004 в 13:53)
 
   для: cheops   (18.12.2004 в 13:47)
 

Понятно.
нет так нет.

Провайдер меняет мой IP-адрес каждые сутки.
Спасибо

   
 
 автор: Seriy   (18.04.2005 в 14:23)   письмо автору
 
   для: Сервер   (18.12.2004 в 13:31)
 

>Установил сабж, настроил. Но при щелчке на странице статистика показывает >только увеличение счетчика страницы index.phtml и тестовой index.php, а >остальных страниц - нет
>
>ооооо!!!
>Правильно сработало вот это:
>
>$_SERVER[&quot;REQUEST_URI&quot;]
>
Извините за глупый вопрос, но я слабо разбираюсь в программировании.
Можно немного подробнее... куда именно прописывать
$_SERVER[&quot;REQUEST_URI&quot;]

У меня такая же бадья... все странички имеют вид index.php?page=firms и при заходе на страничку "Фирмы" считает не эту, а index.php

   
 
 автор: cheops   (18.04.2005 в 22:54)   письмо автору
 
   для: Seriy   (18.04.2005 в 14:23)
 

Везде где найдёте в системе $_SERVER['PHP_SELF'], его следует заменить на $_SERVER['REQUEST_URI'] - можно даже воспрользоваться автозаменой по файлам. Возьмите редактор в котором имеется возможность такой замены (тот же Блокнот) открывайте каждый файл и заменяйте.

   
 
 автор: Seriy   (19.04.2005 в 02:37)   письмо автору
 
   для: cheops   (18.04.2005 в 22:54)
 

Ура!!!! Работает!!
Большое спасибо! Очень доходчиво и понятно объяснили.

   
 
 автор: Симон   (19.12.2004 в 14:16)
 
   для: glsv (Дизайнер)   (16.12.2004 в 01:58)
 

Что удивительно, но и "чистые" PHP-файлы не обрабатываются корректно. У меня HTML-код вынесен в темплэйты .tpl При подключении счётчика в PHP-файл, он при описанном раскладе не заносится в статистику. Как с такими чудесами быть? Испробовал все переменные среды, результат тот же.

   
 
 автор: denvor   (20.12.2004 в 17:13)   письмо автору
 
   для: Симон   (19.12.2004 в 14:16)
 

Спасибо огромное! С shtml проблема решилась. Правда, чистые php (как у Симона) не считаются :(. В целом - классный скрипт, но раз уж такие проблемы есть, то может быть count.php организовать по другому? Я где-то видел, что вставляют в страницу JS а сам счетчик на php/ Может , это было бы универсальнее?

   
 
 автор: glsv (Дизайнер)   (20.12.2004 в 21:56)   письмо автору
 
   для: denvor   (20.12.2004 в 17:13)
 

>Я где-то видел, что вставляют в страницу JS а сам счетчик на php/ Может , это было бы универсальнее?

В том то и дело, что мы преднамеренно не стали использовать JavaScript в счетчике. JavaScript может сработать, может не сработать, может быть вовсе отключен. В этом плане чистый php-счетчик точнее.

   
 
 автор: Симон   (21.12.2004 в 04:05)
 
   для: Симон   (19.12.2004 в 14:16)
 

Нашёл причину или одну из причин невключения в счётчик PHP-файла - одинаковые имена глобальных переменных.
Пошёл искать книжку "Развитие фантазии - для чайников" :-)

   
 
 автор: glsv (Дизайнер)   (21.12.2004 в 08:54)   письмо автору
 
   для: Симон   (21.12.2004 в 04:05)
 

:)

   
 
 автор: denvor   (23.12.2004 в 00:04)   письмо автору
 
   для: Симон   (21.12.2004 в 04:05)
 

Симон, а подробнее можно? а то нет времени книжку искать :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования