PHPの再起動方法について

採用はこちら

PHPの設定を変更したあと、「PHPを再起動したい」と考えることがあります。

ただし、厳密にはPHPそのものを単独で再起動するとは限りません。

PHPは利用している環境によって、PHP-FPM、ApacheのPHPモジュール、FastCGI、CLI、Dockerコンテナなど、さまざまな方法で実行されています。

そのため、PHPを再起動するときは、実際にPHPを動かしているサービスやWebサーバーを再起動・再読み込みする必要があります。

代表的な環境には、次のようなものがあります。

  • Nginx+PHP-FPM
  • Apache+PHP-FPM
  • Apache+PHPモジュール
  • PHP CLI
  • Docker
  • XAMPPやWampServer
  • macOS+Homebrew

利用環境によって操作方法が異なるため、まずは自分のサーバーでPHPがどのように実行されているのかを確認することが重要です。

目次

PHP-FPMを再起動する方法

PHP-FPMを利用している場合は、PHP-FPMのサービスを再起動します。

Linuxサーバーでは、systemctlを使用する方法が一般的です。

UbuntuなどでPHP-FPMを再起動する

UbuntuなどでPHP-FPMを使用している場合は、次のようなコマンドを実行します。

sudo systemctl restart php8.4-fpm

PHPのバージョンによって、サービス名は異なります。

たとえば、環境によっては次のようになります。

sudo systemctl restart php8.2-fpm
sudo systemctl restart php8.3-fpm
sudo systemctl restart php8.4-fpm
sudo systemctl restart php8.5-fpm

ただし、実際のサービス名はLinuxディストリビューションやPHPのインストール方法によって異なる場合があります。

そのため、PHPのバージョンだけを見てサービス名を決めつけず、実際に稼働しているサービスを確認してから操作するのが安全です。

PHP-FPMの状態を確認する

再起動後は、PHP-FPMが正常に起動しているか確認しましょう。

たとえばPHP 8.4なら、次のようにします。

sudo systemctl status php8.4-fpm

正常に稼働していれば、一般的には次のような表示を確認できます。

active (running)

エラーが表示されている場合は、PHP-FPMの設定ファイルやログを確認する必要があります。

PHP-FPMを停止する

PHP-FPMを停止する場合は、次のコマンドを使用します。

sudo systemctl stop php8.4-fpm

PHP-FPMを起動する

停止しているPHP-FPMを起動する場合は、次のようにします。

sudo systemctl start php8.4-fpm

PHP-FPMをリロードする

設定変更を反映したい場合は、完全な再起動ではなく、リロードを利用できることもあります。

sudo systemctl reload php8.4-fpm

restartはサービスを停止してから起動し直す処理です。

一方、reloadはサービスが対応している場合に、プロセス全体を完全停止させず設定を再読み込みします。

PHP-FPMではgraceful reloadとして動作する構成が一般的ですが、具体的な処理内容はOSやPHPパッケージ、systemdのサービス定義によって異なる場合があります。

本番環境では、サービスへの影響を抑えたい場合にreloadを検討するとよいでしょう。

PHP-FPMのサービス名を確認する方法

どのPHP-FPMを再起動すればよいのか分からない場合は、実際に稼働しているPHP関連サービスを調べます。

systemctlでPHP関連サービスを調べる

次のようなコマンドを使用できます。

systemctl list-units --type=service | grep php

たとえば、

php8.4-fpm.service

と表示された場合は、

sudo systemctl restart php8.4-fpm

と操作できます。

インストールされているサービスを幅広く調べたい場合は、次の方法もあります。

systemctl list-unit-files | grep php

php -vだけでは判断できない場合がある

PHPのバージョンを確認するときには、

php -v

がよく利用されます。

ただし、このコマンドで確認できるのは基本的にCLI版PHPのバージョンです。

たとえば、

PHP 8.3.x

と表示されても、Webサイト側ではPHP 8.4のPHP-FPMが利用されている可能性があります。

そのため、

php -v

の結果だけを見てPHP-FPMのサービス名を判断するのは避けた方が安全です。

Webサイト側で利用しているPHP-FPMのバージョンやサービスを確認してから再起動しましょう。

ApacheでPHPを利用している場合の再起動方法

Apache環境では、PHPの実行方法によって操作対象が変わります。

ApacheのPHPモジュールを利用している場合

ApacheにPHPモジュールを組み込んで動作させている場合は、PHP-FPMではなくApacheを再起動します。

Ubuntuなどでは、次のようにします。

sudo systemctl restart apache2

または、

sudo systemctl restart apache2.service

とします。

Apache自体のコマンドを利用して再起動する方法もあります。

sudo apachectl -k restart

Apacheをgraceful reloadする場合

現在処理している接続への影響をできるだけ抑えながら設定を反映したい場合は、graceful restartを使用できます。

sudo apachectl -k graceful

systemd環境であれば、

sudo systemctl reload apache2

を利用できる場合もあります。

ただし、Apache+PHP-FPM構成の場合は、PHP側の設定変更についてはPHP-FPMを再起動・リロードする必要があります。

NginxでPHPを利用している場合の再起動方法

Nginxでは、PHPをNginx内部で直接実行するのではなく、PHP-FPMと組み合わせる構成が一般的です。

構成を簡単に表すと、次のようになります。

Nginx
 ↓
PHP-FPM
 ↓
PHP

PHP側の設定だけを変更した場合

php.iniなどPHP側の設定を変更したのであれば、基本的にはPHP-FPMを再起動・リロードします。

sudo systemctl restart php8.4-fpm

または、

sudo systemctl reload php8.4-fpm

とします。

PHPの設定だけを変更したのであれば、Nginxまで再起動する必要は通常ありません。

Nginxの設定を変更した場合

nginx.confやサイトごとの設定ファイルを変更した場合は、Nginx側の設定を再読み込みします。

まず、設定ファイルに問題がないか確認します。

sudo nginx -t

問題がなければ、次のようにリロードできます。

sudo systemctl reload nginx

必要に応じて再起動する場合は、

sudo systemctl restart nginx

を使用します。

CentOS・Rocky Linux・AlmaLinuxでPHPを再起動する方法

CentOS、Rocky Linux、AlmaLinuxなどのRed Hat系Linuxでは、PHP-FPMのサービス名が、

php-fpm

となっている場合があります。

PHP-FPMを再起動する

sudo systemctl restart php-fpm

PHP-FPMの状態を確認する

sudo systemctl status php-fpm

PHP-FPMを起動する

sudo systemctl start php-fpm

PHP-FPMを停止する

sudo systemctl stop php-fpm

ただし、Remi Repositoryなどを利用して複数バージョンのPHPを導入している場合は、サービス名が異なることがあります。

そのため、実際のPHP-FPMサービス名を確認してから操作しましょう。

macOSでPHPを再起動する方法

macOSでHomebrewを使ってPHPをインストールしている場合は、brew servicesからPHPを管理できます。

Homebrew版PHPを再起動する

通常は次のようにします。

brew services restart php

バージョンを指定してインストールしている場合は、

brew services restart php@8.4

などとします。

Homebrewのサービスを確認する

現在Homebrewで管理されているサービスは、次のコマンドで確認できます。

brew services list

PHPのサービス名が分からない場合にも便利です。

WindowsでPHPを再起動する方法

Windowsでは、PHPの導入方法によって再起動方法が異なります。

特にXAMPP、WampServer、Laragonなどを使用している場合は、それぞれの管理画面からWebサーバーを再起動する方法が一般的です。

XAMPPでPHPを再起動する

XAMPPでApache+PHPを利用している場合は、XAMPP Control PanelからApacheを停止・起動します。

Apache → Stop
Apache → Start

Apacheを再起動することで、PHPの設定も新しく読み込まれます。

IISやFastCGIを利用している場合

Windows ServerでIIS+FastCGIなどを利用している場合は、XAMPPとは操作方法が異なります。

PHPの実行方式を確認したうえで、対象となるWebサーバーやFastCGIプロセスを再起動する必要があります。

Docker環境でPHPを再起動する方法

Dockerコンテナ内でPHPを動かしている場合は、PHPサービスではなくPHPを実行しているコンテナを再起動する方法があります。

PHPコンテナを確認する

まず、現在稼働しているコンテナを確認します。

docker ps

たとえばPHPコンテナの名前が、

php-app

だった場合は、次のように再起動できます。

docker restart php-app

Docker Composeを利用している場合

Docker ComposeでPHPサービス名がphpの場合は、

docker compose restart php

とします。

compose.ymlを変更した場合は注意する

compose.ymlやDockerイメージの構成そのものを変更した場合、単純なrestartでは変更内容が反映されないことがあります。

その場合は、

docker compose up -d

などによってコンテナを再作成する必要があります。

Docker環境では、何を変更したのかによってrestartだけでよいのか、コンテナの再作成が必要なのかを判断しましょう。

php.iniを変更したらPHPの再起動は必要?

PHPを再起動する理由として特に多いのが、php.iniを変更した場合です。

たとえば、

memory_limit = 512M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

などを変更するケースがあります。

PHP-FPMでは再読み込みが必要

PHP-FPMは常駐プロセスとして動作しているため、php.iniを変更したあとには、基本的にPHP-FPMを再起動またはリロードして設定を反映させます。

sudo systemctl reload php8.4-fpm

または、

sudo systemctl restart php8.4-fpm

を実行します。

Apacheモジュール版ではApacheを再読み込みする

ApacheのPHPモジュールを使用している場合は、Apache側でPHPの設定が読み込まれるため、Apacheを再起動・再読み込みします。

sudo systemctl restart apache2

CLI版PHPでは通常再起動は不要

コマンドラインから、

php sample.php

のようにPHPを実行している場合は、通常、コマンドを実行するたびにPHPが起動します。

そのため、一般的なCLI利用ではPHPサービスを再起動する必要はありません。

ただし、PHPで長時間稼働するワーカープロセスなどを動かしている場合は、そのプロセス自体の再起動が必要になることがあります。

php.iniの場所を確認する方法

設定を変更したのに反映されない場合は、異なるphp.iniを編集している可能性があります。

CLI版PHPのphp.iniを確認する

次のコマンドを使用できます。

php --ini

または、

php -i | grep "Loaded Configuration File"

とします。

ただし、ここで確認できるのは基本的にCLI版PHPの設定です。

Webサイト側のphp.iniを確認する

Webサイトで利用しているPHPの設定を確認するには、phpinfo()を利用する方法があります。

<?php
phpinfo();

表示されたページの、

Loaded Configuration File

を確認すると、実際に読み込まれているphp.iniを確認できます。

phpinfo()は確認後に削除する

phpinfo()にはPHPのバージョンや設定内容、サーバー情報など、多くの情報が表示されます。

公開サーバーにphpinfo()を設置した場合は、確認後にファイルを削除することをおすすめします。

セキュリティ上、不要なサーバー情報を公開したままにしないことが重要です。

CLI版とPHP-FPM版ではphp.iniが異なる場合がある

Linuxでは、CLI版PHPとPHP-FPMで異なる設定ファイルを使用することがあります。

たとえばUbuntu系では、

/etc/php/8.4/cli/php.ini

と、

/etc/php/8.4/fpm/php.ini

のように分かれている場合があります。

Webサイトの設定を変更したいのに、

/etc/php/8.4/cli/php.ini

だけを編集しても、PHP-FPMで動いているWebサイトには反映されません。

Webサイト側で実際に使用されているPHP設定ファイルを確認することが重要です。

PHPを再起動する前に設定エラーを確認する

本番サーバーでは、設定を変更した直後にいきなりサービスを再起動するのは避けた方が安全です。

設定ファイルに記述ミスがあると、再起動後にサービスが正常に立ち上がらなくなる可能性があるためです。

PHP-FPMの設定を確認する

PHP-FPMでは、環境によって次のようなコマンドで設定テストができます。

php-fpm8.4 -t

環境によっては、

php-fpm -t

となる場合もあります。

PHP-FPMの実行ファイル名は環境ごとに異なるため、利用しているサーバーに合わせて確認してください。

Nginxの設定を確認する

Nginxでは、

sudo nginx -t

を使用します。

問題がなければ、Nginxをリロードできます。

sudo systemctl reload nginx

Apacheの設定を確認する

Apacheでは、

sudo apachectl configtest

を使用できます。

設定に問題がなければ、Apacheを再起動・再読み込みします。

本番環境では、

設定確認
↓
reloadまたはrestart
↓
サービス状態の確認

という流れで作業するのが安全です。

PHPを再起動しても設定が反映されない原因

PHPを再起動したにもかかわらず、設定変更が反映されないことがあります。

その場合は、次のような原因を確認しましょう。

違うPHP-FPMを再起動している

複数バージョンのPHPがインストールされているサーバーでは、Webサイトが使用しているPHPとは別のPHP-FPMを再起動している可能性があります。

たとえばWebサイトがPHP 8.4を利用しているのに、

sudo systemctl restart php8.3-fpm

と実行しても、対象サイトには反映されません。

実際に利用しているPHP-FPMのサービスを確認しましょう。

違うphp.iniを編集している

CLI版とFPM版のphp.iniが分かれている場合、CLI用の設定ファイルを編集してもWebサイトには反映されません。

たとえば、

/etc/php/8.4/cli/php.ini

ではなく、

/etc/php/8.4/fpm/php.ini

を編集する必要があるケースがあります。

OPcacheの影響を受けている

PHPでは、処理速度を向上させるためにOPcacheが利用されていることがあります。

PHP-FPMを再起動すると、通常はそのPHP-FPMインスタンスが使用しているOPcacheも再初期化されます。

そのため、PHPコードの変更が反映されない場合にPHP-FPMの再起動で解決するケースがあります。

ただし、キャッシュ構成によって状況は異なるため、OPcache以外のキャッシュも利用している場合は、それぞれ確認する必要があります。

Webサーバー側の設定を変更している

PHP-FPMを再起動しても、NginxやApacheの設定変更は自動的には反映されません。

たとえば、

nginx.conf

やApacheのVirtualHost設定などを変更した場合は、Webサーバー側も再読み込みする必要があります。

restartとreloadの違い

PHP-FPMなどのサービスを操作するときは、restartreloadの違いを理解しておくことが重要です。

restartとは

restartは、サービスのプロセスを停止してから起動し直す処理です。

たとえば、

sudo systemctl restart php8.4-fpm

とします。

設定変更を確実に反映したい場合や、プロセスを完全に起動し直したい場合に利用されます。

reloadとは

reloadは、そのサービスが対応している場合に、プロセス全体を完全停止させず設定を再読み込みする処理です。

sudo systemctl reload php8.4-fpm

などとします。

PHP-FPMではgraceful reloadとして動作する構成が一般的です。

ただし、systemctl reloadが具体的にどのような処理を行うかは、OSやディストリビューション、PHPパッケージのsystemd設定などによって異なる場合があります。

そのため、すべての環境でまったく同じ動作をするとは限りません。

PHP-FPMのgraceful reloadについて

PHP-FPMでは、稼働中のサービスへの影響を抑えながらプロセスを再読み込みする仕組みがあります。

一般的なPHP-FPMでは、SIGUSR2がgraceful reloadに使用されます。

一方、どのシグナルがsystemctl reloadから利用されるかなどは、Linuxディストリビューションやパッケージ側の設定によって異なる場合があります。

そのため、PHP-FPMの再読み込みについては、

sudo systemctl reload php8.4-fpm

のように、利用しているOSで提供されているサービス管理コマンドを使用するのが分かりやすい方法です。

PHPを安全に再起動する手順

本番環境でPHPを再起動する場合は、いきなりrestartを実行するのではなく、順番に確認すると安全です。

1.PHP関連サービスを確認する

systemctl list-units --type=service | grep php

たとえば、

php8.4-fpm.service

が確認できたとします。

2.設定ファイルを確認する

PHP-FPMの設定テストが可能な環境なら、

sudo php-fpm8.4 -t

などを実行します。

3.PHP-FPMを再読み込みする

設定に問題がなければ、

sudo systemctl reload php8.4-fpm

を実行します。

完全な再起動が必要な場合は、

sudo systemctl restart php8.4-fpm

とします。

4.サービスの状態を確認する

最後に、

sudo systemctl status php8.4-fpm

を実行し、PHP-FPMが正常に稼働していることを確認します。

PHPの再起動方法まとめ

PHPの再起動方法は、すべての環境で共通しているわけではありません。

PHP-FPMを利用している場合は、

sudo systemctl restart php8.4-fpm

のようにPHP-FPMを再起動します。

ApacheのPHPモジュールを利用している場合は、

sudo systemctl restart apache2

のようにApacheを再起動します。

Red Hat系Linuxでは、

sudo systemctl restart php-fpm

となる場合があります。

macOS+Homebrewなら、

brew services restart php

を利用できます。

Dockerであれば、

docker compose restart php

など、PHPを実行しているコンテナを再起動します。

重要なのは、「PHPを再起動するための共通コマンドが1つ存在するわけではない」という点です。

まずPHPがPHP-FPM、Apacheモジュール、Dockerなどのどの方式で動いているのかを確認し、その環境に適したサービスを再起動・再読み込みする必要があります。

また、本番サーバーでは設定変更後にすぐ再起動するのではなく、設定ファイルにエラーがないことを確認してからreloadまたはrestartを実行し、最後にサービスの稼働状態を確認するのが安全です。

以上、PHPの再起動方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次