Вышел php 5.5 alpha 2

Standard

Вышла 2 альфа версия PHP 5.5. Качаем с этой страницы.

Из нового:

  1. Функция empty() теперь поддерживает выражения и вызов функции как аргументы.
    До этого момента был возможен вызов empty($somevar), но нельзя было сделать empty(some_function())
  2. Оптимизирован доступ к временным и скомпилированным VM переменным. На 8% меньше обращений к памяти.
  3. MySQL расширение теперь бросает E_DEPRECATED ошибку, вместо него используйте MySQLi, PDO или Mysqlnd
  4. Оптимизация VM стека

Все это не может не радовать, пхп становится лаконичней и быстрее.

Doctrine Collection против array_chunk

Standard

Столкнулся с такой задачей: необходимо разбить коллекцию объектов (Doctrine) на части. Изначально подумывал использовать array_chunk, но ему на вход нужно подать массив, ок — doctrine поддерживает метод ->toArray(), но проблема в том, что toArray() превращает и коллекцию и объекты, которые в ней содержатся в массив. Можно было бы поизвращаться с Doctrine Pager, но решение уже существовало — метод getData(), к-ый надо выполнить над коллекцией. В итоге получаем массив содержащий объекты.

Вычисляем md5 и sha1 строки в консоли

Standard

Часто бывает необходимо вычислить md5 (или sha1) значение строки (для паролей, к примеру). Раньше мне приходилось идти в браузер набирать в поисковике «md5 online», теперь использую только консоль. На маке есть чудесная программа openssl, ее мы будем использовать для вычисления. Т.к. взять аргумент в alias нельзя, приходиться создавать функции, итак мои функции для вычисления sha1 и md5 в ~/.bash_profile :

sha1(){
echo -n "$1" | openssl sha1;
}
# Назвал не md5 тк такая прога уже есть в консоли мака,
# чтобы не затереть выбрал km5
km5(){
echo -n "$1" | openssl md5;
}

чтобы начать их использовать — набирите source ~/.bash_profile. Теперь можно вычислить sha1 от строки 111:

sha1 111
# => 6216f8a75fd5bb3d5f22b6f9958cdede3fc086c2

Как добавить / убрать слеш из урла

Standard

Сегодня речь пойдет о редиректах насущных, в прошлый раз я упомянал как сделать редирект с www на без www, сейчас задача убрать из урла слеш (или добавить), например должен отсылать 301 редирект на /.

Пропишите это в .htaccess:

# Чтобы убрать слеш
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Это чтобы добавить слеш
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]

Пара ошибок в проектах symfony

Standard

Ошибка #1: The «…» route has some missing mandatory parameters (:Array)’

Описание: вознакает тк doctrine collection route, к-ый используется в генераторе админки необходимо ссылаться на определенный первичный ключ. В связи many-to-many мы имеем композицию 2 первичных ключей, поэтому у нас появляется массив столбцов вместо одного из них.

Решение: Модифицируйте routing.yml  (‘column: Array’ замените на ‘column: id’)

Ошибка #2: sfConfig::get(‘app_ …’) не работает в task`ах

Описание: при выполнении таска  не был указан параметр  —application=frontend

Решение: используйте параметр в cli, либо поставьте значение по умолчанию:

Как поменять название хоста в shell

Standard

У меня появилось 3 сервера, все на том же hetzner. Тк по умолчанию названия у них почти одинаковые (название ОС + архитектуры) можно запутаться с каким сервером работаешь в shell. Чтобы этого избежать выполняем такую команду:

hostname SOMENAME

После чего, перезагружаем shell (у меня — bash):

exec bash -l

к слову, стандартная перезагрузка (shell source ~/.bashrc) не изменяет название хоста.
К сожалению приведенные выше команды изменяют название до следующей перезагрузки ОС. Чтобы сделать изменения перманентными — задаем необходимое название в этом файле:

/etc/hostname

После этого, перезапуск apache может выдать такую ошибку: «apache2: apr_sockaddr_info_get() failed for somename» — пропишите в /etc/hosts строку «127.0.0.1 somename».
У вас также может быть ошибка «apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName» чтобы избавиться добавьте строку ServerName localhost в файл /etc/apache2/httpd.conf .
В итоге у меня все работает по такому принципу: я даю серверу имя в панели управления hetzner, затем прописываю это имя в конфиге ssh (статья как работать с ssh) и наконец: изменяю имя хоста на самом сервере, как я описал выше.

Как закрыть от роботов весь dev сервер

Standard

Задача: на сервере разработки или staging-сервере, необходимо закрыть все сайты от индексации роботами. Шаг #1: добавляем следующие строки в httpd.conf

SetHandler None
Alias /robots.txt /var/www/robots.txt

Шаг #2: создаем robots.txt по вышеупомянутому пути, со следующими строками

User-agent: *
Disallow: /

Шаг #3: перезагружаем apache

apachectl restart