Обновить
128K+

PHP *

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

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

Обработка входящей почты на PHP

Время на прочтение2 мин
Охват и читатели38K
Хочу поделиться рецептом, как совместить php-скрипт и почтовый сервер Postfix для автоматической обработки входящей почты.

С помощью такой связки мы собираем статистику по количеству возвратов bounce-писем:Undelivered Mail Returned to Sender.

На других сайтах, я встречал подобный функционал, например, чтобы публиковать контент, отправив его на закрепленный за пользователем почтовый ящик.

Как это сделать...

Как избежать коллизий при записи в Memcache из PHP

Время на прочтение2 мин
Охват и читатели7.5K
Обычно программисты используют технологии по прямому назначению, но я решил провести эксперимент и попробовать использовать сервер memcached как масштабируемое временное key=value хранилище.
Memcached предназначен для простого кэширования статических данных, потому в нем не предусмотрена система избежания коллизий.

Запись данных


Стандартная ситуация

Предположим, что наше PHP приложение работает на одном сервере, а memcached работает на удаленной машине. Мы без проблем сможем читать и писать в одну и ту же ячейку, потому как приложение не WEB, так что процесс один. Из-за линейности процесса, ему не удастся одновременно записывать разные данные в одну и ту же ячейку.
Два и более процесса

Сегодня нам понадобилось разделить приложение на два сервера и начались проблемы. Возникли коллизии при записи в memcache. Выяснилось, что в 80% случаев приложения пытаются одновременно записать свои данные в одну ячейку. Идеальным решением было бы использование shared memory, но она не масштабируется в отличие о Memcached. В связи с большим объемом кода и предполагаемым временем на переписывание приложений, было принято решение добавить костыль.
Читать дальше →

Синхронизация статуса учетной записи LanBilling и RTU class 4&5

Время на прочтение3 мин
Охват и читатели2.7K
Добрый день, уважаемые хабропользователи.

Возникла задача по синхронизация статуса учетной записи в LanBilling и RTU.
Хочу поделиться с Вами вариантом реализации.
Читать дальше →

Тестирование приложений методом Fuzzing

Время на прочтение4 мин
Охват и читатели14K
Все, кто разрабатывает на php, да и вообще на любом другом языке программирования с нечеткой типизацией, сталкивались с подобной проблемой:
PHP Notice:  Undefined index: test in /var/www/Testing.php on line 171
PHP Notice:  Undefined index: test2 in /var/www/Testing.php on line 171

Или даже такой:
PHP Fatal error:  Cannot use object of type stdClass as array in /var/www/Testing.php on line 171

А как бы проверить метод на всевозможные входные параметры?

Практика прохождения собеседований или как я переехал в столицу

Время на прочтение4 мин
Охват и читатели20K
Привет, %хаброюзер%!

Сегодня я поделюсь с вами своим опытом прохождения собеседований на вакансии PHP-программиста в «белокаменной»Москве.
Читать дальше →

Массивы или Объекты? Хочу коллекции в пхп!

Время на прочтение4 мин
Охват и читатели22K
Чего уж скрывать, мне нравятся объекты, и не нравятся ассоциативные массивы. И когда выбираю из базы некий набор данных, хочется получать набор объектов а не массив массивов. Причем не просто набор объектов, а нужный мне набор и именно так как я этого хочу. Раньше происходила выборка из базы в 3 этапа:
1. получить массив данных из бд
2. пройтись по результату
3. на каждой итерации создать объект и сунуть в другой массив
Ну и собственно вернуть данные наружу. Это не то чтобы напрягало сильно, но чувствовал что должен быть способ проще и удобней. И я его нашел — Коллекции.
Читать дальше →

Пишем PHP extension

Время на прочтение8 мин
Охват и читатели35K
А давайте сегодня взглянем на PHP немного с другой точки зрения, и напишем к нему расширение. Так как на эту тему уже были публикации на Хабре (здесь и здесь), то не будем углубляться в причины того, для чего это может оказаться полезным и для чего может быть использовано на практике. Эта статья расскажет, как собирать простые расширения под Windows с использованием Visual C++ и под Debian с использованием GCC. Также я постараюсь немного осветить работу с PHP-массивами внутри расширений и провести сравнение производительности алгоритма, написанного на native PHP и использующего код, написанный на C.

Писать будем расширение под PHP версии 5.3.

Новый инструмент перевода документации PHP: edit.php.net

Время на прочтение5 мин
Охват и читатели6.1K

Инструмент: edit.php.net


В этом году Yannick Torrès (yannick) создал удобный web-инструмент для перевода документации PHP. edit.php.net позволяет каждому легко и быстро переводить любую страницу.
Читать дальше →

Команде переводчиков документации PHP требуется помощь

Время на прочтение4 мин
Охват и читатели2.8K
Upd: Для нетерпеливых: пошаговые инструкции по созданию переводов.

Русская документация PHP


Добрый день Хабрасообщество!
Как многим известно, вот уже долгое время на php.net нет русской версии документации PHP. Это не значит, что работа по переводу была прекращена, а результаты этой работы пропали.
Дело в том, что перевод документации — добровольное дело, и добровольцев, скажем так, не много. Один-два человека старались удержать перевод на плаву, но все равно в конце концов документация устарела и скорее вводила в заблуждение тех, кто ей пользовался, нежели помогала в освоении языка. Где-то в 2008 г. в команде переводчиков никого не осталось, потом документация устарела настолько, что процесс сборки (куда входит синхронизация с английской версией) сломался и русский мануал исчез с официального сайта до «лучших времен». Медленное и мучительное возрождение документации началось в октябре 2010 г., но с тех пор оно с каждым днем набирает обороты.
Читать дальше →

LiqPay и PHP4 – опыт внедрения и вариант решения проблем

Время на прочтение2 мин
Охват и читатели4.1K
Добрый день Хабра-сообщество!
Столкнулся я с системой платежей liqpay. В принципе, система создает очень приятное первое впечатление.
Но при попытке её интеграции на сайт я столкнулся с несколькими недостатками и проблемами.
Их описанием и решением я хотел бы с вами поделиться.
Читать дальше →

Пространства имён + PHPUnit = 100% покрытие тестами

Время на прочтение2 мин
Охват и читатели3.6K
Давно хотел поделиться с общественностью способом тестировать код, использующий функции для работы с внешней средой: с сокетами, БД, файлами и чем угодно ещё. Сегодня, увидев статью Runkit + PHPUnit = 100% покрытие тестами, решил, что сейчас самое время.
Решение с Runkit красивое, но есть одна проблема — Runkit не распространяется вместе PHP, его надо ставить отдельно. Я же хочу предложить подход, работающий в обычной поставке PHP 5.3+, при одном условии — проект должен использовать пространства имён.
Читать дальше →

Runkit + PHPUnit = 100% покрытие тестами

Время на прочтение7 мин
Охват и читатели3.7K
Здравствуйте, уважаемые коллеги.

Одним из косвенных показателей качества кода считается code coverage — степень покрытия его тестами (как правило, имеются в виду модульные тесты). В большинстве случаев за coverage принимается соотношение количеству строк кода, в котрое попадает управление во время прогона тестов, к общему числу значимых (не являющихся комментарием, пустой строкой, или, например одной фигурной скобкой, обозначающей начало или конец блока) строк кода модуля.

Другим же условием хороших тестов является отсутствие сторонних эффектов (side effects), как например создание/удаление файлов, установка сетевых соединений, запись в порты и т.д.

Однако, когда дело касается модуля, взаимодествующего с внешним миром, эти два требования вступают в противоречие. И ладно, если речь идет о файловых операциях, когда на помощь приходит vfsStream. Но что делать, когда надо тестировать, скажем, прямую работу с сокетами или код, использующий функции curl_*?

Под катом вы найдете мое решение и, в качестве бонуса, еще одну ОПП-обертку к курлу, полностью покрытую тестами.
Читать дальше →

ООП-обертка для PHP lib_curl

Время на прочтение2 мин
Охват и читатели5.1K
Пару лет назад я сделал небольшой персональный проект под названием «Аггрегатор комиксов». Суть проекта в том, что есть куча сайтов с комиксами, на которых нет RSS-лент. И мне было откровенно лень ходить по этим сайтам вручную и проверять апдейты.

Посему был написан примитивный «паучок», обходящий сайты по расписанию, разбирающий содержимое страниц и по разным алгоритмам выковыривающий информацию об апдейтах и складывающий эту информацию в базу, откуда уже другой скрипт, вьюер, генерировал РСС, Атом или Хтмл.

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

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

Прекращение поддержки расширения MySQL в PHP

Время на прочтение1 мин
Охват и читатели13K
Да, вы совершенно правильно прочитали этот заголовок: в прошлые выходные Филип Олсон отправил в список рассылки php-internals предложение о начале постепенного ухода от расширения mysql в будущих версиях php. Это, однако, не означает, что mysql уже не будет в PHP 5.4, но с версии 5.5 уже начнётся работа по обновлению документации и добавлению E_DEPRECATED ошибок к функциям mysql.

В качестве замены текущему нативному расширению предпологается использовать расширение mysqli или PDO, а возможно mysqlnd.

В результате, в будущих версиях PHP5 (начиная с 5.5 или 5.6) вызовы таких функций, как mysql_pconnect, mysql_query и так далее будут пораждать весьма неприятные уведомления E_DEPRECATED, а уже в версии PHP 6 код этих функций будет, скорей всего, полностью удалён из PHP.

Сравнение MemCache и MongoDb для сетевого кэша

Время на прочтение7 мин
Охват и читатели10K
Возникла достаточно неординарная идея: виде средства сетевого кеша взять не MemCache, а MongoDb и сравнить их производительность. Но для представления и сравнения показателей этих двух «механизмов кеширования» взяли еще и другие средства, позволяющие ускорить работу нашего App (APC, RamFS, TmpFS, XCache).
В статье приведены данные и графики сравнения этих механизмов с описанием и рассуждением полученных данных и графиков.
Читать дальше →

Система генерации договоров на PHP с интергацией 1С

Время на прочтение4 мин
Охват и читатели3.6K
Здравствуйте, уважаемые хабровчане. Не так давно пришлось решить следующую задачу. Разработать веб – приложение, для массовой генерации типовых договоров на поставку определенного оборудования или предоставляемых услуг. Все данные по товарам хранится с 1С: управление торговлей. Данное приложение необходимо менеджерам по продажам, так как они часто работают вне офиса, выезжают к клиентам, и составить договор через сайт компании достаточно удобно для них. ТЗ на этом заканчивается. Так как я еще и студент пятого курса, то я решил это же приложение вынести на дипломное проектирование.

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

Сразу оговорюсь, что в данной статье я описываю общие пути решения данной задачи, не углубляясь в дебри реализации.
Читать дальше →

Импорт сообщений из Твиттера

Время на прочтение3 мин
Охват и читатели11K
При разработке сайта может понадобиться получить из Твиттера несколько последних постов (твитов). Это может быть как личная лента обычного пользователя, так и официальная лента компании.

Существует как минимум 2 способа решения данной задачи.
Читать дальше →

HBase + Thrift + PHP

Время на прочтение4 мин
Охват и читатели11K
Видимо так сложилось исторически, но на хабре не очень много статей о HBase, Thrift и тем более о том как их связать для работы с PHP клиентом. Давайте же ликвидируем этот пробел и пройдемся от инсталяции HBase до получения PHP клиентом примитивных данных из HBase.
Читать дальше →

PHP 5.4 alpha1

Время на прочтение1 мин
Охват и читатели1.3K
Это альфа-релиз для подталкивания пользователей к выявлению ошибок, а также для обеспечения, что все новые возможности и нарушения обратной совместимости оценены и документированы до финального выпуска PHP 5.4.0. Пожалуйста, сообщите о результатах в список рассылки QA (php-qa@lists.php.net) и/или в баг-трекер PHP. Бинарники для Windows можно скачать с сайта Windows QA.

Не используйте его на боевых серверах!

Неполный список изменений:
  • Добавлены Traits
  • Добавлено Array dereferencing
  • Добавлена поддержка DTrace
  • Улучшено использование памяти и производительность Zend Engine
  • Расширение sqlite перемещено в PECL (sqlite3 оставлен)

Обратите внимание, что некоторые существующие возможности были удалены:
  • синтаксис break/continue $var
  • ini директивы register_globals, allow_call_time_pass_reference и register_long_arrays
  • session_is_regisitered(), session_registered() и session_unregister()

Это первый релиз, который следует процессу выпуска RFC. Следующая альфа будет выпущена в течение четырех недель. Набор возможностей и API PHP 5.4 не окончательны.

Полный список изменений можно посмотреть в фале NEWS.

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

Генерация приглашений, похожих на инвайты сайта habrahabr

Время на прочтение5 мин
Охват и читатели11K
Скрипт генерирует приглашения для регистрации на сайте в виде картинки 51x51 пикселей формата PNG, написан на PHP, в качестве базы данных использует MySQL. Сделан ради интереса, будет интересен только новичкам.
подробнее