PHPを少し深堀るよ社内勉強会2019.1.16 @nakamura244
View Slide
agendaなんてもんは無いので、ざっくばらんにいく
makuakeのシステムを多くを支えているPHPですが、どのように動いているか概要だけでも知っていますか?
いきなり簡単にいうと
先人達の資料を拝借させてもらいます
https://www.slideshare.net/do_aki/php-sapi-zendengine3
CGIもう使う人いないと思うのでスルーする。自分が初めてプログラムを書いた時はCGIをよく作ってお金もらってました。。。perlで書いてましたけど1
mod_phpNginxがまだ普及する前はよくあったパターン。Apacheで動かすやつです2
php-fpmたぶん最近の主流。たぶん負荷によるベンチマークするとたぶん大して変わらないけどこっちを選択した方が無難3mod_phpだと1. PHPではない、static fileのresponseにphpをloadしてしまう2. Httpdプロセスのメモリ消費量が多分変わる3. webサーバと分離できる事によるセキュリティ性の担保
いずれにしてもSAPI moduleやSAPIの部分が色々と橋渡しをしてるという感じ
どのSAPIで動いているの?と確認したい場合は
たいがいはどれかです▸ Apache▸ FPM▸ FastCGI▸ CLI
少しネタ
最近、Japan teamが結成された`Nginx`に関してです
Nginx unitというアプリケーションサーバを提供してて、PHPも動かせます。Nginx Onlyで
ん?。。。
どうやってPHPを動かしてるんだ?
初めて目にしたしかもSAPI moduleの記載とかないし
は?マニュアルにない...
色々調べる
php_sapi_nameは`cli-server`何て返ってきた
もうよくわからないどういう事だ....ソースを追ってみる
https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c#L85-L86
結構古い本ですが、この本を少し読むと追いやすい日本語版を見た事はない
https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c#L85-L86phpinfo()のAPI名はここからきていた内部的にはSAPIはcli-serverを使っているっぽい
でも実はそれだけではない
https://github.com/nginx/unit/blob/master/auto/modules/php
https://github.com/nginx/unit/blob/master/auto/modules/phpembed SAPIもつかうの?!
公式のinstallationでもembedパッケージをinstallしろってなってる
たぶん、色々組み合わせた独自SAPIで動かしてるだとおもう
ベンチはとるとphp-fpmのがまだ高パフォーマンスらしい
俺が早くしてやるという方、改善が好きな方はチャンスです
Webからリクエストを受けてphpが動くまでがざっくり説明した時間があれば次
自分達が書いたPHPがサーバの中でどう処理されてるかについて
echo “hello”;LexingCompilationExecution(on zend)helloParsing字句解析構文解析コンパイル実行opcode|opcache
各所深いので色々しゃべりたい気もするが、多分時間ないよね。
時間があれば part2
分時間ないよね。やめときます
ご静聴ありがとうございました