Архив рубрики: PHP

«Странности» с типами в PHP

Как известно, язык PHP славится своими «подводными камнями», когда дело касается типизации переменных.

Рассмотрим задачу, когда, казалось бы, очевидное и простое решение вдруг не работает, и очень важно внимательно читать документацию.
Читать далее

Doctrine: добавляем тип tinyint

В предыдущей заметке я рассказал, как переопределить поведение для типа json_array в Doctrine. Сейчас расскажу, как добавить поддержку однобайтового типа tinyint.
Читать далее

Doctrine: тип json_array, русские буквы и JSON_UNESCAPED_UNICODE

В Doctrine есть удобный тип поля для хранения сложных структур дынных (массивов, в том числе ассоциативных и вложенных) — json_array. Но у него имеется один серьезный, на мой взгляд, недостаток: при работе, например, с русским языком происходит кодирование многобайтных символов, и строка «Привет» превращается в «\u041f\u0440\u0438\u0432\u0435\u0442», что, во-первых, сильно раздувает объем хранимых данных, а во-вторых, просто неудобно при просмотре содержимого таблиц.
Читать далее

ImageMagick: как правильно сжать фотографии, загружаемые на сервер

Однажды я заметил, что фотографии, загружаемые пользователями на одном нашем сайте, уж слишком много весят. Точнее, слишком тяжелыми делались фотки-миниатюры, которые были по размерам меньше 100 пикселей по каждой из сторон, но могли при этом иметь размер и в 100 килобайт. Еще обратил внимание, что одни фотографии такие огромные, а другие весят, как им и положено, 2-3 килобайта.

Читать далее

Сессии PHP и «Помнить меня»

Как-то раз, давно уже, зашел у нас на Хабре спор с одним местным юзером о том, как реализовывать функционал «Помнить меня». Он до хрипоты доказывал, что это нужно делать посредством просто длинных php-сессий. Мои аргументы о том, что сессии потому и называются сессиями (наверно, правильный перевод session — это все же «сеанс»), что они должны быть краткосрочными, не действовали. Оппонент говорил: раз можно сделать длительность сессий хоть несколько лет, то этим и надо пользоваться.

Читать далее

Тонкости PHP

Для затравки напишу-ка про парочку особенностей PHP, которые мало кто (в основном из начинающих) знает.

1. Наверное, многие сталкивались с такой проблемой, что в скриптах не хочет работать редирект. Вместо этого, интерпретатор PHP упорно выдает сообщение об ошибке. Это происходит потому, что где-то в вашем скрипте уже произошел вывод контента. Значит, посылать заголовки оператором header() становится бессмысленно. Собственно, PHP на это и указывает в своих сообщениях. Часто такая вещь происходит, когда в конце одного из подключаемых php-скриптов остаются пробелы или пустая строка, заметить которые иногда бывает проблематично. А остаются они после завершающей скрипт конструкции «?>». Интерпретатор получает знак «Все, php закончился, дальше идет прямой вывод в браузер». Ну и выводит. Как этого избежать? Очень просто: не ставить в конце скрипта «?>», интерпретатор на это не ругается, так даже правильнее.

2. Начиная с версии 5.2.1, в PHP изменился  алгоритм формирования псевдослучайных последовательностей чисел с помощью функции mt_rand(). В документации это найти сложно, а вот я столкнулся с этим сам, когда при переходе с четвертой версии на свежую пятую оказалось, что скрипт, генерирующий случайные числа на основе задаваемого начального значения (с помощью функции mt_srand(), которую начиная с версии 4.2.0 вызывать необязательно, но она бывает нужна, если вам нужно формировать одни и те же последовательности), стал выдавать совершенно другие числа. Будьте бдительны. :)