Sitemap в robots.txt

Наверное много у кого есть такое, когда один код тиражируется на множество сайтов. И соответственно robots.txt тоже. Это вещь из разряда «сделал и забыл».

Уверен, многие помнят, что в этом файле нужно указывать ссылку на sitemap. Так вот, ссылка должна быть абсолютной и включать в себя адрес сайта. Так написано в спецификациях robots.txt. Можете написать и относительный URL, но не факт что он будет работать. А оно вам надо?

Читать далее

Kohana 3.0. Мысли о том как надо писать модели.

Для работы со штатным ORM нужно заводить модель для каждой таблицы. Всегда. Она может быть вообще пустой, но она должна быть. Ну, необязательно совсем пустой, там могут быть описания связей и всё такое.

Читать далее

Kohana ORM. Используем выражения

Я долго не мог понять, чего мне не хватает в штатном ORM от Kohana. А не хватало именно возможности использования выражений.

Бывало напишешь по-наивности какое-нибудь выражение прямо в where. Например, так:

where(‘concat(first_name,» «,last_name)’,»like»,»%$searchstring%»)…

А потом получаешь ошибку, что нет такого поля ‘concat(first_name,» «,last_name)’

И вот однажды я в недрах интернетов нашёл решение, которое конечно же решил положить в мою копилку шпаргалок. Всё дело в использовании функции DB::expr. Вот например так:

$searchresult=ORM::factory(«user»)->
where( DB::expr(‘concat(first_name,» «,last_name)’), «like»,»%$searchstring%»)->
order_by(«id»,»desc»)->
limit($data[‘per_page’])->
offset($data[‘offset’])->
find_all();

Воистину, ORM может всё, только нужно знать все его трещинки.

Bitnami LAMP сборка и проблема доступа к phpmyadmin


Про что это вообще?
==========================
Когда поднимаешь виртуальный сервер EC2 на Amazon Web Services (далее AWS) можно выбрать систему. Можно например выбрать какой-нибудь популярный дистрибутив Linux.

Но вот незадача — система устанавливается голая. Без MySQL, Apache и всего такого за что мы любим серверы Linux. И начинаешь устанавливать пакеты, разрешать зависимости, бороться с недоступными репозиториями…

Вот почему я люблю готовые сборки. Amazon позволяет выбрать из огромного количества сборок! В частности мне нравится сборка Bitnami LAMP stack. Разворачиваешь и получаешь готовый сервер!

Ну и в чём проблема?
==========================
Команда Bitnami настолько сурова, что не позволяет работать с phpmyadmin с наружи. Только с локалхоста!

For security reasons, this URL is only accesible using localhost (127.0.0.1) as the hostname

На самом деле проблема безопасности phpmyadmin понятна, недавно прокатилась целая волна уязвимостей. Но как они предлагают это сделать? Для этого надо подключиться по SSH к своему хосту, и поднять SSH туннель. Под Windows сгодится и Putty (правда у меня не получилось, но люди как-то делают).

Но что делать, если нет времени на обучение клиентов пользованию туннелями?

Выключаем эту безопасность
==========================
Всё просто. Ищем в файле /home/bitnami/apps/phpmyadmin/conf/httpd-app.conf строки

= 2.3>
Require local

И меняем на следующее

= 2.3>
#Require local Require all granted

Будет не так безопасно, зато быстро, дешево и сердито.

Kohana. Ускоряем ORM

Штатный ORM у Kohana практически на каждое шевеление создаёт запрос «SHOW CREATE TABLE blablabla«.

Я как-то не придавал этому значения раньше, но похоже этот запрос довольно ёмкий по времени, у меня он почему-то занимает до пол-секунды в плохую погоду (погода зависит от текущей загрузки хостинга). А если страница пестрит обращениями к БД, которые делаются через ORM, то ждите того, что треть запросов будет именно «SHOW CREATE TABLE«.

Как бы сделать так, чтобы ORM так не делал? Ведь структура таблиц работающего сайта практически не меняется годами!

Решение простое! Нужно немного переопределить метод list_columns класса ORM так, чтобы он кешировал структуру таблицы и дважды не бегать.

Для этого нужно в папке application/classes создать файл orm.php с примерно сдедующим содержанием:

_table_name .»structure»; if ($result = Kohana::cache($cache_key, NULL, $cache_lifetime)) { $_columns_data = $result; }
if( !isset($_columns_data)) { $_columns_data = $this->_db->list_columns($this->_table_name); Kohana::cache($cache_key, $_columns_data, $cache_lifetime); }
return $_columns_data; } }

Кстати это не я такой умный. Идею решения я нагуглил, хотя и немного переделал.

UPD: Понятно это нужно делать в конце, когда разработка завершена и структура БД уже не будет меняться

NB: HTTP-редирект 301 в Kohana

Я не буду говорить, как делать перенаправлениe с кодом 301 при помощи .haccess. Не буду рассказывать, как сделать это с помощью простого PHP. Всё это вы легко и в изобилии найдёте на просторах интернета. А вот как сделать это средствами Kohana?

Удивительно, но для перенаправления с кодом 301 стоит использовать ту же команду, что и при простом перенаправлении. Нужно просто указать код.
Kohana 3.0.9

Request::instance()->redirect(«some/thing»,301);

Или соответственно в Kohana 3.1.1

Request::$initial->redirect(‘some/thing’,301);

Если код перенаправления не указан — будет дан код 302.

Google Analytics в Kohana

Речь пойдёт не об установке счётчика GA на сайт. Тут и писать нечего. Гораздо более интересно наблюдать за статистикой из своего движка.

С одной стороны я видел такую фишку когда разбирал PyroCMS и ещё пару других CMS на CodeIgniter. С другой стороны как раз один заказчик попросил такую штуку к себе на сайт.

Читать далее

SSH Socs-proxy для параноиков

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

Всё хорошо, если вы в своей домашней защищённой сети, но ести вы где-то в общественном месте подключились к какой-нибудь неизвестной WiFi точке, Все ваши пароли могут быть украдены.

Решение проблемы — работа через SSH Socks-proxy

Сначала запускаете такую команду:

ssh -D localhost:8080 ваше_имя@адрес_удаленного_компьютера

После этого в сетевых настройках браузера выберите использование Socks-proxy, укажите порт и работайте через защищённый канал!

Диск переполнен. Как найти мусор?

Команда du позволяет вычислить использование диска каждой папкой

$ du —help Использование: du [КЛЮЧ]… [ФАЙЛ]… или: du [КЛЮЧ]… —files0-from=Ф Суммирует использование дискового пространства каждого ФАЙЛА, с каталогами. …

Если просто запустить её без параметров, то она начнёт рекурсивно выводить размеры всех папок начиная с текущей. Очень неудобно. Самым удобным мне показалось ограничить вывод на один уровень вложенности:

du -h —max-depth=1

Яндекс.Метрика