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

phpinfoの写経します

 phpinfoの写経します

PHPerKaigi 2021のLTです。
https://phperkaigi.jp/2021/

書き写してるextension
https://github.com/youkidearitai/study_extension

てきめん tekimen

March 28, 2021
Tweet

More Decks by てきめん tekimen

Other Decks in Programming

Transcript

  1. html版のロゴを表示する部分 the_time = time(NULL); ta = php_localtime_r(&the_time, &tmbuf); php_info_print("<a href=\"http://www.php.net/\"><img

    border=\"0\" src=\""); if (ta && (ta->tm_mon==3) && (ta->tm_mday==1)) { php_info_print(PHP_EGG_LOGO_DATA_URI "\" alt=\"PHP logo\" /></a>"); } else { php_info_print(PHP_LOGO_DATA_URI "\" alt=\"PHP logo\" /></a>"); } ここはPHPのロゴを表示しているところ。 なぜ時刻を取得して条件分岐してるの? localtime_rというC言語のtime.hの関数を使っている この2つの定数はext/standard/info.hにある
  2. if ((flag & PHP_INFO_CREDITS) && !sapi_module.phpinfo_as_text) { php_info_print_hr(); php_print_credits(PHP_CREDITS_ALL &

    ~PHP_CREDITS_FULLPAGE); } INFO_CREDITSの部分です。C言語読み書きできなくて もおかしいと感じませんか? elseがないですよね? textで出力するときどうなる?
  3. 確認してみましょう。 CLIのとき、クレジットが表示されません。 tekimen:~/src/php-src$ php -v && php -r 'phpinfo(INFO_CREDITS);' PHP

    7.4.15 (cli) (built: Feb 24 2021 00:46:46) ( ZTS DEBUG ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies phpinfo() tekimen:~/src/php-src$ これ、いつからこうなっていたと思いますか?
  4. PHP 7.4とPHP 8.0で修正され、次のリリースで反映され ます。 $ php -i textの phpinfo htmlの

    phpinfo 表示されない 表示される 表示される $ php -i は、phpinfoを呼び出すオプションです。 しかし、今回の修正で、クレジットは表示されないままとなります。 表にすると以下のようになります。 (PHP 7.4.17、PHP 8.0.4)
  5. ご清聴ありがとうございました。 18年5ヶ月20日、日数にすると6748日、 バージョンにするとPHP 4.3.0 – PHP 8.0.xまで眠っていたこのバグを見つけたとき、歴史を掘 り起こしたような気持ちになりました。 今回のバグは、携わってきた方々と、変化の目まぐるしいこの業界の中での18年の長さな ど、PHPの歴史に思いを馳せることのできる、貴重な機会でした。

    このレイヤーで 調べ物をすると、昔過ぎて携わった方々も変わっていっていることを実感しま した。背中押してくれた方々に直接お礼言えるのマジで貴重。 ありがとうございました。 ※このポエムはLTに入り切らないので省略予定 tekimen:~/src/php-src$ php -r '$from = new DateTime("2002-08-29"); $to = new DateTime("2021-02-18"); var_dump($from->diff($to)->days);' int(6748) 2002年当時私は15歳です