2. Что такое SAPI?
SAPI = Server API
От используемого SAPI зависит поведение
PHP:
− Headers
− Sessions
− GET, POST, COOKIE / argc & argv
− HTML errors
6. SAPI для web-сервера
Apache prefork + mod_php – самый
распространенный способ запуска
Nginx + PHP-FPM
Apache + cgi-fcgi – гораздо реже, мало
документации
(http://www.php.net/manual/en/install.unix.lighttpd-14.php и
http://test.fastcgi.com/drupal/node/5?q=node/10 )
7. mod_php
Прост в установке
Идеально подходит для не-highload
Работает в одном процессе с web-сервером
→ большое потребление памяти web-
сервером
Перезагрузка PHP = перезагрузка web-
сервера
Не масштабируется горизонтально (1 web-
сервер – несколько application-серверов)
8. PHP-FPM
Работает в отдельном процессе от web-сервера
Master-process & workers
Гибкое управление процессами:
− Расширенное управление процессами, graceful
stop/start
− Статическое / динамическое управление процессами
fastcgi_finish_request()
Несколько пулов
Accelerated upload
Модификация существующих приложений не требуется
Не “ТРУЪ” FastCGI
9. PHP-FPM: Пулы
Listen on port/socket
user/group
Управление процессами
− Статическое (порождается установленное
количество workers)
− Динамическое (настраивается количество
worker-процессов в пуле: начальное,
максимальное, минимальное и
максимальное в режиме простоя)
13. mod_php vs PHP-FPM
http://darrylclarke.com/2011/12/22/the-switch-
apache-mod_php-to-nginx-php-fpm/
Apache 2 + mod_php Nginx + PHP-FPM
Concurrency Level: 10
Time taken for tests: 17.724
seconds
Complete requests: 1000
Requests per second: 56.42
Concurrency Level: 10
Time taken for tests: 15.892
seconds
Complete requests: 1000
Requests per second: 62.92
CRASHED after 485 requests.
apr_poll: The timeout specified
has expired (70007)
Total of 485 requests completed
load average: 83.73, 30.80,
11.43
Concurrency Level: 100
Time taken for tests: 122.030
seconds
Complete requests: 10000
Requests per second: 81.95
14. mod_php vs PHP-FPM
mod_php – быстрая установка, подходит
для большинства не-highload сайтов
PHP-FPM – более гибкий, управляемый,
масштабируемый
15. CLI
Getopt
$argc, $argv
File handlers: STDIN, STDOUT, STDERR
HTML errors off
Цветной var_dump (XDebug 2.2)
max_execution_time = 0
Output buffering = off
No header()
16. CLI: аргументы командной строки
php -v – версия
php -m – список модулей PHP и Zend
php -i – phpinfo()
php -l – phplint (VCS Hooks, build, CI)
php -r “<php code>”
php -a – интерактивный режим
17. CLI: интерактивный режим
$ php -a
Interactive shell
php > $foo = 1;
php > echo $foo + 1;
2
php > foobar();
PHP Fatal error: Call to undefined function
foobar() in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0