Страницы

Поиск по вопросам

Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

среда, 15 апреля 2020 г.

Оптимизация php и mysql

#php #оптимизация #mysql

                    
И опять вопросы по работе с mysql и php:
1) Есть два запроса:
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id']);
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id'].'limit
0, 1');

Первичный ключ - id. Имеет ли смысл писать limit 0, 1 в конце запроса или это не
ускорит запрос?
2) В случае уже полученных данных:
$ar = array();
$res = mysql_query('select * from `table` where `id`<30');
while($ar = mysql_fetch_assoc($res)){}

Что лучше использовать: mysql_num_rows($res) или sizeof($ar) ?
3) Зачем нужен mysql_fetch_array, если есть mysql_fetch_assoc и mysql_fetch_row?
По идее, эти две функции по отдельности работают быстрее?
4) При организации, допустим, блогов, разумно ли вынести посты блогов в отдельные
файлы, а комментарии оставить в БД? Просто тогда получается, что при выводе последних
блогов одновременно будет вестись работа как с БД, так и с файлами, что мне не нравится.
Тем более, что анонс все равно придется писать в БД.
5) Определение глобальных переменных в функции - довольно медленная вещь. Можно ли
ускорить работу функции, загнав ссылки на нужные переменные в массив и определив в
функции глобальным только новый массив? То есть, было:
function f() {
    global $ar1, $ar2, $ar3;
}

Стало:
$all = array('ar1' => &$ar1, 'ar2' => &$ar2, 'ar3' => &$ar3);
function f() {
    global $all;
    $ar1 = $all['ar1'];
}

Если целесообразность некоторых вопросов у вас вызвала недоумение, считайте, что
я любитель экономить на спичках.    


Ответы

Ответ 1



1) Имеет смысл сделать так: mysql_query('select * from `table` where `id`='.$_SESSION['id'].' limit 0,1'); Только исключите в запросах *, тогда будет экономия уже не на спичках :) 2) Согласен с @mozzart 3) mysql_fetch_array работает быстрее, чем assoc, т.к. добавляет только индексы в массив. 4) Согласен с @mozzart 5) Скорее вот так быстрее: function (&$ar1, &$ar2, &$ar3) { ... } Пример: class Api { private $db; public function test() { // Этой функции Вы собирались передать get и post $this->db; // объект бд } } или так: class Api extends DB { public function test() { $this->query(); } } class DB { public function query() { ... } }

Ответ 2



1) Смысл есть 2) Если нужно просто получить количество записей, то логичнее и оптимизированней использовать mysql_num_rows, если все записи получены в массив, то тогда конечно - sizeof 3) Не проверял... 4) Если хранение файлов подразумевает организацию кэширование, то тогда да. Грубо говоря, работа с файлами происходит намного быстрее чем с БД 5) Первый вариант быстрее

Регулярное выражение для получения содержимого между тегами tr

#php #регулярные_выражения

                    
Здраствуйте, подскажите регулярное выражение для получения содержимого между тегами
tr /tr, с помощью preg_match_all, между ними могут встречаться все символы, кроме вышеуказаных
тегов, символов неопределенное количество (от 1 до бесконечности).
И если это возможно, то и в случае если между ними могут быть размещены таблицы (т.е.
могут существовать теги tr /tr).    


Ответы

Ответ 1



PHP, регулярные выражения. Извлечение строк между тегами.

Ответ 2



Честно говоря, не силён в этом, но мне кажется как-то так... if (preg_match('|(.*)|sei', $str, $arr)) $tr = $arr[1]; else $tr='';

Параметрическое нахождение ближайшей точки в заданном направлении

#алгоритм #php #mysql

                    
Есть массив точек со случайными координатами.
Выбираем любую из них.
Задача: найти ближайшую к ней точку в заданном направлении.
Например, если речь идет о плоской карте, и надо найти ближайшую точку на востоке,
мы фильтруем угол между северовостоком и юговостоком и ищем точку в нем, тупо сравнивая
расстояния. Для трехмерного пространства все еще хуже. Особенно, если попытаться ввести
систему ранжирования: если есть две точки, одна из них точно на восток, но на X дальше,
а другая - на восток-северовосток под углом a, но чуть ближе, то будет выбрана та,
для которой соблюдается определенное отношение X и a.

Вопрос: 


как поступают умные люди в данной ситуации?

это задача для базы(MYSQL) или PHP?


Код писать не надо: как-нибудь справлюсь. Нужен алгоритм или волшебный пендель.    


Ответы

Ответ 1



SQL: select TOP 1 id from ( select id, my_range_fn( dir_x, dir_y, dir_z, x0, y0, z0, x, y, z ) as range from Points p ) where range < 0 order by range desc Пример ранжирующей функции ( JS ): //2D карта на JS //Север - 2, Запад - 4, Юг - 6, Восток - 0 //Рассматриваем попадание в угол в +- 45 градусов от направления function my_range_fn( dir, x0, y0, x, y ){ var dy = y - y0, dx = x - x0, rast = Math.sqrt( dx * dx + dy * dy ), my_dir = Math.PI * ( ( dy > 0 ) ? 1 : 0 ) - Math.acos( dx / rast ), my_dir = ( my_dir < 0 ) ? Math.PI * 2 + my_dir : my_dir, dir = Math.PI * dir / 4; delta = Math.abs( my_dir - dir ); return ( ( delta < Math.PI/4 ) ? -1 : 1 ) * rast - 2 *delta; } Используется коэф. 2 на разность желаемого направления и полученного Примерно означает что при (x0, y0) = (0, 0) и направлении Сервер, выберет (0,5) вместо (2,4)

Ответ 2



Можно и с помощью MySQL. Если рассматривать вариант плоской сетки координат с точкой отсчета в центре, то северо-восток - это верхний правый квадрат. То-есть ограничения в запросе по х > 0 и у < 0 с учетом точки отсчета. Расчет расстояния по теореме Пифагора. Убывающая сортировка по расстоянию. Лимит 1 на вывод. На выходе ближайшая точка в заданном квадрате.

Ответ 3



Для начала выберем систему координат с центром в первой точке Особенность задачи - в наличии ограничений на угол (|fi|<45), что наталкивает на мысли о полярной системе координат и уравнениях вида r=R(cos(fi)-cos(pi/4)). При этом в качестве критерия оптимальности напрашивается параметр уравнения R = r/(cos(fi)-sqrt(2)/2) = r^2/(x-r*sqrt(2)/2) с размерностью расстояния. И тогда останется главное - правильно учесть ограничения.

Достать дату и время из строки с определённым префиксом

#php #регулярные_выражения

                    
есть код страницы в ней есть строчка You have access until: 2011-11-27 18:28:45
мне нужно достать дату и время. используя preg_match    


Ответы

Ответ 1



Ну, и в чем сложности ? берем данную строку, You have access until: 2011-11-27 18:28:45 You have access until: - эта часть строки скорее всего меняться не будет, так что скорее всего хватит обычного echo substr("You have access until: 2011-11-27 18:28:45", strlen("You have access until: ")); но если вам уж так хочется применить preg_match - то: нам нужно сделать маску для даты и времени в заданном формате. Итак: \d - цифра {x} - количество символов которые подходят под маску заданую предыдущими символами. Например: \d{4} - это маска задаёт 4 любых числа. итого у нас выходит чтото типа: if (preg_match("~You have access until: (\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})~", "You have access until: 2011-11-27 18:28:45", $m)) { print_r($m); } Но на самом деле нам бы хватило \d+ в даном случае.

1С-Битрикс: сайт на поддомене

#домен #php #битрикс

                    
Доброго дня. Как всегда, есть проблема.
У сайта site.ru есть поддомен lk.site.ru. Физически они раположены в папках /www/site.ru/
и /www/lk.site.ru/. На site.ru стоит старенький 1С-Битрикс: Управление сайтом 9.0.2,
а на lk.site.ru нет вообще ничего. Каким образом можно заставить оба сайта работать
c одной админкой?
Заранее спасибо.
Добавлено
Воспользовался указаниями http://dev.1c-bitrix.ru/community/blogs/howto/336.php:
создал симлинки, скопировал access и index, прописал в админке хосты и папки, однако
CMainPage::GetSiteByHost(); на lk.site.ru показывает id сайта site.ru. Что, в общем-то,
логично: ибо поддомен. Как побороть эту проблему?    


Ответы

Ответ 1



Вот тут - многосайтовость на пальцах - про это подробно расписано. Только я не совсем понял, будет ли это работать с поддоменами. Посмотрите, может поможет.

Kohana 3.2 модуль auth orm

#php #kohana

                    
Не так работает модуль. При авторизации со значением $remember = TRUE, должен отправлять
куки на 2 недели с токеном, а токен записывать в базу. А он отправляет куки до закрытия
браузера(не чего не записывая в бд) и при Auth::instance()->logout($destroy = TRUE)
не удаляет куки, хотя должен.
Вот, что в контроллере
 $login = Arr::get($_POST, 'login', '');
        $password = Arr::get($_POST, 'password', '');
        $remember = $_POST['remember'];

        $auth->login($login,$password, $remember);

Вот конфиг auth.php
return array(

'driver'       => 'ORM',
'hash_method'  => 'sha256',
'hash_key'     => '2, 4, 6, 7, 9, 15, 20, 23, 25, 30',
'lifetime'     => 1209600,
'session_type' => Session::$default,
'session_key'  => 'auth_user',
    


Ответы

Ответ 1



Решил проблему, только таким способом: $auth->login($login,$password, TRUE); По другому не как не получается, при приеме $remember

Ответ 2



$status = Auth::instance()->login($data['username'], $data['password'], isset($_POST['remember']) ? true: false); Если в $_POST['remember'] передается значение из чекбокса.

Ответ 3



Здравствуйте. При проверке вардампом выдаёт 1 или NULL. Поэтому поставил условие перед логином. $data = Arr::extract($_POST, array('username', 'password', 'remember')); //var_dump($data['remember']); //выдаёт 1 или NULL //die(); // Поэтому поставил условие перед логином. if($data['remember'] == 1) { $flag = TRUE; } else { $flag = FALSE; } $status = Auth::instance()->login($data['username'], $data['password'], $flag);

Динамическая вставка видео по ссылке

#php #youtube

                    
Хочу реализовать такую функцию на сайте: пользователь вставляет в поле ссылку на
YouTube-видео и отправляет форму. Необходимо из ссылки получить код видео и вставить
на сайт. Частенько вижу такую функцию на разных сайтах.

Если есть предложения, ссылки и т.д. — был бы признателен. Спасибо.
    


Ответы

Ответ 1



Видео YouTube характеризуется 11-значным цифробуквенным кодом (xxxxxxxxxxx). Поэтому нужно следующее. Получить код (или ссылку с кодом, а потом вырезать код из ссылки регулярным выражением) Вставить на страницу объект, содержащий ссылку на код

Парсинг выдачи яндекса

#php

                    
У меня имеется некоторое количество сайтов, за которыми постоянно нужно следить.
(Кол-во проиндексированных страниц и ТИЦ).
Пытался написать с помощью CURL - Яндекс говорит, что запросы автоматические, естественно.
Какие у вас есть идеи реализации скрипта?
Заранее благодарен.    


Ответы

Ответ 1



Есть готовое решение, но показать смогу только в понедельник. Есть алгоритм: Сокетом(ну или cURL-ом) стучимся в Яндекс - он дает 301 на капчу Получаем капчу, показываем юзверю Юзверь заполняет - данные капчи уходят в Яндекс (с ай-пи проверяющего скрипта) Тут надо поймать куки, передаваемые Яшей и записать их (в файл либо в БД) Обращаемся к поиску с записанными куки парсим ответ Если яндекс снова дал капчу - повторить. ... PROFIT! Еще можно быть честным ботом и парсить xml выдачу. Но она не хило отличается от реальной. Это про позиции и количество страниц в индексе. Про ТИЦ не вспомню сейчас. Модифицировал существующий код. UPD: Совсем забыл. Вот метод для проверки ТиЦ: public function tic($url) { $content = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://'. $url); preg_match('##', $content, $matches ); $parse = intval($matches[1]); if (isset($parse)){ $this->response['html'] = $parse; } } Вырвал с мясом. Если необходимо - поясню, но тут вроде бы и так все понятно. Вообще могу подогнать исходники класса-проверялки. Проверяет: Яндекс ТИЦ: Google PR: Страницы в индексе Яндекс Страницы в индексе Google Страницы в индексе Yahoo Ссылки на сайт в Яндекс Ссылки на сайт в Яндекс.Блоги Ссылки на сайт в Google Ссылки на сайт в Yahoo Яндекс каталог mail.ru каталог dmoz каталог Rambler каталог Aport каталог Рамблер счетчик на сайте Mail.ru счетчик на сайте spylog счетчик на сайте hotlog счетчик на сайте liveinternet счетчик на сайте Яндекс Метрика счетчик на сайте google analytics счетчик на сайте Но индексы Яндекса - из XML выдачи.

понедельник, 13 апреля 2020 г.

Конвертируем html в изображение.

#php

                    
Прошу вашей помощи в поиске php библиотеки для конвертирование html + css в изображение
pgn,jpg,gif.    


Ответы

Ответ 1



Вот пример конвертации Html => PDF => PNG / JPEG $html_content = '

Hello World

'; $html2pdf = new HTML2PDF('P', 'A4'); $html2pdf->writeHTML($html_content); $file = $html2pdf->Output('temp.pdf','F'); $im = new imagick('temp.pdf'); $im->setImageFormat( "jpg" ); $img_name = time().'.jpg'; $im->setSize(800,600); $im->writeImage($img_name); $im->clear(); $im->destroy(); По началу не забудьте подключить библиотеку HTML2PDF или mPDF

Русский язык в запросах PDO PHP

#pdo #php

                    
Здравствуйте!
Как можно "включить" поддержку русского языка при выборке данных из таблицы базы данных?
Пробовал :
 ...
 $ps = $db->prepare("SET NAMES utf-8");
 $ps->execute();
 ...

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


Ответы

Ответ 1



"mysql:host=**;dbname=**;charset=utf8" Будет работать с php > 5.3.6 Всё же есть в документации

Как вывести информацию о нагрузке сервера?

#php #оптимизация

                    
Здравствуйте, у меня два вопроса. 

Вопрос первый - вот "гулял" по интернету и увидел следующие. На одном сайте в низу
его страницы была информации как загрузка сайта грузит систему. Там было написано процент
и оперативную память какую он берет на себя (там было около 22 мб). К сожалению, ссылку
куда-то дел и не могу найти куда. Суть вопроса, есть ли такие функции в php, которые
показывает нагрузку, или они через microtime() сделали условие, при котором будет от
1-100% показываться? 
Второй вопрос: видел, что только в классах объявляют переменную (БЕЗ УКАЗАНИЕ ТИПА),
нельзя ли как-то сделать так, чтобы указывать тип изначально, как на языке С++...
    


Ответы

Ответ 1



1.1. Средняя загрузка процессора. В комментариях вроде есть аналог для серверов на WIN. 1.2. Пик выделенной памяти под ПШП, работает только в *никс. 2. PHP не типизированный язык, задавать типы в нем нельзя.

Серверная обработка изменений Store ExtJS

#javascript #extjs #php

                    
Здравствуйте!
Разбираюсь с ExtJS, с переменным успехом... 
Ни как не могу принять на сервере данные отправляемые Store при изменении записей
(добавлении, изменении или удалении). Пишет что данные уходят POST-ом, но на сервере
ни $_POST, ни $_GET, ни $_REQUEST отправленные данные не показывает - как будто ничего
не отправлялось (ну кроме случайного значение в $_GET - _dc=1357565039902).

Вот что уходит на сервер (взял из консоли Хрома), соответственно, при удалении, обновлении
и добавлении:

Request URL:http://localhost/service/destroy/news.php?_dc=1357565811429
Request Method:POST
Status Code:200 OK
Query String Parameters:
  _dc:1357565811429
Request Payload:
  {"items":{"id":5}}

Request URL:http://localhost/service/update/news.php?_dc=1357566047052
Request Method:POST
Status Code:200 OK
Query String Parameters:
  _dc:1357566047052
Request Payload:
  {"items":{"datepubl":"2012-12-01T00:00:00","title":"the Update Plan","alias":"the-update-plan","new":"

small text new

","newfull":"

full text new

","id":4}} Request URL:http://localhost/service/create/news.php?_dc=1357566179903 Request Method:POST Status Code:200 OK Query String Parameters: _dc:1357566179903 Request Payload: {"items":{"id":0,"datepubl":null,"dateclose":null,"title":"the NEW new","alias":"the-new-new","new":"text the NEW new","newfull":""}} Посылает эти запросы следующий Store: var storeNews = Ext.create('Ext.data.Store', { autoLoad: true, autoSync: true, idProperty: 'id', remoteFilter: true, fields: [ { name: 'id', type: 'int' }, { name: 'datepubl', type: 'date' }, { name: 'dateclose', type: 'date' }, { name: 'title', type: 'string' }, { name: 'alias', type: 'string' }, { name: 'new', type: 'string' }, { name: 'newtext', type: 'string' } ], proxy: { type: 'ajax', api: { read: 'service/view/news.php', create: 'service/create/news.php', update: 'service/update/news.php', destroy: 'service/destroy/news.php' }, reader: { type: 'json', successProperty: 'success', root: 'data', messageProperty: 'message' }, writer: { type: 'json', writeAllFields: false, root: 'data' }, listeners: { exception: function(proxy, response, operation){ Ext.MessageBox.show({ title: 'REMOTE EXCEPTION', msg: operation.getError(), icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); } } } }); Подскажите, пожалуйста, как принять переданные данные на сервера ? Или как их правильно отправить, если я делаю это не верно ?..


Ответы

Ответ 1



Все проще чем кажется: $data = json_decode(file_get_contents('php://input')); Store хочет в ответе получить готовый вид этой записи. Только тогда он будет уверен, что эта строка таблицы существует на самом деле, а не является какой то "вымышленной". У каждой записи в store есть свойство phantom. Оно означает, существует ли запись реально, или она временно появилась в store. По добавлению store будет отсылать все фантомные записи. Когда store получит в ответе данные записи, он поймет, что сервер её обработал или сохранил, и присвоит значение phantom = false, то есть запись реальная. print( json_encode( $data ) ); Если выполняется добавление записи, то ей должен быть присвоен ID, если такой имеет место быть.

Разделить тысячные на php [дубликат]

#php

                            
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            Как разбить число на разряды (тысячи, миллионы и т.д.)?
                                
                                    (6 ответов)
                                
                        
                Закрыт 2 года назад.
            
        

Есть задача сделать из 1000 вот это 1 000 или например будет не 1000, а 10000 то
надо так же сделать 10 000. Как на php это реализовать?    


Ответы

Ответ 1



Для форматирования с разделителями используйте number_format()

Ответ 2



Вариант с опережающей и ретроспективной проверкой echo preg_replace('~(?<=\d)(?=(\d{3})+$)~', ' ', '10000');

Ответ 3



Лол: strrev( implode( ' ', str_split( strrev( $value ), 3 ) ) );

Вывод blob-файла в браузер

#php

                    
Как вывести изображение blob из БД в браузер? Headers нельзя передать,поскольку до
этого уже естественно была передана html-разметка. Додумался так : 



handler.php отправит нужные  заголовки. Но как передать этому файлу саму картинку
$data['image']. ??? Возможно эта реализация изначально неправильная. 
Кто-нибудь что-нибудь подскажет по этому поводу?
update, @klopp, по-поводу если будет несколько картинок - в этой же таблице есть
поле с html-кодом всей новости, там и img, и  все остальное, а вопрос был по поводу
едпинственной картинки, которая должна быть превьюшкой в  каждой новости.    


Ответы

Ответ 1



Заранее скажу, что не считаю хорошей идеей хранить данные в blob в mysql. Однако, отвечаю именно на Ваш вопрос. Можно сделать с помощью nginx так, чтобы можно было обращаться к файлу как /img/filename.ext. Локейшн в nginx #переадресует обращения, например, с /img/land.png на handler.php?name=land.png location ~* ^/img/(.*)$ { try_files $uri /handler.php?name=$1; } Допустим, есть таблица, где храниться имя файла, тип контента, и сам контент в blob_data +----+--------------+----------+-----------+ | id | content_type | name | blob_data | +----+--------------+----------+-----------+ | 1 | image/png | land.png | 21K | | 2 | image/png | sky.png | 21K | +----+--------------+----------+-----------+ файл handler.php if (!isset($_GET['name'])) notFound(); $conn = new PDO("mysql:host=mysql;dbname=test;", 'admin', 'admin'); $q = $conn->prepare('SELECT content_type, blob_data FROM test WHERE name=? LIMIT 1'); $q->execute([$_GET['name']]); $q->bindColumn(1, $content_type, PDO::PARAM_STR, 256); $q->bindColumn(2, $blob_data, PDO::PARAM_LOB); $q->fetch(PDO::FETCH_BOUND); if (empty($content_type)) notFound(); header("Content-Type: $content_type"); echo $blob_data;

Алгоритм нахождения разницы двух текстов

#php

                    
По сути, нужен некоторый функционал системы контроля версий.
Работа ведется с текстовыми данными (от 1000 символов до нескольких Мб текста), один
текст могут править несколько пользователей. Каждый раз при сохранении изменений, необходимо
производить сравнение нового текста с предыдущей версией текста и помечать, что было
удалено, что добавлено (достаточно сравнения по целым словам).
Подскажите в какую сторону копать, возможно есть готовые решения, которые можно встроить
в сайт на PHP?

Upd: Нашел вот такое решение. Буду строить свой сервис на нем.    


Ответы

Ответ 1



google-diff-match-patch а это порт на php: https://github.com/yetanotherape/diff-match-patch

Оператор сравнения NOT IN

#php #mysql

                    
Допутим я хочу вывести новости из БД но не учитывая определенных пользователей. Пример:
SELECT news FROM posts WHERE id NOT IN (4,6,7...6000);

Вот в чем заключается вопрос, какова максимальная длинна выражения в скобках?
и как это будет сказываться на производительности БД?
P.S. пример выдуманный, и новости нужных пользователей я знаю как по другому вывести,
мне нужно понять все насчет оператора     


Ответы

Ответ 1



Длина выражения в скобках не имеет значения. Имеет значение длина запроса в целом. Длина запроса задается настройкой max_allowed_packet в конфиге.

Не работает Инсерт в БД?

#php #mysql

                    
вот такой простой код! и он не работает..


тип поля в БД "name" varchar(225)
на первый взгляд все верно но скрипт выдает "noo" как индикацию отсутствия результата
не могу разобраться что не так( имя таблицы прописанно верно соединение с БД есть..    


Ответы

Ответ 1



Ошибка у вас в слове VALUES: $result3 = mysql_query("INSERT INTO `coalition` (`name`) VALUES ('$name')");

Ответ 2



Все было просто, у меня в таблице не стояли значения по умолчанию - а оказывается нельзя создавать ноую строку в БД когда значения остаются пустыми" а я в запросе некоторые значения не указывал)

Квадратные thumbnails из не квадратных изображений?

#javascript #изображения #thumbnails #php #css

                    
Уважаемое сообщество, подскажите пожалуйста куда копать? Проблема заключается вот в чем:
Есть фотографии из соц сетей (вконтакте, инстаграм например). Изображения вытаскиваются
из api, и обычно в ответе от api присутствует thumbnail фотографии (src_small к примеру).
В случае с инстаграмом всё отлично - там по дефолту квадратные изображения. В случае
с остальными соц сетями - изображения там какие попадутся. 
Так вот в чем вопрос: возможно ли средствами css отображать только квадратную область
изображения ? Просто обрезать на сервере - довольно трудозатратная операция, если фотографии
будут грузиться пачками по 20 (например). И если будет много пользователей делать это
одновременно, страшно подумать что случится с моим дешевым хостингом (а пока вообще
бесплатным) :)    


Ответы

Ответ 1



Осмелюсь как вариант предложить такой индусский код: http://jsfiddle.net/ptEy8/ Но очень хотелось бы увидеть ещё варианты! Хороший вопрос.

Kohana framework карта маршрутизации

#php #kohana

                    
Есть ли в kohana framework карта маршрутизации?
в которой прописываются пути сайта как в yii    


Ответы

Ответ 1



Есть роутинг - Routing Kohana provides a very powerful routing system. In essence, routes provide an interface between the urls and your controllers and actions. With the correct routes you could make almost any url scheme correspond to almost any arrangement of controllers, and you could change one without impacting the other.

Ответ 2



Пути сайта формируются из условий указанных вами. Если Вам нужно просмотреть "все готовые пути" т.е. www.google.ru/category/1234, www.google.ru/category/845 , www.google.ru/category/podcategory/98 Используйте котовый модуль sitemap. Условия могу указываться как application/bootstrap.php (рекомендуется указывать тут лишь основные принципы для приложения). Так же условия для формирования ссылок могу располагаться в самих модулях проекта: modules//init.php Route::set('<название для обращения>', '<условия>', <параметры>) ->defaults(array( 'controller' => '<контролер>', 'action' => '<экшен>', )); О том как собираются ссылки.

Устранение излишних запросов на сайте

#php #оптимизация #mysql

                    
Приветствую
if(!isset($_SESSION['zapros'])){
    //тут у нас запрос к базе, который возвращает массив $massiv;
    $_SESSION['zapros'] = $massiv;
}

Знаю, так делать неправильно, совать в сессию все запросы. Но в силу того, что 'мне
хватает' - использую. Вопрос прост, как на сайте организовать уменьшение запросов от
одного пользователя? Мой способ, из эры динозавров - сунуть в сессию. Но правильно
ли это? Есть модная штука memcache, но никто не объяснит чем оно лучше той же сессии..
вот допустим у сессии лимит 128мб на всех пользователей (зависит от хостинга), а у
мем кэша есть недостатки?
Поможете разобраться?
p.s. да, знаю можно вообще заранее подготовленные данные из файла читать. меня интересует
чисто кэширование запросов    


Ответы

Ответ 1



Memcache >>>>>>>>>>>>> сессия. Как можно догадаться, мемкэш держит все в памяти, а сессия сохраняется на диск - скорости будут просто несопоставимы. Тем более, не будете же вы для каждого пользователя писать список десяти последних новостей, например? Ну и первое, что вас должно было смутить: сессия - это штука, созданная исключительно для работы с пользователем. По-хорошему кэширование должно быть встроено уже на уровне дб или модели, когда опциональным аргументом метода указывается, что запрос может быть закеширован.

Ответ 2



По-умолчанию MySQL умело кеширует на своей стороне запросы, если скорость с сервером MySQL высокая, то этого обычно достаточно. Если же нужно кешировать на стороне PHP, то лучше всего использовать хорошие ORM к примеру Doctrine.