2022.11.11 システム
PHP php.iniの確認と設定
前回のAWS Webサーバーの詳細な設定では、Webサーバーの基本的な設定とOSのタイムゾーンの確認、OSの日本化を行いました。
今回は、php.iniの確認と設定を行っていきたいと思います。
環境
- Amazon Linux 2
- PHP 8.0.20
php.iniの確認
php上で書く、phpinfo()を実行したときと同じです。
[ec2-user@ip-10-0-10-127 /]$ php -i
phpinfo()
PHP Version => 8.0.20
・・・
[ec2-user@ip-10-0-10-127 ~]$
現在設定されているモジュールの確認
のちほどモジュールをインストールすしますが、現在インストールされているモジュールを確認できます。
[ec2-user@ip-10-0-10-127 ~]$ php -m
[PHP Modules]
bz2
・・・
[Zend Modules]
[ec2-user@ip-10-0-10-127 ~]$
php.iniの設定
PHPの設定を行うphp.inは、デフォルトのまま、使用している人もいると思いますが、ここでは必要と思われる基本的な設定を行っていきたいと思います。
php.iniの場所の確認
まずは、ファイルのある場所を確認します。
[ec2-user@ip-10-0-10-127 /]$ sudo find / -name 'php.ini'
/etc/php.ini
上記のphp -iを利用しても確認できます。
「|(パイプ) grep」は便利なので覚えておいた方が良いと思います。
[ec2-user@ip-10-0-10-127 ~]$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
[ec2-user@ip-10-0-10-127 ~]$
/etc/ディレクトリにあることがわかりました。設定ファイルの多くはetcディレクトリにあります。
php.iniのバックアップ
[ec2-user@ip-10-0-10-127 /]$ sudo cp -p /etc/php.ini /etc/php.ini.org
[ec2-user@ip-10-0-10-127 /]$
php.iniファイルをphp.ini.orgという名前でコピーします。-pオプションは、そのファイルのパーミッションやタイムスタンプを保持するオプションです。
php.iniの編集
php.iniをviエディタで開きます。
今回は、開発用の設定(Development Value)で設定していきます。一般に公開するのであれば(Production Value)の設定が推奨されます。
この二つの表記は、php.ini内の各所に指定されています。
[ec2-user@ip-10-0-10-127 /]$ sudo vi /etc/php.ini
php.iniファイルが開かれます。
下記に記載するのは、あくまでも推奨ですので、必要な場合のみ参考にしてください。
viエディタの操作
検索
viエディタで該当箇所を探すには、「/(スラッシュ)」を入力し、引き続き探したいキーワードを入力します。エンターを押した後、「n」キーを押すことで下へ、「Shift+n」キーで上へ、スクロールしながら探せます。
その他
i ・・・ 入力(挿入) / Esc ・・・ 編集終了 / :wq ・・・ 保存して終了 / :q! ・・・ 保存せず終了 / :q ・・・ 終了
PHPのバージョン通知設定 - Miscellaneous
デフォルト設定では、httpヘッダーにPHPのバージョンを表示します。PHPのバージョンが低いままの場合などに、そのまま公開されてしまいます。念のため、offにしておくのが良いと思います。
expose_php = On
↓
expose_php = Off
リソース制限 - Resource Limits
各スクリプトの最大実行時間(秒単位)の設定です。大きなファイルをアップロードやダウンロードする処理を記述する場合などに設定を変更します。0に設定すると無制限となります。
max_execution_time = 30
スクリプトが使用できるメモリの最大値を設定します。重い処理を行う際に、「Fatal error: Allowed memory size of xxxxxx bytes exhausted」などが出る場合に変更します。-1にすると無制限になります。ただしむやみに変更するのではなく、処理の中でメモリを開放する処理なども加えた上で、判断するのが良いと思います。
memory_limit = 128M
エラー処理とログ - Error handling and logging
エラーの表示やログ出力の設定を行えます。本番環境では、エラーが表示されることはセキュリティ上好ましくありません。ただし、エラーが表示されないとデバッグが難しくなります。そのためログの出力設定を行っておくことが重要です。
出力するエラーの種類の設定です。デフォルトでは「E_ALL(すべてのエラーと警告)」のうち、「E_DEPRECATED(上位バージョンでのエラー警告)」及び「E_STRICT(最適なコードの変更の推奨)」を除いたエラーを出力します。
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL
php-fpmモジュールを利用している場合には、エラーログは /var/log/php-fpm/www-error.log に書き込まれます。ログのファイル名は、/etc/php-fpm.d/www.conf で設定します。
商用サーバーなどでは、下記にエラーログの出力場所とファイル名を設定しておくのがよさそうです。
ただし、今回のAmazon Linux2の場合では、設定はせず、コメントアウトのままにしておきます。
;error_log = php_errors.log
↓
error_log = /path/to/php_errors.log
データ処理 - Data Handling
データのデフォルトの取り扱いについて設定します。
下記は一度にPOSTできる データの最大サイズの設定です。デフォルトでは8Mです。0にすると無制限になります。
post_max_size = 8M
念のため、デフォルトの文字コードを確認します。設定はUTF-8です。この設定は、iconvモジュールやmbstringモジュールで、文字コードが未設定の場合にも、適用されます。
default_charset = "UTF-8"
ファイルアップロード
アップロードできるファイルのサイズです。デフォルトでは、アップロードできるファイルサイズは2Mとなっています。WordPressなどの画像で大きいサイズを取り扱う場合などに設定の変更を検討する必要がありそうです。
upload_max_filesize = 2M
一度にアップロードできるファイル数です。デフォルトでは、20個までとなっています。
max_file_uploads = 20
モジュール設定 - Module Settings
Dateモジュールの設定です。日本の標準時に設定します。
[Date]
;date.timezone =
↓
date.timezone = “Asia/Tokyo”
日本語を利用するための設定です。mbstringモジュールのデフォルトの設定を変更します。
;mbstring.language = Japanese
↓
mbstring.language = Japanese
opensslモジュールの設定です。念のための確認ですが、/etc/httpd/conf.d の設定が使用されますので、こちらには記載しないようにします。
;openssl.cafile=
テスト環境と本番環境
php.iniではテスト環境と本番環境では設定を変えるように推奨しています。「Development Value」がテスト(開発)環境用、「Production Value」が本番環境の設定です。
display_errors
PHP のエラー出力と出力場所を設定します。 エラー出力は開発中には便利ですが、本番環境では危険な場合があります。 エラーコードによっては、データベースのユーザー名やパスワードなどの情報が漏えいする可能性があります。 本番環境では、エラーをログに記録することを推奨します。
; display_errors
; Default Value: On
; Development Value: On
; Production Value: Off
error_reporting
E_ALL設定では全てのエラーや警告などが出力され、開発中であれば問題ないのですが、本番環境では、無駄に大量の警告等もふくまれてしまい、ログファイルなどのファイルサイズの肥大化などにつながります。
; error_reporting
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
max_input_time
スクリプトがタイムアプトするまでの時間の設定です。本番環境では時間を制限することを推奨します。
; max_input_time
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
その他
上記以外にも下記のような推奨事項があります。設定を変更している場合には、各項目の指示に従うことを推奨します。
; display_startup_errors
; Default Value: Off
; Development Value: On
; Production Value: Off
; html_errors
; Default Value: On
; Development Value: On
; Production value: On
; log_errors
; Default Value: Off
; Development Value: On
; Production Value: On
; output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; register_argc_argv
; Default Value: On
; Development Value: Off
; Production Value: Off
; request_order
; Default Value: None
; Development Value: "GP"
; Production Value: "GP"
; session.gc_divisor
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
; session.sid_bits_per_character
; Default Value: 4
; Development Value: 5
; Production Value: 5
; short_open_tag
; Default Value: On
; Development Value: Off
; Production Value: Off
; track_errors
; Default Value: Off
; Development Value: On
; Production Value: Off
; variables_order
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS"
まとめ
php.iniも、以前はかなり設定する必要があったように思っていましたが、現在は、他の設定ファイルなどで行うため、あまり設定の必要がなさそうです。
次回は、PHPのモジュールの確認とインストールを行っていきたいと思います。
文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションやWebサイトを構築しています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。
WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします
フライング・ハイ・ワークスの紹介
フライング・ハイ・ワークスは、東京都渋谷区にある2000年3月創業のシステム開発にも対応できるデザインも強いWeb制作・ホームページ制作会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。
実績
デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステムの構築を始め、WordPressのカスタマイズを得意としております。
また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。
500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください!
採用
FHWでWebディレクター、Webデザイナー、Webプログラマーやシステム開発者として働いてみたいと思っていただける方は、下記にて定期的に募集をしておりますので、ぜひ、ご応募ください。
WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします