Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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