Пагинация

Комментарии ()

Пагинация, это такая штука, которая позволяет разбить некие данные, которые выводяться на страничке, на несколько страниц

Пример использования пагинации

$pagination = new Pagination();
$pagination->setPage(@$_GET['page']); // передаем номер выбраной страницы
$pagination->setRowsCount(200); // передаем количество елементов
$pages = $pagination->getHtml();
$tpl->setVariable('pages', $pages);

Также, можно задать дополнительные параметры

$pagination->setPageRowsCount(10); // задаем количество елементов на одной странице
$pagination->setWidth(3); // количество страниц по  левую и 
правую сторону относительно активной страницы в панели выбора страниц

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

$pagination->setRowsCount( { тут количество елементов } ) 

Пример взаимодействия объекта Sql с пагинатором

$pagination = new Pagination();
$pagination->setPage(@$_GET['page']);

$query = "SELECT * FROM articles WHERE `visible`=1";
$res = $sql->select(array('sql' => $query, 'pagination' => &$pagination));

$pages = $pagination->getHtml();
$tpl->setVariable('pages', $pages);

В даном примере объекту Sql передается по ссылке объект пагинатора, который получает общее количество найденых записей и формирует LIMIT для sql-запроса. В даном случае sql-запрос выполняется два раза. Первый раз с целью получения общего количества записей, второй раз с LIMIT'ом


Читать далее

Мультиязычность

Комментарии ()

Инструменты для работа с мультиязычностю собраны в классе Lang. Понятие мультиязычности рассматривается в двух плоскостях:  текстовые елементы шаблона  и контекст веб-сайта.

Текстовые елементы шаблона 

Таблица dictionary является своего рода словарем, где некоторому оригинальному alias'у соотвествуют слова на разных языках word_* (* - алиас языка, например en,ru,ua и т.д.). Тоесть, для английского, руского и украинского, таблица будет иметь три поля: word_en,word_ru,word_ua.

Все страницы сайта формируются шаблонизатором, который парсит шаблоны. В шаблонах, мультиязычные елементы заканчиваються нижнем подчеркиванием. Например, если в шаблоне присутствует {name_},и активным языком является украинский, то необходиом подставить значение word_ua, значение алиаса которогого является "name".

Само значение читается не с базы данных, а с мультиязычных файлов, которые формируються, в процессе редактирования словаря через админку, тем самым уменьшаем количество запросов к БД во время работы с веб-сайтом.

Контекст веб-сайта

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

caption_en
caption_ru
...
text_en
text_ru
...
preview_en
preview_ru

Таблица multilang содержит название таблиц, которые имеют мультиязычне поля, а таблица multilang_fields содержит название полей (соответственно без алиаса языка, например:caption, text, preview) этих таблиц. Таким образом, при управлении языками (добавление, изминение, удаление) все поля в таблицах будут изменены/добавлены/удалены (хотя удаление отключено, дабы в случаи возврата того же языка, сохранить ранее введенные даные)

Сессии мультиязычности

$_SESSION['lang']['alias'] - алиас активного языка
 


Читать далее

Логер

Комментарии ()

Механизм логирования событий характерезируется:

  • датой создания (date_create)
  • уровнем (level:[debug,info,warn,error,fatal])
  • идентификатором пользователя, который создал запись (create_by)
  • идентификатором пользователя, к которому имеет отношение лог-запись(user_id)
  • идентификатором типа лог-записи (type_id: под типом подразумевает объект логирования. Например: пользователь, денежные средства, записи и так далее. 
    Правила именования алиаса: _LOG_TYPE_{тип лога}
  • идентификатором типа операции лог-записи (operation_id, зависит от type_id)
    Правила именования алиаса: _LOG_OPERATION_{тип операции}
  • идентификатором кода выполнения (code_id: зависит от type_id. Для каждого типа лог-записи, свой код. Например для типа user(пользователь) могут быть коды: ошибка авторизации, успешная авторизация, пользователь забанен и так далее...
    Правила именования алиаса: _LOG_CODE_{тип операции}
    Коды с 1 до 10 зарезервированы, и являются общедоступными
     
    Код Алиас Значение
    1 LOG_CODE_OK Успешное выполнение
    2 LOG_CODE_ERROR Ошибка выполнения
    3   Зарезервировано
    4   Зарезервировано
    5   Зарезервировано
    6   Зарезервировано
    7   Зарезервировано
    8   Зарезервировано
    9   Зарезервировано
    10   Зарезервировано
  • самим сообщением(text)
  • идентификатором записи (data_id) таблицы (log_type.table), которая связана с типом лог-записи. Связаная таблица может быть как дополнительная лог-таблица, так и рабочая таблица. Например: для типа auth существует лог-таблица log_auth, в которую вноситься дата, логин и ip-адрес всех попыток авторизации; для типа money существует таблица money (которая кстати не является лог-таблицой) в которую заносятся все финансовые движения (зачисление, списание денежных средств и так далее)
  • асоциативным масивом дополнительных данных (data),  структура которого зависит от типа лог-записи, значения которого будут добавлены в связную таблицу типа, id записи будет присвоен автоматически параметру data_id. Параметр data_id имеет преимущество перед data (если заданы два параметра одновременно, используется data_id

Логер существует в виде отдельного класса, документация тут

Документация по теме тут,тут

Создание лог-записи

Пример

$log = new Log();

$log_array_data=array('user_id'=>$user->getIdByLogin(),'ip'=>'192.168.0.10');

$log_array=array('text'=>'Успешная авторизация',
                                 'user_id'=>$user->getIdByLogin(),
                                 'create_by'=>-2,
                                 'level'=>'info',
                                 'type_id'=>_LOG_USER,
                                 'operation_id'=>_LOG_AUTH,
                                 'cody_id=>_LOG_OK',
                                 'data'=>$log_array_data);

$log->log($log_array);

В даном примере создается лог-запись (типа пользователь), для операции авторизации с успешным кодом выполнения(_LOG_OK). В параметр data передается массив дополнительной информации , в даном случае   ip-адресс и идентификатор пользователя. 

Дополнительная информация

Если в метод log передан параметр data (при этом параметр data_id отсутствует), то необходимо сохранить дополнительную информацию. Если присутствует метод сохранения дополнительно информации по типу лога и типу операции лога setLog{type}{operation} (в нашем примере setLogUserAuth), то передаем туда масив с данными. Если метода по типу нету, используется метод сохранения дополнительной информации по умолчанию setLog. Алгоритм его работы прост - сохранить переданый масив в связную таблицу (log_type.table) , и вернуть id-записи. Если связной таблицы нет, тогда на этом все.

Получение лог-записей

 


Читать далее

Imagejpeg(): Filename cannot be empty

Комментарии ()

Заменить 

imagejpeg($new,"",100);

на

imagejpeg($new,NULL,100);

 


Читать далее

Ssh авторизация по ключу

Комментарии ()

Задача: с локальной машины подключаться к удаленному серверу по протоклу ssh без ввода пароля, тоесть авторизироваться по ключам. Очень удобно, например при использовании в скриптах автоматизации

Для начала создадим на удаленной машине каталог .ssh в домашней директории пользователя и назначим права доступа

cd ~
mkdir .ssh
chmod 711 .ssh

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

ssh-keygen -t rsa

нажимаем "Enter", тем самым отказываемся  от ключевой фразы. В домашней директории в папке .ssh увидим два файла

id_rsa - закрытый ключ

id_rsa.pub - открытый ключ, который копируем на удаленню машину  

scp /home/username/.ssh/id_rsa.pub username@primary.km.ua:/home/username/

На удаленной машине добавляем содержимое открытого ключа id_rsa.pub в authorized_keys 

cat ./id_rsa.pub >> ./.ssh/authorized_keys   
chmod 600 ./.ssh/authorized_keys
rm ./id_rsa.pub     

На удалённом сервере настроим sshd на авторизацию с использованием ключей:

$ sudo vim /etc/ssh/sshd_config

Находим или добавляем строки:

# Разрешаем использование RSA-ключей
RSAAuthentication yes
# Разрешаем авторизацию по ключам
PubkeyAuthentication yes
# Указываем файл, в котором будут наши открытые ключи, по которым разрешена авторизация
AuthorizedKeysFile .ssh/authorized_keys

Перезапускаем sshd:

# service sshd restart
Stopping sshd.
Waiting for PIDS: 1470.
Starting sshd.

 


Читать далее

Поиск взлома вашего сайта

Комментарии ()

Поиск недавно измененных PHP файлов

find . -type f -name '*.php' -mtime -7

Искать все PHP файлы с подозрительным кодом

find . -type f -name '*.php' | xargs grep -l "eval *(" --color
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color

 


Читать далее

BIND: Формат файла зоны

Комментарии ()

Описание любого домена (служебная информация, его NS, сервера почты, субдомены) или, иначе говоря, зоны, должно строго соответствовать определенному формату. Рассмотрим его.


Читать далее

Удалённое исполнение кода через SSH

Комментарии ()

ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:
 

ssh user@server ls /etc/ 


Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка. 

Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
 

ssh user@server -t remove_command

 


Читать далее

Копирование файлов через SSH

Комментарии ()

SCP (от англ. secure copy) — протокол RCP копирования файлов, использующий в качестве транспорта не RSH, а SSH. В UNIX-подобных операционных системах существует одноимённая (scp) утилита удалённого копирования файлов (входит в состав openssh).


Читать далее

Как снять жёсткий диск Dell Inspiron N5110

Комментарии ()


Читать далее

Webit.in.ua 2013