пятница, 27 сентября 2013 г.

PHP Error[8]: unserialize(): Error at offset

Это значит что данные, которые вы пытаетесь распаковать повреждены.
Проверьте, сериализованные ли это данные и кодировку строки.

четверг, 26 сентября 2013 г.

git Удалить ветку в репозитории

Для удаления ветки в удалённом репозитории:

git push <source_name> --delete <branch_name>

Пример: git push origin --delete my_branch

Удаление в локальном репозитории:

git branch -D <branch_name>

Пример: git branch -D my_branch

вторник, 24 сентября 2013 г.

crontab Запуск задачи с параметром времени

Задача: запускать каждый месяц скрипт  и передавать в него параметром месяц, который был 2 месяца назад.

Решение:

0 0 1 * * e96-script /home/e96/e96.ru/www/cronscripts/monthsOrdersReport.php `date "+%m %Y" -d "2 month ago"`


Вместо 0 0 1 * * можно поставить @montly

пятница, 20 сентября 2013 г.

sphinx PDO::__construct(): Server sent charset (0)

Поставил sphinx на ubuntu из репозиториев и обнаружил на сайте такую ошибку

PDO::__construct(): Server sent charset (0)

Внятных ответов, как лечить такую штуку, если сфинкс поставлен пакетом не нашел, но нашел, что нужно делать, если он собран из исходников.

После сборки из исходников проблема отпала сама собой, возможно дело в версии.

Установка sphinx из исходников (ubuntu)

Скачиваем здесь http://sphinxsearch.com/downloads/release исходники Source tarball (tar.gz)

Распаковываем и в папке с исходниками выполняем команды

(если стоит mariadb, как у меня)
sudo aptitude install libmariadbclient-dev libmariadbd-dev checkinstall

(если стоит mysql, не тестил, но должно так же работать)
sudo aptitude install libmysql++-dev libmysqlclient15-dev checkinstall

./configure

make

sudo checkinstall

Создаем конфиг в /usr/local/etc/sphinx.conf

Теперь запускаем индексацию

sudo /usr/local/bin/indexer --all

После индексации запускаем демон

sudo /usr/local/bin/searchd

четверг, 19 сентября 2013 г.

среда, 18 сентября 2013 г.

Странное поведение mysql datediff

Понадобилось выбрать все записи, дата создания которых больше 30 дней.
Дата создания хранится в поле типа datetime

Для начала написал

DATEDIFF(NOW() , creation_date) > 30

Выборка забрала не все записи, которые были нужны. Нехитрым тестами определил, какие записи выпадают и обнаружил что при вычитании из текущей даты значения по умолчанию (0000-00-00 00:00:00) возвращается null.

Решение очевидно.

(DATEDIFF(NOW() , creation_date) > 30) OR (ISNULL(DATEDIFF(NOW() , creation_date)))

Надо будет разобраться, почему так происходит. Возможно идет какое то преобразование к timestamp

вторник, 17 сентября 2013 г.

PHP Warning: Error while sending QUERY packet

При долгом выполнении скрипта может появиться такая ошибка.
Лечится периодическим пингом базы:


$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->ping()

среда, 11 сентября 2013 г.

php htmlspecialchars Вырезает русские символы

Если такое происходит, значит надо установить правильную кодировку для строки. Для htmlspecialchars по умолчанию кодировка utf8.

четверг, 5 сентября 2013 г.

mysql Регистрозависимый поиск like

Для того, что бы LIKE осуществлял регистрозависимый поиск, нужно что бы таблица была в кодировке utf8 или использовать LIKE BINARY