Не так давно в Яндексе объявили о собственной разработке быстрых страниц, по типу AMP от Google или Instant Articles от Facebook, правда пока с очень ограниченным функционалом (но стоит отметить, что функционал постоянно дорабатывается).
Решил попробовать запустить Турбо Страницы на одном из своих проектов. Но как оказалось, технология есть, а никаких SDK и библиотек для PHP нет.
Пришлось набросать свою библиотеку.
Сейчас она поддерживает весь основной функционал для создания фида с турбо-страницами, а так же содержит хелпер для создания элементов контента в формате, поддерживаемым турбо-страницами.
Изначально писал всё под PHP 7, уж больно мне нравится строгая типизация, а так же свежий phpunit. Но потом попросили сделать версию с поддержкой PHP 5.4. И чтобы не отказываться от современных инструментов, и не ломать версию для 7 PHP, решил сделать отдельную версию с поддержкой PHP 5.4.
Каждое новое обновление серверного программного обеспечения — это упражнение из области «и хочется, и колется…». Так и я решил наконец-таки устаревающий PHP5.2 оставить в прошлом (ведь он не умеет работать с многими новомодными плюшками), и перейти на PHP5.4.
Таким образом был обновлен PHP на одном из боевых серверов (с полутора дясятком разного рода сайтов). Реакция клиентов не заставила себя долго ждать, и сразу посыпались жалобы на поломанный в разных местах функционал.
Расскажу об одной из причин, вдруг кому-то пригодится.
Выполнение некоторых участков кода заваливалось с ошибкой «Fatal error: Call-time pass-by-reference has been removed in».
Оказалось, что новый PHP не разрешает использовать ссылку (&$arg) в вызове функции. К слову, PHP и раньше мог ругаться на такую конструкцию, правда всего-лишь на уровне Warning’ов. Новый PHP оказался строже, отдавая Fatal error при выполнении.
В это же время использование ссылки на аргумент в объявлении функции допускается и приветствуется.
Резюмирую.
Стоит избегать конструкций:
[code type=php]myFunc($arg1, &$arg2);[/code]
А использовать:
[code type=php]function myFunc($arg1, &$arg2) {}[/code]
В текущем проекте появилась необходимость делать экспорт некоторых документов в PDF. Один из лучших классов, существующих на сегодняшний день — fpdf. А если вам понадобится работать с кирилицей (utf-8), тогда вам понадобится ufpdf.
В один прекрасный момент работы с этим классом, я столкнулся с тем, что периодически и безсистемно при генерировании pdf-документа fpdf падает с ошибкой «fatal error: allowed memory size of…».
Погуглив нашел упоминания в сети о похожей проблеме, связанной с использованием колонтитулов в документе. Но в моих документах они не используются, и поэтому пришлось искать дальше. Ничего не нагуглив, начал искать ошибку методом исключения.
Ошибка оказалась в следующем. fpdf почему-то не очень любит вставлять изображения из сети, например:
Проблема решается просто. Изображение перед вставкой в документ надо сохранить на сервер любым способом (fopen(), file_get_contents(), etc..), и вставлять в документ уже из локального каталога.
Давно не обновлял на локальном сервере программное обеспечение, и тут после обновления mysql-сервера до версии 5.5 столкнулся с тем, что многое из написанного ранее вываливается с ошибкой mysql типа «1366 — Incorrect integer value». Всё из-за того, что в поля с автоинкрементными значениями я вставлял по старинке, оставляя значение этого поля пустым. Сейчас же требуется использовать значение NULL. Новый сервер mysql по-умолчанию работает со включенным strict-mode, и не позволяет использовать такие инсерты. Поэтому вариантов решения два:
1. переписать код и вставлять в автоинкрементные поля значения грамотно, используя NULL;
2. выключить strict-mode, закоментировав в my.ini (my.cnf) строку «sql-mode=»STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION»«.
Если меняете настройки mysqld, не забудьте потом перезагрузить сервис.
Много раз на протяжении праздников наталкивался на этот ролик, но посмотрел только сегодня. Отличная идея, создатели этого видео — молодцы. Рождественская история через призму современности. Пример того, как можно постараться передать Евангелие нынешней молодежи, не исказив при этом сути. 2000 лет назад Спаситель пришел в мир так же тихо, без царских почестей, об этом знал только определенный круг людей.
Он, по природе Бог, не держался за равенство с Богом, но добровольно лишился всего, приняв природу раба и человеком родившись. Он был во всем человеку подобен, но еще больше себя умалил и так был послушен, что принял и смерть саму — смерть на кресте. За это Бог вознес Его над всеми и Имя даровал превыше всех имен, чтобы пред именем Иисуса всякое колено преклонилось — на небе, на земле и в преисподней — и всяк язык провозгласил, что Иисус Христос — Господь, во славу Бога Отца. Библия, современный перевод. Послание Филиппийцам 2:6-11.
Сегодня появилась задача сделать для сайта, на котором используется интерфейс на двух языках, сделать автоматическое определение системного языка у пользователя. Чтобы пользователю сходу отдавать интерфейс на нужном ему языке.
В связи с этим набросал туториал с примером этого функционала.
Мне приходится работать с движками многих сайтов, постоянно появляются для обслуживания новые, и уходят в архивное забвение старые. Поэтому часто добавляются новые блоки виртуалхостов в конфиге Апача, и сам конфиг уже изрядно раздулся.
Появилась минутка свободного времени, и я решил навести порядок в этом безобразии. Захотелось сделать так, чтобы для добавления нового сайта, было достаточно создать директорию, и прописать новый хост в /etc/hosts, а не повторять каждый раз монотонную операцию добавления и редактирования блоков <VirtualHost>.
По сути теперь у меня есть основной домен, и к нему автоматически добавляются субдомены, по которым и грузятся разные сайты с локальной машины.
У моего хорошего старого друга Алексея — беда. У его жены обнаружили рак. Всем кто захочет и сможет помочь финансово или молитвенно всю информацию и историю их борьбы с болезнью можете получить тут: http://anexus.livejournal.com/. За достоверность информации ручаюсь лично.