PHP: SAPI
Стандартные PHP SAPI и экзотика
Что такое SAPI?

SAPI = Server API

От используемого SAPI зависит поведение
PHP:
− Headers
− Sessions
− GET, POST, COOKI...
SAPI, поддерживаемые PHP

apache* (apache, apache2handler,
apache2filter)

cli

fpm-fcgi (php-fpm)

cgi

Cgi-fcgi

e...
SAPI, поддерживаемые PHP

Aolserver

Caudium

Continuity

Isapi

Litespeed

Milter

Nsapi

Phttpd

Pi3web

Roxen...
Какое SAPI используется?

php_sapi_name()

PHP_SAPI

http://www.php.net/php_sapi_name –
некоторые из SAPI
SAPI для web-сервера

Apache prefork + mod_php – самый
распространенный способ запуска

Nginx + PHP-FPM

Apache + cgi-f...
mod_php

Прост в установке

Идеально подходит для не-highload

Работает в одном процессе с web-сервером
→ большое потре...
PHP-FPM

Работает в отдельном процессе от web-сервера

Master-process & workers

Гибкое управление процессами:
− Расшир...
PHP-FPM: Пулы

Listen on port/socket

user/group

Управление процессами
− Статическое (порождается установленное
количе...
PHP-FPM: Пулы

Max requests per worker (memory leaks)

Chroot

Slow requests log

Мониторинг
− http://example.com/stat...
PHP-FPM: /status
Text, JSON, HTML, XML:
pool: www
process manager: dynamic
start time: 09/May/2012:18:28:59 +0300
start si...
mod_php vs PHP-FPM
http://jayant7k.blogspot.com/2011/10/nginx-with-
php-fpm-versus-apache-with.html
Apache 2 + mod_php Ngi...
mod_php vs PHP-FPM
http://darrylclarke.com/2011/12/22/the-switch-
apache-mod_php-to-nginx-php-fpm/
Apache 2 + mod_php Ngin...
mod_php vs PHP-FPM

mod_php – быстрая установка, подходит
для большинства не-highload сайтов

PHP-FPM – более гибкий, уп...
CLI

Getopt

$argc, $argv

File handlers: STDIN, STDOUT, STDERR

HTML errors off

Цветной var_dump (XDebug 2.2)

max...
CLI: аргументы командной строки

php -v – версия

php -m – список модулей PHP и Zend

php -i – phpinfo()

php -l – php...
CLI: интерактивный режим
$ php -a
Interactive shell
php > $foo = 1;
php > echo $foo + 1;
2
php > foobar();
PHP Fatal error...
PHP: экзотика

HipHop for PHP

phpDaemon

Phalanger

Phpc (R.I.P.?)

Roadsend PHP (R.I.P.)
HipHop for PHP
https://github.com/facebook/hiphop-php

True FastCGI

Компилируемый

Многопоточный

Поддерживает PHP 5.3
HipHop for PHP
https://github.com/facebook/hiphop-php

Поддерживает мало extensions

Слабое развитие (236 открытых багов...
phpDaemon
https://github.com/kakserpom/phpdaemon

Использует libevent

“ТруЪ” FastCGI

Zend Framework 1 quickstart app ...
Phalanger
http://www.php-compiler.net/

Компилируется в .NET приложение

Работает в .NET 4 и Mono 2.10

Native extensio...
Phalanger

Не поддерживает PHP 5.3, PDO, SPL,
Reflection

Native extensions работают только в
Windows

Большинство Mana...
phc
http://phpcompiler.org/

Использует стандартный embed SAPI

Не работает с PHP 5.3

R.I.P.? http://blog.paulbiggar.c...
Вопросы?
Upcoming SlideShare
Loading in …5
×

PHP: SAPI

1,165 views

Published on

Стандартные PHP SAPI и экзотика. Старая презентация 2012 года

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,165
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PHP: SAPI

  1. 1. PHP: SAPI Стандартные PHP SAPI и экзотика
  2. 2. Что такое SAPI?  SAPI = Server API  От используемого SAPI зависит поведение PHP: − Headers − Sessions − GET, POST, COOKIE / argc & argv − HTML errors
  3. 3. SAPI, поддерживаемые PHP  apache* (apache, apache2handler, apache2filter)  cli  fpm-fcgi (php-fpm)  cgi  Cgi-fcgi  embed
  4. 4. SAPI, поддерживаемые PHP  Aolserver  Caudium  Continuity  Isapi  Litespeed  Milter  Nsapi  Phttpd  Pi3web  Roxen  Thttpd  webjames  Tux
  5. 5. Какое SAPI используется?  php_sapi_name()  PHP_SAPI  http://www.php.net/php_sapi_name – некоторые из SAPI
  6. 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. 7. mod_php  Прост в установке  Идеально подходит для не-highload  Работает в одном процессе с web-сервером → большое потребление памяти web- сервером  Перезагрузка PHP = перезагрузка web- сервера  Не масштабируется горизонтально (1 web- сервер – несколько application-серверов)
  8. 8. PHP-FPM  Работает в отдельном процессе от web-сервера  Master-process & workers  Гибкое управление процессами: − Расширенное управление процессами, graceful stop/start − Статическое / динамическое управление процессами  fastcgi_finish_request()  Несколько пулов  Accelerated upload  Модификация существующих приложений не требуется  Не “ТРУЪ” FastCGI
  9. 9. PHP-FPM: Пулы  Listen on port/socket  user/group  Управление процессами − Статическое (порождается установленное количество workers) − Динамическое (настраивается количество worker-процессов в пуле: начальное, максимальное, минимальное и максимальное в режиме простоя)
  10. 10. PHP-FPM: Пулы  Max requests per worker (memory leaks)  Chroot  Slow requests log  Мониторинг − http://example.com/status − http://example.com/ping
  11. 11. PHP-FPM: /status Text, JSON, HTML, XML: pool: www process manager: dynamic start time: 09/May/2012:18:28:59 +0300 start since: 1866 accepted conn: 21 listen queue: 0 max listen queue: 0 listen queue len: 128 idle processes: 3 active processes: 1 total processes: 4 max active processes: 2 max children reached: 0
  12. 12. mod_php vs PHP-FPM http://jayant7k.blogspot.com/2011/10/nginx-with- php-fpm-versus-apache-with.html Apache 2 + mod_php Nginx + PHP-FPM Concurrency : 100 Load : 0.25 Transactions: 118688 hits Availability: 100.00 % Elapsed time: 599.55 secs Concurrency : 100 Load : 0.10 Transactions: 118171 hits Availability: 100.00 % Elapsed time: 599.56 secs concurrency : 1000 Load : 58 Transactions: 45454 hits Availability: 96.86 % Elapsed time: 36.27 secs siege aborted due to excessive socket failure concurrency : 1000 Load : 48 Transactions: 941105 hits Availability: 99.98 % Elapsed time: 599.43 secs
  13. 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. 14. mod_php vs PHP-FPM  mod_php – быстрая установка, подходит для большинства не-highload сайтов  PHP-FPM – более гибкий, управляемый, масштабируемый
  15. 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. 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. 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
  18. 18. PHP: экзотика  HipHop for PHP  phpDaemon  Phalanger  Phpc (R.I.P.?)  Roadsend PHP (R.I.P.)
  19. 19. HipHop for PHP https://github.com/facebook/hiphop-php  True FastCGI  Компилируемый  Многопоточный  Поддерживает PHP 5.3
  20. 20. HipHop for PHP https://github.com/facebook/hiphop-php  Поддерживает мало extensions  Слабое развитие (236 открытых багов!)
  21. 21. phpDaemon https://github.com/kakserpom/phpdaemon  Использует libevent  “ТруЪ” FastCGI  Zend Framework 1 quickstart app работает хорошо  Написан на PHP  “Страшно” использовать в production: патченный runkit, нет данных о стабильности  Неудобно отлаживать
  22. 22. Phalanger http://www.php-compiler.net/  Компилируется в .NET приложение  Работает в .NET 4 и Mono 2.10  Native extensions (DLL-файлы для PHP)  Managed extensions (.NET-реализация)
  23. 23. Phalanger  Не поддерживает PHP 5.3, PDO, SPL, Reflection  Native extensions работают только в Windows  Большинство Managed extensions платные
  24. 24. phc http://phpcompiler.org/  Использует стандартный embed SAPI  Не работает с PHP 5.3  R.I.P.? http://blog.paulbiggar.com/archive/a- rant-about-php-compilers-in-general-and- hiphop-in-particular/
  25. 25. Вопросы?

×