Обновить
50.52

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга
Уровень сложности

Отображаем e-mail в виде картинки

Время на прочтение1 мин
Количество просмотров3.1K
Сегодня понадобилось опубликовать несколько адресов электронной почты на общедоступной странице в Интернете. У меня запасена картинка с моим e-mail'ом, но опубликовать нужно было чужие адреса. Работать в GIMP я очень не люблю, поэтому идея сделать статичные картинки и опубликовать их была сразу же отброшена. Я перешёл к следующей идеи — найти PHP скрипт, который бы создавал картинку с адресом электронной почты налету.
Читать дальше →

Определение периодов времени по текущей дате

Время на прочтение9 мин
Количество просмотров1.4K
Как-то недавно появилась задача сделать выборки из БД по разным периодам времени в зависимости от текущей даты. Для этих целей я реализовал класс с некоторым набором функций, определяющих концевые участки необходимых временных отрезков.

На мой взгляд такие задачи возникают довольно часто и иметь один инструмент, который можно впоследствии дополнять новыми функциями, соответствующими различным врменным интервалам, очень удобно. Конечно в этом нет ничего сложного, но думаю это поможет кому-то сэкономить время на этой рутинной работе. Кроме того в нете ничего готового я просто не нашёл.
Собственно код...

Проверка минимальной версии PHP

Время на прочтение1 мин
Количество просмотров1.6K
Сделал простенький сервис для проверки минимальных PHP-требований, необходимых для работы скрипта.

Можно загружать как один PHP-файл, так и архив (zip, tar.gz, tar.bz, tar)
www.webtask.ru/phpversioning

Например, phpMyAdmin-3.1.1-english.tar.gz:

PHP version:
5.2 or higher

PECL extension modules:
fileinfo:0.1

Extension modules:
mysql
mysqli
curl
mbstring
gmp
bz2
mcrypt
zip

Отправить POST через file_get_contents()

Время на прочтение3 мин
Количество просмотров87K
Чтобы получить содержимое веб-страницы все с удовольствием используют file_get_contents(), например file_get_contents('http://www.habrahabr.ru/'). Но я уже давно наблюдаю, что, как дело доходит до того, чтобы отправить POST, разработчики используют либо CURL, либо открывают сокеты. Я не считаю, что это плохо или что не надо так делать, просто для решения простых задач можно использовать простые решения.

Я и сам так раньше делал, пока на наткнулся на понятие контекстов потоковых операций в PHP. Контекст позволяет передать дополнительные параметры потоковому обработчику. Для http например, можно сконфигурировать POST-запрос или передать дополнительные заголовки.

file_get_contents() принимает 3 параметром «контекст», который собственно и конфигурирует сам запрос.
Ниже пример такого запроса или RTFM

Читать дальше →

Осторожность с датой не помешает

Время на прочтение1 мин
Количество просмотров969
imageМне для своего проекта, на php, всегда надо точно знать какой номер недели сейчас. Я пользовался командой date() для этого и получал год и номер недели. Например 22 декабря 2008 года была 52 неделя года. просто замечательно все было пока не пришло 29 число. Потому 29 декабря 2008 года идет как неделя 00, что мягко говоря неправильно. Поэтому я окончательно уверился в том, что для точных и калледарных вычислений data вовсе не подходит. Больше всего подходит функция strftime(’%W’);
Читать дальше →

Сравнение PHP IDE

Время на прочтение1 мин
Количество просмотров69K
Вместе с Владимиром Стаценко сделали достаточно подробное сравнение популярных PHP IDE.
В сравнение вошли: Eclipse PDT, Zend Studio, NetBeans и Aptana.

Однозначно лучшую IDE называть не будем: для кого-то главное одно, для другого — иное. Определяйте сами.

HTML-версия таблички с фиксированным заголовком
PDF-версия

UPDATE
Расшарил исходник в Google Docs всем на чтение. Там более свежие данные, где учтены комментарии, а так же добавлена dev-версия NetBeans 7.

Исследование совместимости Zend Framework и Quercus PHP

Время на прочтение5 мин
Количество просмотров1.2K
caucho-whiteЯ давно уже заинтересовался объединением мира Java и PHP, в частности, при помощи замечательного продукта Quercus PHP — порта PHP-интерпретатора вместе с библиотеками на Java. И вот, очередной раз просматривая уже почти готовый архитектурный макет своего движка для браузерных онлайн игр, я обратил внимание на ускользнувшую от меня деталь. Ведь я собирался использовать популярный и мощный фреймворк Zend Framework, запуская его, конечно же, поверх QuercusPHP (детальнее про архитектуру движка я начну рассказывать после нового года). А он, как известно, достаточно требователен к различным расширениям и модулям — в одном проекте, что я сейчас делаю, используя только Zend_Search_Lucene, я встретился с необходимостью подключения ранее не используемых расширений. А значит вполне может быть ситуация, что эта платформа не будет поддерживать все необходимые функции для работы Zend Framework-а. Просмотр Google по поводу совместимости ничего определенного не дал, так что было решено посвятить пару часов собственному исследованию.
Читать дальше →

Quicky обзавелся своим «домом»

Время на прочтение1 мин
Количество просмотров697
для нетерпеливых: quicky-tpl.net
что такое Квики (высокой производительный шаблонизатор с расширением синтаксиса и функционала Smarty) я писал здесь habrahabr.ru/blogs/php/45337, а подкатом история о том, как у квики оказался новый дом =)
Читать дальше →

Smarty обновился до версии 2.6.22

Время на прочтение1 мин
Количество просмотров700
В связи с некоей ошибкой в библиотеке PCRE из PHP 5.2, скоропостижно (спустя всего 15 дней после выхода 2.6.21, в котором, наконец, сподобились ввести method chaining) зарелизилась версия 2.6.22 шаблонизатора Smarty. Проблемы, возникающие при «some versions of PCRE» (ц), решились гениально и просто — выкидыванием нафиг самого вкусного изменения прошлого релиза :)

Официальный CHANGELOG на офсайте.

В защиту PHP

Время на прочтение4 мин
Количество просмотров3.4K
Недавно на stackoverflow была создана тема, в которой автор утверждал, что PHP неважнецкий язык и просил переубедить его. В качестве аргументов он привёл несколько доводов, которые были последовательно прокомментированы другим участником. Вольный перевод сего представлен ниже.
Лично я полностью согласен с отвечающим и думаю, что всем ненавистникам PHP стоит с нижеследующим ознакомиться.

PHP имеет противоречивое именование системных и библиотечных функций. Предсказуемые схемы именования имеют важное значение в любом языке.

Это то, что я люблю и ненавижу одновременно. Однако по своей сути это утверждение верно. Почему некоторые двухсловные функции разделяются подчеркиванием, а некоторые нет? Почему $needle и $haystack иногда меняются местами? Это смешно. Но в конце концов действительно ли это так важно? Моя IDE с автоподстановкой и php.net всегда под рукой. Так что возможно это и является негативным фактором для PHP как языка. Но не мешает мне быть эффективным программистом.
ещё

Yii Framework

Время на прочтение2 мин
Количество просмотров40K
Случайно встретился ещё один PHP-фреймворк. Обычно новые фреймворки я просматриваю мельком, но этот меня очень заинтересовал.

Авторы (Qiang Xue, Xiang Wei Zhuo), возможно, известны вам по довольно гибкому, но и довольно тормознутому фреймворку Prado.

Итак, что же в нём такого интересного?
Читать дальше →

Ближайшие события

Удобное профилирование в Kcachegrind

Время на прочтение1 мин
Количество просмотров8.3K
открыл для себя ядерную фичу при профилировании с xdebug+kcachegrind) (для себя по крайней мере).
Вообщем нужно запустить дебаггер и остановить на первой строке, потом одновременно загрузить в kcachegrind файл, куда xdebug постепенно сливает результат профайлинга. Далее дебаггер нужно сдвинуть на след. строку, потом нажать «reload» в kcachegrind и вауля). Файл профилирования заново загружается и информация обновляется. Весь процесс работы php, шаг за шагом, виден в буквальном смысле как на картинке(вкладка call graph).
PS думаю, есть смысл прикрутить к этому делу анимацию и тогда процесс разработки вообще будет сравним с просмотром сериала)
PSPS негативным моментом была ошибка кэша kcachegrind(насколько я понял), что решилось корректированием файлов настройки в домашней папке.
Проверял на:
ОС Linux
Kcachegrind 0.4.6
Eclipse (PDT)
xdebug 2.0.0-2

PHP 5.2.8 Released

Время на прочтение1 мин
Количество просмотров743
Как все помнят, с релизом PHP 5.2.7 вышла некоторая лажа, версия была убрана, а на официальном сайте рекомендовалось подождать версии 5.2.8. Дождались, товарищи, поздравляю :)

Справедливости ради надо отметить, что, как обнаружил symbix, исходники PHP 5.2.8 выложили в свободный доступ несколько раньше, чем появился официальный релиз.

Хотелось бы, кстати, напомнить, что это не первый крупный косяк с релизом PHP5. В прошлый раз версия PHP 5.1.3 в качестве критического обновления вышла в тот же день, что и PHP 5.1.2.

Так и живём :)

Прекращено распространение PHP 5.2.7

Время на прочтение1 мин
Количество просмотров776
Due to a security bug found in the PHP 5.2.7 release, it has been removed from distribution. The bug affects configurations where magic_quotes_gpc is enabled, because it remains off even when set to on. In the meantime, use PHP 5.2.6 until PHP 5.2.8 is later released.

Краткий пересказ:
В связи с найденным в PHP 5.2.7 багом, касающимся безопасности, было прекращено распространение релиза. Баг заключается в том, что не включается magic_quotes_gpc.
Решение — откатиться на PHP 5.2.6 и ожидать PHP 5.2.8.

Веб-сервисы в теории и на практике для начинающих

Время на прочтение9 мин
Количество просмотров635K

Что такое веб-сервисы?



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

Если посмотреть на веб-сервисы в разрезе стека сетевых протококолов, мы увидим, что это, в классическом случае, не что иное, как еще одна надстройка поверх протокола HTTP.

С другой стороны, если гипотетически разделить Интернет на несколько слоев, мы сможем выделить, как минимум, два концептуальных типа приложений — вычислительные узлы, которые реализуют нетривиальные функции и прикладные веб-ресурсы. При этом вторые, зачастую заинтересованы в услугах первых.

Но и сам Интернет — разнороден, т. е. различные приложения на различных узлах сети функционируют на разных аппаратно-программных платформах, и используют различные технологии и языки.

Чтобы связать все это и предоставить возможность одним приложениям обмениваться данными с другими, и были придуманы веб-сервисы.
Читать дальше →

Контроль скалярных типов в PHP 5

Время на прочтение3 мин
Количество просмотров3.1K
[Обновлено]: Внесены некоторые изменения в код. Спасибо ithilion и LoneCat

Все уже знают что в PHP 5 в аргументах функций можно указывать их тип, за исключением… скалярных типов, т.е.: integer, string, boolean, float, и т.д.

Однако на странице мануала о контроле типов, в комментариях, Daniel L. Wood приводит достаточно интересное решение этой проблемы с помощью класса-обработчика ошибок. Единственный существенный недостаток этого решения — это его производительность.

Ниже я попытаюсь рассказать, как можно оптимизировать это решение, а также стоит ли им пользоваться, в принципе, в продакшн релизах.
Читать дальше →

RESTful PHP — 5 простых советов

Время на прочтение4 мин
Количество просмотров84K
REST (Representational state transfer) — это архитектурный стиль или свод соглашений для web-приложений и сервисов, основанный на манипулировании ресурсами и спецификацией HTTP. Впервые об этом заговорил Рой Филдинг (Roy Fielding) — один из отцов основателей HTTP (Hypertext Transfer Protocol).

Web-приложения зачастую игнорируют спецификацию HTTP и двигаются вперёд используя полюбившиеся возможности: GET и POST, 200 OK и 404 NOT FOUND. Так как используются программируемые web-приложения, со своими собственными API, то решение игнорировать спецификацию HTTP, может создать проблемы в дальнейшем. Как следствие — имеем множество приложений с интерфейсами GET и POST. Например интерфейс удаления пользователя: GET /user/1/delete против POST /user/delete {id=1}; в случае REST можно указать /user/1 это ресурс, а удаление HTTP метод DELETE.
Читать дальше →

PHP, PREG и UTF-8

Время на прочтение6 мин
Количество просмотров16K
В этом посте речь пойдет о работе РНР5 с multibyte строками посредством preg_*() функций.

Заметил интересное положение дел, вобщем-то давным давно описанное в интернете, но актуальное и по сей день (вопрос всплыл всвязи с недавним постом про trim()).
Читать дальше →