Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: class.php  (Прочитано 62269 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Melifaro
Гость
« : 15-06-2004 15:49 » 

Народ, а нигде нет описания работы этого скрипта? Или этот же файл с комментариями. Очень охото узнать как он работает, но знаний не хватает пока
Записан
Melifaro
Гость
« Ответ #1 : 15-06-2004 16:00 » 

И что за фукция такая flush(), чо-то я мануале перевести толком не могу?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 15-06-2004 20:57 » 

http://www.php.net/manual/ru/function.flush.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 16-06-2004 07:24 » 

Описание работы самого скрипта отсутствует - но готовиться ...
Записан

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #4 : 16-06-2004 14:49 » 

RXL, я говорю что не могу перевести в мэнуале по пхп что эта функция делает, а ты мне ссылку на этот мэнуал даешь  Улыбаюсь .

Гром, отлично, а как скоро?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 16-06-2004 18:30 » 

Melifaro, если б я знал - все в время упирается, но имхо там должно быть все понятно, спрашивай конкретику.

А функция Флаш выводит на экран то, что уже сделано, т.е. проталкивает в сокет содержимое отработанное скриптом не дожидаясь его окончания.
Страница быстрее грузится Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #6 : 16-06-2004 20:02 » 

Вот оказывается все как просто с этим flush'ем. Достаточно было написать одну строчку, спасибо.  Отлично Я подробно еще не смотрел щас сессия идет, но скоро собираюсь посмотреть как этот скрипт работает, очень интересно.

Кстати, можешь прокомментировать следующую таблицу:

$t1="CREATE TABLE ".$prefix."articles (
  id bigint(20) NOT NULL auto_increment,
  id_topics int(11) NOT NULL default '0',
  authorname varchar(50) NOT NULL default '',
  authoremail varchar(75) NOT NULL default '',
  nameoftxt varchar(255) NOT NULL default '',
  descript text NOT NULL,
  text mediumblob NOT NULL,
  count_view bigint(20) NOT NULL default '0',
  KEY id (id),
  KEY view (count_view),
  KEY name (nameoftxt)
  ) TYPE=MyISAM COMMENT='Main table' AUTO_INCREMENT=0";

Особенно интересны ключи KEY:
KEY view (count_view),
KEY name (nameoftxt)

Я чо-то понять не могу какие ключи вообще к чему относяться.Помоги пожалуйста. :oops:  Отлично
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 17-06-2004 07:11 » 

Melifaro, это я что-то невнимательно читал. Я то считал, что ф-ия широкоизвестная (на многих языках есть) и подумал, что ты не знаешь где искать...

articles - статьи.
Цитата
Особенно интересны ключи KEY:
KEY view (count_view),
KEY name (nameoftxt)
count_view - счетчик просмотров. Проиндексирован, я так понимаю, с целью ускорения сортировки и выборки наиболее популярных статей.
nameoftxt - название (заголовок) статьи. Индексируется для поиска, но тут это бессмыслено - это поможет только при поиске начального текста заголовка. Может использоваться при сортировке, но, опять же, не эффективно. Я бы этот индекс убрал.
Есть и другие вопросы "зачем"...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #8 : 17-06-2004 08:25 » 

RXL, ответ точен. Но не понятно почему ты сказал, что индекс неэффективен для сортировки.
Есть три типа сортировки и ключи по наиболее частым параметрам - по ИД, колличеству просмотров и по названиям.
Т.е. есть прямой быстрый доступ по ключу....
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 17-06-2004 09:06 » 

Гром, я сомневаюсь, что для типа char(255) индекс будет пригоден для сортировки. Быстрее всего, оптимизатор mysql будет использовать сам столбец. Проверить это можно через explain.

Насчет "еще":
1) зачем использовать bigint в id и count_view? Не слишком ли оптимистично - 2^64 ? Достаточно int, или int unsigned - 4млрд таки.
2) KEY id (id) - для auto_increment нужен индекс unique или primary key (то же самое, но со специменем). По крайней мере, так сказано в мануале. key - неуникальный индекс.
3) для поля text лучше взять тип text, а не blob: учитывая, что содержимое текстовое, разница будет только в операциях сравнения - blob чуствителен к регистру символов. Поиск лучше делать без учета регистра. Конечно, если поиска по тексту статьи не предвидится, то это не имеет значения.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #10 : 17-06-2004 11:10 » 

RXL,
1. Сам не знаю - решил, что так будет лучше Улыбаюсь
2. А он и есть примари, иначе автоинкремент не ставился Улыбаюсь Я по крайней мере так ставил и делал...

3. Это я вообще не умею пока Жаль поиски Жаль


Что значит "будет исползовать са столбец"Не понял :?:
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 17-06-2004 12:04 » 

Гром, у меня совсем не primary:
Код:
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   |      | MUL | NULL    | auto_increment |
| id_topics   | int(11)      |      |     | 0       |                |
| authorname  | varchar(50)  |      |     |         |                |
| authoremail | varchar(750  |      |     |         |                |
| nameoftxt   | varchar(255) |      | MUL |         |                |
| descript    | text         |      |     |         |                |
| text        | mediumblob   |      |     |         |                |
| count_view  | bigint(20)   |      | MUL | 0       |                |
+-------------+--------------+------+-----+---------+----------------+

+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| Table     | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| _articles |          1 | id       |            1 | id          | A         |        NULL |     NULL | NULL   |         |
| _articles |          1 | view     |            1 | count_view  | A         |        NULL |     NULL | NULL   |         |
| _articles |          1 | name     |            1 | nameoftxt   | A         |        NULL |     NULL | NULL   |         |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
Таблицы создавала твоя программа.
У меня MySQL 3.23.49.
« Последнее редактирование: 28-11-2007 18:18 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 17-06-2004 12:19 » 

Протестировал и вот что пролучил: если в эту таблицу вставлять с id=0 (или вообще ео не указывать), то генерится последовательность, а если назначить id равным уже существующему номеру, то insert работает без ошибок и получаются две строки с одним id.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #13 : 18-06-2004 16:22 » 

Да, мне тоже показалось странным, что напротив id не поставленно PRIMARY KEY. И я вот еще чего не понял:

KEY id (id),
KEY view (count_view),
KEY name (nameoftxt)

Это что получается, что некоторые поля становяться ключами и этим клучам присваивается какое-то имя? Я не очень хорошо в базах разбираюсь.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 19-06-2004 14:03 » new

Melifaro, нет - имена ключей не зависят от имен столбцов. Просто, если, при создании ключа, не указать его имя, то MySQL назначает ключу имя первого столбца в ключе.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anonymous
Гость
« Ответ #15 : 19-06-2004 14:52 » 

RXL, Спасибо. Теперь понял вроде бы.
Записан
Melifaro
Гость
« Ответ #16 : 19-06-2004 14:54 » 

Это был я, не распознал меня форум почему-то  Улыбаюсь
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #17 : 20-06-2004 08:46 » 

Хм RXL, странно - я проверю.
А как объяснить что при автоинкременте дуликаты добавляются, странно, я попробую посмотреть какие у меня есть ключики, посмотреть почему уникальный id не отслеживается автоматом, хотя я именно так ставил создавал, после чего делал экспорт с таблицы, для программки инсталлятора.

Melifaro, как там дела???
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 20-06-2004 09:48 » 

Гром, автоинкремент, всего лишь, создает новый номер, который берется из описания таблицы (хранится отдельно и обновляется по максимальному значению при вставке и модификации). Контролем же, за дубляжем, занимается именно индекс. Если он не уникальный, то и контроля такого нет.

Замечания:
1) дублирование при auto_increment-е не происходит, а только при явной вставке значения.
2) при корректировании через ALTER TABLE table AUTO_INCREMENT=n работает автоматическая проверка: если n<=max(id), то устанавливается max(id)+1.

Т.е., если не будет явной вставки, то и боятся нечего. Но, коли столбец содержит уникальные значения, то и индекс должен быть соответствующий.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #19 : 20-06-2004 09:55 » 

Гром, да пока некогда серьезно разбираться с этим скриптом, завтра экзамен. Потом 25 экзамен. И начну с ним выяснять отношения  Отлично
Записан
Melifaro
Гость
« Ответ #20 : 20-06-2004 10:10 » 

Гром,

function site()
{
 global $prefix, $id, $onelistcount, $sort, $startpoint, $newarticle, $lastnews, $lastfiles, $filelistcount,
 $lastlinks, $linklistcount; -------Все вот эти глобалы, откуда они беруться? В том файле где идет вызов класса(include "php/class.php") или как?

 $this->art_id = @$id; // For articles    
 $this->art_topic_id = @$id;                
 $this->art_onelistcount = @$onelistcount;
 $this->art_sort = @$sort;                
 $this->art_startpoint = @$startpoint;
 $this->art_count=@$newarticle;
 $this->last_news = $lastnews;

 $this->file_id = @$id;
 $this->file_count = $lastfiles;
 $this->file_topic_id = @$id;
 $this->file_onelistcount=$filelistcount;
 $this->file_sort = @$sort;
 $this->file_startpoint = @$startpoint;

 $this->link_id = @$id;
 $this->link_count = $lastlinks;
 $this->link_topic_id = @$id;
 $this->link_onelistcount=$linklistcount;
 $this->link_sort = @$sort;
 $this->link_startpoint = @$startpoint;


Что вот это значит:
$this->regexp=&$re; // использование жестких ссылок - метод оптимизации - можно и без них
 $this->func_arr = &$b;



И вот эти две функции если не трудно: :oops:  :oops:  :oops:

function replace_template2($match) {
    return call_user_func(array(&$this,$this->func_arr[$match[0]]));
}

function replace_template($text) {
    return preg_replace_callback($this->regexp,array(&$this,'replace_template2'),$text);
    }
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 20-06-2004 10:39 » 

Melifaro, это замена шаблонов. Жаль поиск сглючил - была дисскусия на эту тему.

Код:
function replace_template2($match) {
  return call_user_func(array(&$this,$this->func_arr[$match[0]]));
  }

call_user_func() - штатная ф-ия php, позволяющая вызывать ф-ии по имени (текстовой строке). Конструкция array(ссылка на объект, имя ф-ии) нужна для обращения к методу класса (такое вот извращение).

Код:
function replace_template($text) {
  return preg_replace_callback($this->regexp,array(&$this,'replace_template2'),$text);
  }

См. в мануале ф-ию preg_replace_callback(). Она выполняет замену в тексте (3-ий аргумент) по pcre-шаблону (1-ый аргумент) на результат выполнения ф-ии (2-ой аргумент). Ф-ия выполняется на каждую замену.

Замена с использованием callback ф-ий позволяет заменять на динамические данные. Классическая замена делает статическую замену - одну строку на другую.
« Последнее редактирование: 28-11-2007 18:20 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 20-06-2004 10:44 » 

Вот и тема та самая: https://forum.shelek.ru/index.php/topic,2301.0.html
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #23 : 20-06-2004 10:51 » 

Мда, капец какой-то чо-то не совсем все понятно. Все равно спасибо, потом разберусь Улыбаюсь
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #24 : 20-06-2004 11:32 » 

RXL, Ок - я буду разбираться.
Melifaro, а оно тебе надо Не понял Добавляешь свой шаблон, рисуешь функцию замены и все Улыбаюсь

А насчет переменных, из коммандной строки беруться, когда формирую тип запроса идет вызов с параметрами, вот там они и берутся, когда они есть.
Записан

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #25 : 20-06-2004 12:14 » 

Про переменные понял, thanks. А на счет шаблонов и их замены: мне сначало надо хоть один раз посмотреть как это люди делают, а потом самому уже делать  Отлично . Я такого еще не использовал. Так что придется разбираться
Записан
Melifaro
Гость
« Ответ #26 : 20-06-2004 12:26 » 

Все кажись вьехал: до меня просто не доходило как это все в браузер выводиться - replace_template($str) везде написано, я давай этот метод смотреть - там нигде вывода в браузер нету, и только зас заметил, что везде после $repl= $site->replace_template($str);   идет echo $repl; Капец слепой  Улыбаюсь

А вот это так и не понял:
$this->regexp=&$re; // использование жестких ссылок - метод оптимизации - можно и без них
$this->func_arr = &$b;

Что это значит??? Как понимать символ & перед переменной?

Затем, что за массив такой mutch? Сами функции  call_user_func и preg_replace_callback я понял, спасибо RXL. Но переменные которые им передаются не полностью понятны

Допустим вот этот метод:
function replace_template2($match) {
    return call_user_func(array(&$this,$this->func_arr[$match[0]]));
}
Я так понимаю, что  у функции call_user_func здесь только один фактический параметр - массив. Короче не могу вот эту запись расшифровать  Улыбаюсь
array(&$this,$this->func_arr[$match[0]]) - чо это такое???

Помоги пожалуйста  Отлично  Отлично  Отлично
Записан
Melifaro
Гость
« Ответ #27 : 20-06-2004 12:37 » 

Сначало было сформировано рег выражение вида:
([!MAIN_TOPICS_MENU_LINE!]|[!MAIN_TOPICS_MENU_CAT!]|...|[!SHOW_STATS!]), затем переменной this->regexp присваивают это значение, но в чем фишка символа & Не понял?
Записан
Melifaro
Гость
« Ответ #28 : 20-06-2004 12:58 » 

Кажись понял: & - значит только значения массива (то есть не ключи, а значения), так чтоли?. С помощью этих двух функий (replace_template и replace_template2) происходит выборка какую функию нужно вызвать для того чтобы сделать выборку из базы и вся такая фигня, то есть как раз этот массив $b - его значения это и есть имена методов. Наконец-то дошло, вроде бы больше ничего обьянять пока не нужно.

Гром, ну ты замутил тут механизм  Отлично

Но все равно поясни строчку
array(&$this,$this->func_arr[$match[0]])
вдруг я ее неправильно проитерпретировал пожалуйста  Отлично
Записан
Melifaro
Гость
« Ответ #29 : 20-06-2004 13:24 » 

В таблице topics
$t7="CREATE TABLE ".$prefix."topics (
  id int(11) NOT NULL auto_increment,
  next int(11) NOT NULL default '0',
  prev int(11) NOT NULL default '0',
  name varchar(255) NOT NULL default '',
  descr varchar(255) NOT NULL default '',
  accessnum int(11) NOT NULL default '0',
  KEY id (id)
) TYPE=MyISAM AUTO_INCREMENT=0";

Для чего нужны поля next и prev, что они значат???
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines