Category Archives: php
Организация очередей на PHP
Решили использовать Pheanstalk, который представляет собой PHP-клиента для Beanstalk. Простой, чётко работает, всё построено на иерархии исключений, т.е. легко применять. Всё сводится к следующему:
1 2 3 4 |
$this->queueManager = new Pheanstalk( '127.0.0.1' ); $this->queueManager->useTube('my_jobs_1')->put( $JobData ); $this->job = $this->queueManager->watch('my_jobs_1')->ignore('default')->reserve( 0 ); // 0 - чтобы не ждать, когда появятся новые джобы (чтобы запускать php-скрипт кроном, а не требовать висения в памяти демоном) $this->queueManager->delete( $this->job ); |
Для работы должен быть запущен демон Beanstalk:
1 |
$ beanstalkd -d |
Ещё почитать. Интересный пример использования Pheanstalk, менее интересный пример.
Новое в PHP 5.4 — трейты (traits)
Вкратце: трейт (аналог mixin в Ruby) — возможность в классе использовать функционал нескольких классов в обход традиционного наследования (по-моему, костыль, чтобы не реализовывать множественное наследование). Всё сводится к новой инструкции use внутри класса, при этом класс, функциональность которого нужно подмешивать. объявляется инструкцией trait.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
trait Singleton { public static function getInstance() { ... } } class A { use Singleton; // ... } class B extends ArrayObject { use Singleton; // ... } // Singleton method is now available for both classes A::getInstance(); B::getInstance(); |
Подробнее: New to PHP 5.4: Traits
Паттерны проектирования на PHP
http://css.dzone.com/books/practical-php-patterns
Использование Twitter-API в PHP
Есть такая библиотека — twitter-async (лицензия — свободное распространение и использование). Из неё нужно включить в проект файлы EpiCurl EpiOAuth EpiSequence EpiTwitter Далее на twitter.com нужно завести приложение. После успешной регистрации Twitter выдаст полезные данные для oAuth-авторизации, нужны из них два: Consumer key и Consumer secret — это авторизационные данные приложения, их нужно сохранить где-нибудь, …
Как правильно установить xdebug для удобной работы
1. Скачиваем расширение — http://www.xdebug.org/download.php (я качаю ts) и копируем в папку с расширениями php. 2. В php.ini пишем
1 2 3 4 5 6 7 8 9 10 11 12 13 |
zend_extension_ts = "<путь-к-папке-ext>/php_xdebug.dll" xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_port=9000 xdebug.remote_host=localhost xdebug.idekey=bullgare ;ну или другой ;это для профилирования xdebug.profiler_enable=Off xdebug.profiler_output_dir="c:\traces" xdebug.profiler_enable_trigger=On xdebug.profiler_output_name = cachegrind.out.%t.%p |
После перезапуска апача phpinfo будет содержать раздел xdebug.
Трассировка PHP-приложений с помощью xdebug
Вот достаточно подробная статья на эту тему. В принципе достаточно написать
1 2 3 4 |
xdebug_start_trace('<Путь-к файлу>.html', XDEBUG_TRACE_HTML); ... ... xdebug_stop_trace(); |
Полезные вещи в phpUnit
Ниже приведён код теста
Генерация моделей в Symfony 1.4
Я пользуюсь Doctrine. Генерация из созданного ранее файла /config/doctrine/schema.yml состоит из трёх команд:
1 2 3 |
symfony doctrine:build --model symfony doctrine:build --sql symfony doctrine:insert-sql |
Если изменялись названия моделей, то надо запустить ещё и
1 |
symfony doctrine:clean-model-files |
Кстати, при генерации может выводиться ошибка There are no tasks defined in the «doctrine» namespace. Нигде толком не написано, отчего она возникает. Возникает она (по крайней мере, у меня, в Windows) …
Внутренняя переадресация в nginx (красивые урлы)
В апаче есть есть замечательная библиотека — mod_rewrite. При переносе проекта на nginx для сохранения интерфейса и структуры сайта необходимо использовать что-то подобное. Соответствующий модуль для nginx называется ngx_http_rewrite_module. Вот пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
location ~ \.php { if ( !-e $request_filename ) { rewrite ^(.+)$ /index.php break; } fastcgi_pass 127.0.0.1:9900; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME <DOCUMENT_ROOT>$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location = /index.php { fastcgi_pass 127.0.0.1:9900 fastcgi_param SCRIPT_FILENAME <DOCUMENT_ROOT>$fastcgi_script_name; include /etc/nginx/fastcgi_params; } |
Почитать: Официальная документация модуля ngx_http_rewrite_module Пример конфигурации Куча примеров
Создание Excel-файла на php
Допустим, есть массив значений $exportData.