Решил собрать все маленькие дурацкие PHP-тулзы в одном месте: https://github.com/vasa-c/go-helpers.
И первым будет пагинатор.
Пример: https://blgo.ru/go/helpers/pager/.
Пагинируйте всё, что придёт в голову, не отрываясь от подушки!
Решил собрать все маленькие дурацкие PHP-тулзы в одном месте: https://github.com/vasa-c/go-helpers.
И первым будет пагинатор.
Пример: https://blgo.ru/go/helpers/pager/.
Пагинируйте всё, что придёт в голову, не отрываясь от подушки!
Вакансия закрыта
Мы хотим себе веб-программиста.
Веб-программист должен:
Веб-программист должен знать:
Веб-программист получит от нас:
Контакты: oleg.grigoriev@insaito.ru.
Продолжим, пожалуй, разговор про конфиги (часть 1, часть 2.1, часть 2.2).
На этот раз отвлечёмся от теории и перейдём к практике. Чтобы нам такое законфигурировать?
Законфигурируем, пожалуй, какую-нибудь конфигурацию :) Допустим, конфигурацию веб-сервера и пусть сервером этим будет Nginx.
Задача более конкретно:
Итак, у нас уже 7 версий сайта. Каждая на своём хосте. И для каждого хоста нужно иметь nginx-конфиг. Все конфиги имеют одинаковую структуру, но отличаются частностями.
Что мы будем их 7 раз копипастить и корректировать? А любое изменение в структуре вручную в каждую версию вносить? К чёрту! Давайте всё автоматизируем.
Остальной текст под катом
Итак, потрясшая весь мир радостная весть — вышла альфа PHP 5.4. Такими темпами есть надежда, что не пройдёт и десяти лет, как появится стабильный релиз.
Данная новость обсосана уже множество раз и ещё раз повторять это смысла никакого нет. Но так, как я давно ничего не писал в этот бложик, нужно начать возвращение хоть с чего-нибудь.
Какие же прелести нас ожидают:
1. Traits: сколько бы задроты «чистого ООП» не гневались, а вещь в умелых и умеренных руках вполне себе полезная. Реализация опять может вызывать вопросы, но всё же лучше, чем ничего.
2. Array dereferencing: всего пяток лет обещаний и вот оно. Вот так вот уже было можно: func()->method()
, вот так тоже: $A['var']
, и даже так: $A['var']()
. Теперь можно так: func()['var]
. Ещё пара нововведений и пых обгонит питон по языковым плюшкам.
Единственно может напрягать тот факт, что обязательно найдётся большое количество индивидуумов, которые начнут делать следующее:
function get($id) { // Дикий запрос в базу } echo 'Имя: '.get(1)['name']; echo 'Фамилия: '.get(1)['surname']; echo 'Вся фигня: '.get(1)['fignya']; |
Ведь зачем вводить промежуточную переменную, когда можно без неё. Синтаксический сахар же.
Впрочем, это уже проблемы этих индивидуумов.
3. Поддержка DTrace: несомненно отличнейшая вещь, которая сделает нашу жизнь намного лучше.
А может и не сделает. Я, если честно, вообще не знаю, что это такое.
Но возможность писать вместе с PHP на языке D, который совсем не тот язык D, а совсем другой язык D, конечно доставляет.
4. Чистка мусора: register_globals, allow_call_time_pass_reference, register_long_arrays, session_is_regisitered(), session_registered(), session_unregister().
Давно пора, но единственно печалит удаление allow_call_time_pass_reference
. Это, когда разрешается по старинке решать в момент вызова как передавать аргумент в функцию: по ссылке или по значению. Без включения этой настройки тоже разрешается, но интерпретатор начинает бурчать себе под нос про DEPRECATED
.
Мне оно не нужно, но иногда приходится в чём то старом копаться. Что характерно, все остальные хреновены (register_globals, long_arrays) давно не встречаются. И в случае чего легко эмулируются. А time pass reference вылезает зачастую и так просто от него не избавишься.
Продолжаем разговор из прошлых двух частей.
Конфигурация сайта 1: введение
Конфигурация сайта 2.1: совместная разработка (платформы)
В прошлой части у нас массив, соответствующий какой-то платформе (например, vasya), вливался в массив некой базовой конфигурации (config.php
). Назовём это: «vasya
наследуется от config
».
Раньше я делал так:
config
— конфигурация системы на рабочем сервере, от неё наследуются конфигурации разработчиков.
Оно не всегда удобно. Лучше наследоваться от какой-то базовой конфигурации, а рабочей сервер поставить в один ряд с разработчиками. Тем более в нашем примере рабочих серверов у нас несколько.
Наследуем всё от базового конфига и введём ещё промежуточные этапы:
В прошлой статье мы разобрались, как можно хранить конфигурацию системы и как её можно использовать.
Однако, мы подразумевали простейший вариант, когда система работает в единственной копии на сервере. Усложним положение:
Итак, бравые разработчики Вася, Петя, Миша и Гриша в поте лица разрабатывают очередную социальную сеть нового поколения. Каждый ведёт разработку в своей локальной версии на своём компьютере. Наработки они выкладывают на локальный тестовый сервер (где-нибудь в офисе в шкафу пылиться). Выкладывают, конечно, не по FTP, а с использованием какой-нибудь системы контроля версия, например, Mercurial.
Ведущий программист проверяет обновления на наличие ошибок и в случае чего даёт по шее. Если же ошибок не видно и локальная версия достигает какого-то стабильного состояния: все изменения отправляются уже на боевой сервер. Вернее на сервера, потому что проект крупный и серверов уже аж три штуки стоит.
Итого, система работает уже не в одной копии, а в восьми (4 разработчика, локальный сервер, 3 рабочих сервера). Назовём то, где работает конкретная копия системы платформой и дадим каждой имя (платформа server.1, платформа vasya, платформа local и т.д.).
Понятно, что конфигурация системы будет иметь одинаковую структуру для всех платформ, но вот на каждой конкретной значения параметров могут отличаться. То есть, у каждого из разработчиков могут быть свои параметры локальной БД. Или Вася захотел включить у себя вывод отладочной информации, а Петя этого не захотел. И так далее.
Подумаем, как это можно организовать.
Сегодня заведём разговор на такую, казалось бы простую, тему, как конфигурация сайта. То есть поговорим о таких вещах, как параметры подключения к БД, различные настройки, как всё это хранить и как со всем этим работать.
Разобьём этот разговор на три части:
goDB 1.3: новый говнокод и ебическая сила природы в одном флаконе. Домохозяйки выбирают goDB.
В новой версии при сохранении совместимости с mysqli добавлены надстройки по следующим пунктам:
BEGIN
+ COMMIT
(ROLLBACK
)bind_param
, bind_result
Кроме того, добавлены следующие возможности:
Объект ссылка разделяет подключение с основным объектом, но может иметь другие настройки (префикс, отладка, декоратор запросов).
Формат разбора bool
.
Метод __invoke()
.
В PHP 5.3 запросы можно выполнять прямо так: $one = $db('SELECT 1', null, 'el');
Методы getPrefix()
, getDebug()
и т.д.
Реструктуризация юнит-тестов: теперь вместо одного файла папка с тестами.
Все предложения пишите на форуме или присылайте на мыло.
В ближайшее время возможно следующее:
Ничто не заставляет делать какое-то дело, как необходимость делать другие более важные дела.
Поэтому goDB продолжает радовать нас новыми версиями.
В новой версии (1.2.2):
Плейсхолдер ?bool: вставка значения для столбца типа BOOL.
Формат представления результата kassoc и его подвид kassoc:$col.
Формат же vars теперь позволяет выборку по одному столбцу: его значение станет как ключём массива, так и его элементом.
Плюс добавлены исключения goDBExceptionFetchUnknown
и goDBExceptionFetchUnexpected
.
Также местами переписан код.
Сам класс теперь можно просмотреть прямо на сайте не скачивая архивов.
Ну и конечно, можно всё-таки скачать архив (ZIP, 5K)
Наконец, впервые за несколько лет, обновил документацию по goDB. Она по-прежнему убогонькая и пафосная, но теперь полностью описаны все новые возможности.
Ну и, так как просто описывать старьё скучно, выпустил новую версию.
Для всех плейсхолдеров теперь есть «длинные» синонимы:
$db->query('INSERT INTO `table` SET ?set', array($set)); $db->query('INSERT INTO `table` VALUES ?values', array($values)); ... |
Полный список в документации.
$data = array( 'one' => 'Раз', 'two' => 'Два', 'three' => 'Три', ); $pattern = 'SELECT * FROM `table` WHERE `one`=?:one AND `two`=?:two OR `three`=?:three ORDER BY ?:one ASC'; |
Можно комбинировать тип плейсхолдера и имя: ?set:name
.
В одном запросе использовать простые и именованные плейсхолдеры нельзя.
Подробнее в документации.
Добавлены новые параметры конфигурации charset
и link
:
$config = array( 'host' => 'localhost', ... 'charset' => 'utf8', ); |
Не нужно при подключении вызывать SET NAMES. Особенно удобно для отложенных подключений.
link
позволяет сделать ссылку на другую базу. Подробнее в разделе о пространстве имён.
Также несколько изменена иерархия подключений.
При правильном использовании несовместимостей нет. А так, немного есть.