Slide 1

Slide 1 text

php.iniって何書いているの まきまき 2024/06/21 【非公式】PHPカンファレンス福岡2024・前日Meetup 1

Slide 2

Slide 2 text

まきまき          @_mkmk884 愛媛→京都→小田原 人生3度目の福岡 今はなきスペースワールドで 人生初ジェットコースターを体験した 2

Slide 3

Slide 3 text

php.iniとは 3 ● 起動時に読み込まれるPHPの設定ファイル ● 数百個を超える設定値(ディレクティブ)がある

Slide 4

Slide 4 text

● php.iniの場所 ○ phpinfo() ■ Loaded Configuration File ○ CLIで $ php --ini をする ● “調べたい環境の”php.iniを確認することが重要 php.iniとは 4

Slide 5

Slide 5 text

php.iniファイル 5

Slide 6

Slide 6 text

php.iniで設定できること 6 ● エラー出力 ● パフォーマンスとリソース制限 ● データベース設定 ● セッション ● セキュリティ ● 文字コード周り …

Slide 7

Slide 7 text

きょう話したいこと 7 開発していたときにうまくいかない原因に、php.iniの設定が 絡んでいて、ドツボにはまった よく見る設定&はまった設定を紹介します!!!

Slide 8

Slide 8 text

クイズ!!!どの設定値? 8 \ デーデン!!!!! / ディレクティブ

Slide 9

Slide 9 text

第1問【初級】 メモリエラー(Allowed memory size of~)が出力されました あなたは、メモリを上げたらとりあえず動くのか、 どのくらいの時間がかかるのかを確かめたいです どの設定値を確認しますか? 9 \ チッチッチッ……⏰ / ① max_input_time ② memory_limit ③ upload_max_filesize

Slide 10

Slide 10 text

例 第1問【初級】 答え 10 memory_limit ● 確保できる最大メモリをバイト数で指定 ● デフォルトは128MB memory_limit = -1 ● -1を指定で無制限

Slide 11

Slide 11 text

第2問【初級】 11 あなたは、ログにNoticeが出てないことに気づきました 出力レベルを変えたいと思っています どの設定値を確認しますか? \ チッチッチッ……⏰ / ① error_reporting ② display_errors ③ error_log

Slide 12

Slide 12 text

第2問【初級】 答え 12 error_reporting ● “見えるようにする”エラーをレベルで指定できる ● 定義されている整数か定数名で指定 エラーって 16種類あんねん E_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_STRICT など

Slide 13

Slide 13 text

以前 最新 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 第2問【初級】 答え 13 error_reporting ~で、見えないようにするエラーレベルを指定 E_ALL

Slide 14

Slide 14 text

第3問【上級】 14 \ チッチッチッ……⏰ / ハマった人→ ① post_max_size ② max_input_vars ③ default_charset あなたは、大量の数の値をPOSTする処理を書いたところ 本質ではなさそうなところで落ちました どの設定値を確認しますか?

Slide 15

Slide 15 text

例 ● 配列の要素もカウント 第3問【上級】 答え 15 max_input_vars ● 入力変数を最大で何個まで受け付けるかを指定 ● デフォルトは1000個 max_input_vars = 2000

Slide 16

Slide 16 text

● 設定した数を超える入力変数があった場合 ○ E_WARNINGが発生 ○ それ以降の入力変数はリクエストから削除される 第3問【上級】 答え 16 max_input_vars ● ハッシュの衝突を悪用したサービス不能攻撃を受ける 可能性を軽減できる

Slide 17

Slide 17 text

第4問【上級】 大量の文字列をpreg_matchで正規表現にマッチさせた ところ、A環境では動くのにB環境ではエラーが発生しました どの設定値を確認しますか? 17 \ チッチッチッ……⏰ / ハマった人に 遭遇した人→ ① internal_encoding ② mbstring.detect_order ③ pcre.backtrack_limit

Slide 18

Slide 18 text

第4問【上級】 答え 18 pcre.backtrack_limit ● PCREのバックトラック処理の制限値 ○ Perl Compatible Regular Expressions:Perl互換の正規表現ライブラリ ○ バックトラック:正規表現エンジンが一致するかどうかを確認するため に文字列の一部に戻って再試行するプロセス ● デフォルトは1000000 ○ PHP < 5.3.7 ではデフォルトが100000

Slide 19

Slide 19 text

第4問【上級】 答え 19 pcre.backtrack_limit よくある実際のエラーメッセージ Warning: preg_match(): Compilation failed: regular expression is too large at offset ...

Slide 20

Slide 20 text

設定値があることで、リソースを枯渇させるのを防いだり、 サービスが攻撃を受ける可能性を軽減できたりする 直面し、調べて思ったこと 20 php.iniの設定値を変えなきゃ動かないものを生み出した時点 で負け ロジックや仕様を見直そう

Slide 21

Slide 21 text

詳しくはこちらの発表をぜひ… 21 https://speakerdeck.com/uzulla/php-dot-inifalsehua php.iniの話 / uzulla