Posts Tagged ‘php’

А как вы проверяете mime-type файлов в php?

Вторник, Август 3rd, 2010

Как известно, все загружаемые на сервер файлы нужно проверять на соответствие разрешенным mime-type. Большинство программистов проверяют это соответствие, сверяясь с mime-типом из $_FILES, но этот mime-тип берется из заголовков HTTP запроса и может быть определен неправильно, т.к. определяет его браузер. У меня например, некоторые jpeg-файлы определяются как application/octet-stream и естественно, скрипт их не принимает. К тому же решение построенное на проверке mime-типа из HTTP заголовка потенциально опасно, т.к. заголовки можно подделать и указать любой mime-тип.

Как же сделать правильно?

Нужно установить расширение PECL, которое называется Fileinfo. Это расширение является заменой более старого расширения mime_magic. Валидатор MimeType в Zend Framework использует именно Fileinfo, как наиболее приоритетный способ определения mime-типа. Fileinfo определяет mime-тип по специальным сигнатурам, которые есть внутри файла.

Другой способ состоит в том, чтобы переложить определение mime-типа на веб-сервер. У веб-сервера Apache есть специальный файл magic с сигнатурами, с помощью которого он определяет, какого mime-типа является загружаемый файл, и устанавливает это значение в заголовок. Таким образом, в php скрипт придет верный mime-тип.

Для того, чтобы, Apache определял mime-тип файла, нужно включить модуль mod_mime_magic.

Небольшой офф: не забывайте так же проверять тип файлов еще и по расширению.

Использование Zend_Form без декораторов

Вторник, Сентябрь 8th, 2009

Лично мне использование декораторов в формах в Zend Framework никогда не нравилось, потому что это никогда не было для меня удобным. Каждый раз, когда приходилось добавлять дополнительные элементы и разметку в довольно сложную форму, это превращалось в великую головную боль.

Кроме того, я почему-то уверен, что использование декораторов в Zend Form это не лучшее решение. В настоящей действительности все чаще приходится работать с готовой XHTML разметкой, которую предоставляет верстальщик. В таком случае, программисту приходится “переводить” уже сверстанную форму в php-код. Разве это удобно, разве это способствует продуктивности? Никак нет. Просто делается лишняя работа, вместо того, чтобы подставить в нужные места формы вывод ошибок и прочего.

Но как сделать так, чтобы наша форма сохраняла функциональность валидаторов, “зашитых” в ней, и при этом мы могли бы визуально видеть разметку формы? Как ни странно, но в этом нам поможет декоратор! (далее…)

Сортировка по значению массивов и выборок из БД

Четверг, Сентябрь 3rd, 2009

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

Иногда бывает нужно сделать сортировку списка по значению какого-то поля из этого списка. Поясню. Например, у вас есть список дел, каждое дело в списке помечено приоритетом. Бывают приоритеты (самый приоритетный, приоритетный, средний приоритет, низкий приоритет и самый низкий приоритет).

Давайте посмотрим это на примере таблицы mysql. Создадим таблицу:

CREATE TABLE `tasks` (
`id` INT NOT NULL AUTO_INCREMENT ,
`priority` ENUM( 'highest', 'hight', 'medium', 'low', 'lowest' ) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

и добавим в нее данные:

INSERT INTO `tasks` VALUES (1, 'medium', 'Выгулять собаку');
INSERT INTO `tasks` VALUES (2, 'lowest', 'Полить кактус');
INSERT INTO `tasks` VALUES (3, 'medium', 'Сходить в магазин');
INSERT INTO `tasks` VALUES (4, 'highest', 'Захватить мир');
INSERT INTO `tasks` VALUES (5, 'low', 'Прочитать Ремарка');
INSERT INTO `tasks` VALUES (6, 'hight', 'Прыгнуть с парашютом');
INSERT INTO `tasks` VALUES (7, 'medium', 'Поспать');

(далее…)