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

Форум PHP

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

 

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

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

тема: Время генерации скрипта.
 
 автор: Panker   (26.08.2006 в 13:10)   письмо автору
 
 

только плиз серьёзно и по пунктам, я просто делаю делаю скрипт и уже неделю целую настроения не падает, не хочу что бы по глупости настроение пропало :)

----
1 - как сделать что бы выводилось количество обращейни к базе, например я защёл на главную - внизу цифрами количество и так дале! надеюсь понятненько!

2 - я искал по поиску не нещёл, время генирации скрипта если мона дайте плиз!

3 - посомтрите эту тему http://softtime.ru/forum/read.php?id_forum=5&id_theme=23370&page=1

   
 
 автор: RV   (26.08.2006 в 13:25)   письмо автору
 
   для: Panker   (26.08.2006 в 13:10)
 

1.считать каждое обращение к базе, потом суммировать и выводить циферку. проще простого. надо лишь немного подумать.
2. запоминаешь метку в начале скрипта, запоминаешь метку в конце, вычитаешь и получаешь результат. еще проще простого.

   
 
 автор: cheops   (26.08.2006 в 15:57)   письмо автору
 
   для: Panker   (26.08.2006 в 13:10)
 

1 - Присоединяюсь к RV, тут только подсчёт в коде в ручную... специальных функций, облегчающих работу нет.
2 - можно поступить следующим образом
<?php
function gettime()
{  
  
$part_time explode(' ',microtime());  
  
$real_time $part_time[1].substr($part_time[0],1);  
  return 
$real_time;  
}  

$start_time gettime();
// ...
$stop_time gettime();                   
$time bcsub($stop_time,$start_time,4);  
printf('Время выполнения скрипта: '.$time); 
?>


PS Такие скрипты следует искать в ответах на задачи - там их достаточно много.

   
 
 автор: Axxil   (26.08.2006 в 17:30)   письмо автору
 
   для: Panker   (26.08.2006 в 13:10)
 

1. Вот здесь может пригодиться ещё один уровень абстракции.
Т.е. работу с базой вынести в отдельную библиотеку оформленную как класс. И обращаться к базе не через
mysql_query() а например через метод $db->query();
А за подсчёт запросов будет отвечать специальное свойство класса
например:
<?
  
class dbClass{
    function 
dbClass(){
      
$this->query_count 0;
    }
    function 
query($sql){
      
$this->query mysql_query($this->sql);
      
$this->query_count++; // Счётчик запросов. прибавляем запрос
    

// И например метод вытаскивающий строку   
    
function selectRow($sql){
      
$this->query($sql);
      return 
mysql_fetch_assoc($this->query);
    } 
    function 
query_count(){
      return 
$this->query_count;
    }
  }
?>

пример использования:
<?
  $db 
= new dbClass();
  
$sql 'select * from table where id=1';
  
$row $db->selectRow($sql);
  
// ....
  
$sql 'insert into table ... ';
  
$db->query($sql);
  
// ....
  // Подвал
  
echo "Запросов на странице: ".$db->query_count();
?>

   
 
 автор: cheops   (26.08.2006 в 22:58)   письмо автору
 
   для: Axxil   (26.08.2006 в 17:30)
 

Согласен, кстати, очень типичный удачный способ использования ООП в PHP. Здесь действительно использование ООП полезно и оправдано.

   
 
 автор: Panker   (27.08.2006 в 13:18)   письмо автору
 
   для: cheops   (26.08.2006 в 22:58)
 

в самом классе была ошибка там типа НЕ используемый аргумент на 13 строку, там было
// И например метод вытаскивающий строку
function selectRow($sql){
$this->query($sql);
return mysql_fetch_assoc($this->query); - 13 строка

я её убрал ошибки не было, обращений столько же, это как то повлияет на работу, и что она лишняя ? :D

и немного не понятно, этот класс считает сколько ввсего было обращейни при открытии страницы, или считает обращейний к определёной таблице!

   
 
 автор: Axxil   (27.08.2006 в 16:51)   письмо автору
 
   для: Panker   (27.08.2006 в 13:18)
 

Это заготовка класса, написанная на коленке за 2 минуты.
Разберём её по полочкам

<? 
  
class dbClass
    function 
dbClass(){ 
      
// Это у нас конструктор класса. Функция вызывается при инициализации класса. 
     // Т.е. во время выполнения инструкции $db = new $dbClass();
      
$this->query_count 0// Это счётчик запросов, начальные условия 0 
      
$this->''// Это свойство, где будет храниться результат запроса
    

    function 
query($sql){ 
      
// Универсальная функция осуществляющая запросы к БД.
      // Т.е. она вызывается каждый раз, когда идёт обращение к базе 
      
$this->mysql_query($this->sql); 
// Внутреней переменной query мы присваиваем результат запроса, 
//теперь он будет виден из любой функции класса.
      
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику
    
}  
// И например метод вытаскивающий строку    
    
function selectRow($sql){ 
      
// Делаем запрос к базе.
      
$this->query($sql); 
      
// Возвращаем первую строку результата
      
return mysql_fetch_assoc($this->q); 
    }  
    function 
query_count(){ 
      
// данный метод возвращает текущее значение счётчика запросов
      
return $this->query_count
    } 
  } 
?> 

Класс считает все обращения к базе, но с помощью регулярных выражений можно выделить обращения к определённым таблицам

   
 
 автор: Panker   (27.08.2006 в 16:56)   письмо автору
 
   для: Axxil   (27.08.2006 в 16:51)
 

хоть убей ошибка на

// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);

с чего бы это ? :(

   
 
 автор: Axxil   (27.08.2006 в 16:59)   письмо автору
 
   для: Panker   (27.08.2006 в 16:56)
 

Можно поглядеть как класс вызывется и текст ошибки?

   
 
 автор: Panker   (27.08.2006 в 16:59)   письмо автору
 
   для: Axxil   (27.08.2006 в 16:59)
 

в данный момент пробывал вот так
<?  
  
class dbClass{  
    function 
dbClass(){  
      
// Это у нас конструктор класса. Функция вызывается при инициализации класса.  
     // Т.е. во время выполнения инструкции $db = new $dbClass(); 
      
$this->query_count 0// Это счётчик запросов, начальные условия 0  
      
$this->''// Это свойство, где будет храниться результат запроса 
    
}  
    function 
query($sql){  
      
// Универсальная функция осуществляющая запросы к БД. 
      // Т.е. она вызывается каждый раз, когда идёт обращение к базе  
      
$this->mysql_query($this->sql);  
// Внутреней переменной query мы присваиваем результат запроса,  
//теперь он будет виден из любой функции класса. 
      
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику 
    
}   
// И например метод вытаскивающий строку     
    
function selectRow($sql){  
      
// Делаем запрос к базе. 
      
$this->query($sql);  
      
// Возвращаем первую строку результата 
      
return mysql_fetch_assoc($this->q);  
    }   
    function 
query_count(){  
      
// данный метод возвращает текущее значение счётчика запросов 
      
return $this->query_count;  
    }  
  }  
?> 
<? 
  $db 
= new dbClass(); 
  
$sql 'select * from table where id=1'
  
$row $db->selectRow($sql); 
  
// .... 
  
$sql 'insert into table ... '
  
$db->query($sql); 
  
// .... 
  // Подвал 
  
echo "Запросов на странице: ".$db->query_count(); 
?>


в прошлый раз делал инклуд класса и писал
<? 
  $db 
= new dbClass(); 
  
$sql 'select * from table where id=1'
  
$row $db->selectRow($sql); 
  
// .... 
  
$sql 'insert into table ... '
  
$db->query($sql); 
  
// .... 
  // Подвал 
  
echo "Запросов на странице: ".$db->query_count(); 
?>


оибка вот Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in y:\home\cms-ka\www\index.php on line 207

   
 
 автор: Axxil   (27.08.2006 в 17:43)   письмо автору
 
   для: Panker   (27.08.2006 в 16:59)
 

Весело :)
А тестируется скрипт на реальной базе? Вообще база есть? И есть ли в базе таблица table и есть ли в этой таблице поле id
все запросы показаны в тестовом виде. И использовать надо на реальной базе.

   
 
 автор: Panker   (27.08.2006 в 18:30)   письмо автору
 
   для: Axxil   (27.08.2006 в 17:43)
 

там есть вот эта таблица :)
$sql = 'select * from pages where pages_id=1';
но всё равно таже ошибка и даже так
$sql = 'select * from pages';
таже ))

   
 
 автор: Axxil   (27.08.2006 в 19:04)   письмо автору
 
   для: Panker   (27.08.2006 в 18:30)
 

Такс...
А база как подключается. Можно полностью страницу привести...
Т.е. где происходит вызов mysql_connect и mysql_select_db?

   
 
 автор: Panker   (27.08.2006 в 19:49)   письмо автору
 
   для: Axxil   (27.08.2006 в 19:04)
 




<?php    
Error_Reporting
(E_ALL & ~E_NOTICE);
require_once(
"include/mysql.php");   
$pages $_GET['id'];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                   Вывод общего текста на страницу                                                                                                       //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
function pef1($pages)
{    
if(!
preg_match("/[0-9]/i"$pages))

{ echo 
"ERROR ID"; }

else
{
$pagesth mysql_query("select * from pages where pages_id = $pages");     
if(
$pagesth)     
{     
  while(
$pagesuthor mysql_fetch_array($pagesth))     
  {   
  require_once(
"class/bb.php");  //Подключаем файл замены ББ кодов, а так же проверки  на запрещённые теги и символы.
  
echo "".$pagesuthor['pages_text']."";
  }     
}     
else     
{     
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";     
  exit();     
}
}
return;
}
  class 
dbClass{   
    function 
dbClass(){   
      
// Это у нас конструктор класса. Функция вызывается при инициализации класса.   
     // Т.е. во время выполнения инструкции $db = new $dbClass();  
      
$this->query_count 0// Это счётчик запросов, начальные условия 0   
      
$this->''// Это свойство, где будет храниться результат запроса  
    
}   
    function 
query($sql){   
      
// Универсальная функция осуществляющая запросы к БД.  
      // Т.е. она вызывается каждый раз, когда идёт обращение к базе   
      
$this->mysql_query($this->sql);   
// Внутреней переменной query мы присваиваем результат запроса,   
//теперь он будет виден из любой функции класса.  
      
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику  
    
}    
// И например метод вытаскивающий строку      
    
function selectRow($sql){   
      
// Делаем запрос к базе.  
      
$this->query($sql);   
      
// Возвращаем первую строку результата  
      
return mysql_fetch_assoc($this->q);   
    }    
    function 
query_count(){   
      
// данный метод возвращает текущее значение счётчика запросов  
      
return $this->query_count;   
    }   
  }   
 
  
$db = new dbClass();  
  
$sql 'select * from pages where pages_id=1';
  
$row $db->selectRow($sql);  
  
// ....  
  
$sql 'insert into table ... ';  
  
$db->query($sql);  
  
// ....  
  // Подвал  
  
echo "Запросов на странице: ".$db->query_count();  

require_once(
"templars/origenal/index.php"); //Подключаем шаблон!
?>



база не пустая, всё выводится всё работает н оошибка есь, и всегда число показывает 2, 2 обращения

   
 
 автор: Axxil   (27.08.2006 в 21:07)   письмо автору
 
   для: Panker   (27.08.2006 в 19:49)
 

Блин, старею похоже...
Эту строчку надо изменить:

$this->q = mysql_query($this->sql);  

на

$this->q = mysql_query($sql);  

А через класс у вас проходят всего два запроса, поэтому два и показывает.
Да и

$sql = 'insert into table ... ';

Абсолютно бессмысленный запрос. Зачем вы его оставили?

   
 
 автор: Panker   (27.08.2006 в 21:51)   письмо автору
 
   для: Axxil   (27.08.2006 в 21:07)
 


$sql = 'insert into table ... ';

а я и думал что там должно быть :)???''


и пару вопрсовов!

можно ли указывать базу так
  $sql = 'select * from pages';

почему если я даже указываю базу не pages которая тут задействовается а доустим guest которая на той старнице даже не задействуется всё равно показывается ОБРАЩЕЙНИЙ 2!!?

   
 
 автор: Axxil   (27.08.2006 в 22:11)   письмо автору
 
   для: Panker   (27.08.2006 в 21:51)
 

Раздели понятия база и таблица в базе.
pаges и quest это таблицы в базе
Вы когда выбираете базу в mysql_select_db то устанавливаете её текущей (если линки не используете).
И данный класс считает обращения к таблицам этой базы.

   
 
 автор: Panker   (27.08.2006 в 22:15)   письмо автору
 
   для: Axxil   (27.08.2006 в 22:11)
 

да запутался!
вот у меян есть БАЗА cms в ней море тамблиц в которых много сталбцов!

что считывает скрипт? обращейния ко всей баезе? к тамблице? или к 1 столбцу?

   
 
 автор: Axxil   (27.08.2006 в 23:15)   письмо автору
 
   для: Panker   (27.08.2006 в 22:15)
 

Класс считает кол-во обращений к базе cms на данной странице

   
 
 автор: Panker   (27.08.2006 в 23:44)   письмо автору
 
   для: Axxil   (27.08.2006 в 23:15)
 

простите за непонятки, но зачем тогда вот эта ? $sql = 'select * from pages'; указывать таблицу и так далее?

   
 
 автор: Axxil   (28.08.2006 в 00:18)   письмо автору
 
   для: Panker   (27.08.2006 в 23:44)
 

Потому что

select * from pages

Это запрос к базе данных на языке SQL
База понимает только такой язык, с этим уж ничего не поделаешь :)
И к пхп этот язык не имеет никакого отношения. PHP позволяет лишь обработать и вывести результат запроса.

   
 
 автор: Panker   (28.08.2006 в 10:21)   письмо автору
 
   для: Axxil   (28.08.2006 в 00:18)
 


    
Потому что     
select * from pages 


Это запрос к базе данных на языке SQL
База понимает только такой язык, с этим уж ничего не поделаешь :)
И к пхп этот язык не имеет никакого отношения. PHP позволяет лишь обработать и вывести результат запроса.


простите, если ОЧЕНЬ СИЛЬНО ступлю... но в базе что то создовать надо что бы нормально работало? ил нет ? ато я что то оч сильрно сомневаюсь :)

   
 
 автор: Axxil   (28.08.2006 в 11:14)   письмо автору
 
   для: Panker   (28.08.2006 в 10:21)
 

Если у вас уже есть база, то ничег специально создавать не надо.
В качестве примера приведу подключение класса к вашей функции pefl
Надеюсь понятнее станет.


<?
class dbClass{    
  function 
dbClass(){    
    
// Это у нас конструктор класса. Функция вызывается при инициализации класса.    
   // Т.е. во время выполнения инструкции $db = new $dbClass();   
    
$this->query_count 0// Это счётчик запросов, начальные условия 0    
    
$this->''// Это свойство, где будет храниться результат запроса   
  
}    
  function 
query($sql){    
    
// Универсальная функция осуществляющая запросы к БД.   
    // Т.е. она вызывается каждый раз, когда идёт обращение к базе    
    
$this->mysql_query($this->sql);    
// Внутреней переменной query мы присваиваем результат запроса,    
//теперь он будет виден из любой функции класса.   
    
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику   
  
}     
// И например метод вытаскивающий строку       
  
function selectRow($sql){    
    
// Делаем запрос к базе.   
    
$this->query($sql);    
    
// Возвращаем первую строку результата   
    
return mysql_fetch_assoc($this->q);    
  }
// Метод делающий полную выборку 
  
function select(){
    
$ret = array();
    
$this->query($sql);
    while(
$r mysql_fetch_assoc($this->q))
      
array_push($ret,$r);
    return 
$ret;  
  }       
  function 
query_count(){    
    
// данный метод возвращает текущее значение счётчика запросов   
    
return $this->query_count;    
  }    


function 
pef1($pages,$db
{     
if(!
preg_match("/[0-9]/i"$pages)) 

{ echo 
"ERROR ID"; } 

else 
{
$sql "select * from pages where pages_id = $pages";  
$data $db->select($sql);     
  foreach(
$data as $pagesuthor)      
  {    
    require_once(
"class/bb.php");  //Подключаем файл замены ББ кодов, а так же проверки  на запрещённые теги и символы. 
    
echo "".$pagesuthor['pages_text'].""
  }      

return; 
}
$db = new dbClass();
pefl($page,$db);
?>

   
 
 автор: Евгений Петров   (28.08.2006 в 02:27)   письмо автору
 
   для: cheops   (26.08.2006 в 22:58)
 

Согласен, кстати, очень типичный удачный способ использования ООП в PHP. Здесь действительно использование ООП полезно и оправдано.
Кстати ещё одно достоинство ООП в данном случае - это то что можно легко и быстро перенести всю систему с MySQL на скажем MSSQL. Для этого всего лишь нужно переписать класс базы данных....

   
Rambler's Top100
вверх

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