Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPを少し深堀るよ.pdf

 PHPを少し深堀るよ.pdf

tsuyoshi nakamura

January 16, 2019
Tweet

More Decks by tsuyoshi nakamura

Other Decks in Technology

Transcript

  1. PHPを少し深堀るよ
    社内勉強会2019.1.16 @nakamura244

    View Slide

  2. agendaなんてもんは無いの
    で、ざっくばらんにいく

    View Slide

  3. makuakeのシステムを多くを
    支えているPHPですが、
    どのように動いているか概要
    だけでも知っていますか?

    View Slide

  4. いきなり簡単にいうと

    View Slide

  5. 先人達の資料を拝借させても
    らいます

    View Slide

  6. https://www.slideshare.net/do_aki/php-sapi-zendengine3

    View Slide

  7. https://www.slideshare.net/do_aki/php-sapi-zendengine3

    View Slide

  8. https://www.slideshare.net/do_aki/php-sapi-zendengine3

    View Slide

  9. https://www.slideshare.net/do_aki/php-sapi-zendengine3

    View Slide

  10. CGI
    もう使う人いないと思うのでスルーする。
    自分が初めてプログラムを書いた時はCGIをよく作ってお金も
    らってました。。。perlで書いてましたけど
    1

    View Slide

  11. mod_php
    Nginxがまだ普及する前はよくあったパターン。
    Apacheで動かすやつです
    2

    View Slide

  12. php-fpm
    たぶん最近の主流。たぶん負荷によるベンチ
    マークするとたぶん大して変わらないけどこっ
    ちを選択した方が無難
    3
    mod_phpだと
    1. PHPではない、static fileのresponseにphpをloadしてし
    まう
    2. Httpdプロセスのメモリ消費量が多分変わる
    3. webサーバと分離できる事によるセキュリティ性の担保

    View Slide

  13. いずれにしてもSAPI module
    やSAPIの部分が色々と橋渡
    しをしてるという感じ

    View Slide

  14. どのSAPIで動いているの?と
    確認したい場合は

    View Slide

  15. View Slide

  16. View Slide

  17. たいがいはどれかです
    ▸ Apache
    ▸ FPM
    ▸ FastCGI
    ▸ CLI

    View Slide

  18. 少しネタ

    View Slide

  19. 最近、Japan teamが結
    成された`Nginx`に関し
    てです

    View Slide

  20. View Slide

  21. View Slide

  22. Nginx unitというアプリケー
    ションサーバを提供してて、
    PHPも動かせます。
    Nginx Onlyで

    View Slide

  23. ん?。。。

    View Slide

  24. どうやってPHPを動かしてるんだ?

    View Slide

  25. View Slide

  26. 初めて目にした
    しかもSAPI moduleの記載とかないし

    View Slide

  27. は?
    マニュアルにない...

    View Slide

  28. 色々調べる

    View Slide

  29. php_sapi_nameは
    `cli-server`何て返ってき

    View Slide

  30. もうよくわからない
    どういう事だ....
    ソースを追ってみる

    View Slide

  31. https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c#L85-L86

    View Slide

  32. 結構古い本ですが、こ
    の本を少し読むと追い
    やすい
    日本語版を見た事はな

    View Slide

  33. https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c#L85-L86
    phpinfo()のAPI名はここ
    からきていた
    内部的にはSAPIは
    cli-serverを使ってい
    るっぽい

    View Slide

  34. View Slide

  35. でも実はそれだけではな

    View Slide

  36. https://github.com/nginx/unit/blob/master/auto/modules/php

    View Slide

  37. https://github.com/nginx/unit/blob/master/auto/modules/php
    embed SAPIもつかう
    の?!

    View Slide

  38. View Slide

  39. View Slide

  40. 公式のinstallationでも
    embedパッケージを
    installしろってなってる

    View Slide

  41. たぶん、色々組み合わせた独
    自SAPIで動かしてるだとおも

    View Slide

  42. ベンチはとるとphp-fpmのが
    まだ高パフォーマンスらしい

    View Slide

  43. 俺が早くしてやるという方、改
    善が好きな方はチャンスです

    View Slide

  44. Webからリクエストを受けて
    phpが動くまでがざっくり説明
    した
    時間があれば次

    View Slide

  45. 自分達が書いたPHPがサー
    バの中でどう処理されてるか
    について

    View Slide

  46. echo “hello”;
    Lexing
    Compilation
    Execution(on zend)
    hello
    Parsing
    字句解析
    構文解析
    コンパイル
    実行
    opcode|opcache

    View Slide

  47. 各所深いので色々しゃべりた
    い気もするが、多分時間ない
    よね。

    View Slide

  48. 時間があれば part2

    View Slide

  49. View Slide

  50. View Slide

  51. 分時間ないよね。やめときま

    View Slide

  52. ご静聴ありがとうございました

    View Slide