Zip и UnZip на PHP
Сегодня встала задача сделать поддержку компрессии и декомпрессии в программе на PHP. На первый взгляд задача простая т.к. PHP5 уже содержит методы для работы с архивами ZIP. Во первых это функции вида zip_open, zip_read. Во вторых - есть шикарный класс ZipArchive который выполнит за вас всю грязную работу.
С виду все прекрасно, однако как только дело дошло до боевого сервера оказалось что модуль позволяющий использовать средства для работы с ZIP не установлен.
Нашел два решения данной проблемы - оба в использовании библиотеки gzip.
Первое решение состоит в использовании PhpConcept Library Zip - написанная Винсентом Блаветом и распространяемая по лицензии GNU/LGPL
Второе решение нашел совершенно случайно в phpMyAdmin - если глянуть в папку /libraries/ то там можно найти два файла zip.lib.php и unzip.lib.php которые содержат классы для паковки и распаковки zip файлов соответственно.
OpenID
Доделал вход на сайт по OpenID, дело оказалось проще чем я поначалу думал. И хотя на сайте пока реализована только клиентская часть, идея OpenID мне определенно понравилась.
Использовал библиотеку PHP OpenID Library. В целом в код особенно не погружался, но в целом сделано качественно, правда сделано для обоих версий PHP, из за чего нужно гасить ошибки STRICT, ну да будет время поправлю.
Singular vs. Plural как называть таблички или тупики развития информационных систем.
Как то само собой получилось что традиционно таблицы в реляционных базах данных называются в множественном числе как то users, pages, items. Однако последнее время наметилась тенденция к переходу на имена в единственном числе как то user, page, item возможно такая тенденция связана с объектно ориентированным подходом когда каждая запись рассматривается как объект. На мой взгляд множественное число более предпочтительно так как таблица это все же коллекция объектов а не сам объект однако многие фреймворки предлагают совершенно новый подход взаимодействия с базами данных исключая или минимизируя написание программистом непосредственно SQL запросов при помощи различного рода ОО маппингов.
Не могу сказать что использование ОО маппингов это верх технологической мысли. Наоборот это технологический нонсенс. Задумайтесь, язык SQL изначально был предназначен для общения человека с реляционной базой данных не машины а именно человека. Именно поэтому он основан на простых конструкциях английского языка SELECT INSERT UPDATE. Со временем написание комманд на языке SQL стало уделом программистов и системных администраторов. Пользователи же получили GUI, оконный интерфейс и мышу. Однако SQL все также используется для общения с базой данных однако теперь на нем разговаривают не люди и компьютеры а только компьютеры то есть сами программы. То есть программы разговаривают друг с другом на естественном языке! Язык разработанный как средство для общения человека с машиной де факто стал стандартом общения машин между собой. Но программам очень не удобно общаться между собой на естественном языке а тем более программистам совсем не удобно писать программы которые будут использовать этот язык для работы с данными поэтому придумали ОО маппинг технологию когда реляционная модель заменяется объектной. То есть для облегчения хождения на протезах были изобретены костыли. С костылями на протезах ходить намно-о-о-ого приятней. Но может быть пора попробовать что нибудь новое оригинальное. Например, попробовать встать на собственные ноги тем более что они у нас слава богу вроде бы есть взять к примеру те же объектно-ориентированные базы данных.
К слову сказть, также дела обстоят и с протоколами Интернета SMTP, HTTP, POP3 - все они разрабатывались как текстоввые протоколы для работы через телнет. Со временем telnet заменили на специализированные программы - браузеры и майлклиенты а протоколы остались без изменений. Отсюда и тонны спама и проблемы совместимости браузеров и сложности настройки почтовых клиентов. Возможно когда нибудь кретинизм в высоких технологиях и будет побежден но пока клубок противоречий запутывается все сильнее.
как обработать BMP изображение используя PHP
Как известно библиотека GD не поддерживает возможность прочитать файлы формата BMP а пользователи (особенно малограмотные пользователи) часто так и норовят закачать на сайт фото или картинку в формате BMP. Как быть если закачать нельзя но очень хочется? Оказывается есть способ.
Здесь работающая демка а здесь сходник
Собственно всю грязную работу выполняет класс написанный Джеймсом Хайнрихом (James Heinrich) для своего проекта getID3(). Что интересно, в последних версиях проекта класс уже не умеет преобразовывать BMP в GD а только читает метаинформацию. На старую версию класса наткнулся совершенно случайно - она есть в phpThumb уже в полном варианте. Большое спасибо Джемс :)