ubuntu に PHPをインストールする 20230216

1.日本語UTF-8を使う設定

$ sudo apt install language-pack-ja

2.phpのレポジトリを追加

$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update

3.PHPのインストール

Ubuntuが推奨中のバージョンを確認する。

$ sudo apt show php

まずはパッケージリストのアップデート。

$ sudo apt update

次のどちらかでinstallする。
(1) 推奨中のバージョンをインストールする場合

    $ sudo apt install php

(2) バージョン指定でをインストールする場合

    $ sudo apt install php8.2

インストール後にでPHPのバージョンを表示する。

$ php -v
PHP 8.2.3 (cli) (built: Feb 14 2023 16:58:12) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.3, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.3, Copyright (c), by Zend Technologies

4.apache2の再起動

PHPがインストールされたのでapache2を起動または再起動する
まだapache2が起動されていなかったら,起動する
$ sudo service apache2 start
すでにapache2が起動されていたら,再起動する
$ sudo service apache2 restart

5.PHPの単独テスト

・ファイルtestphp.phpを次のようにubuntuのDocumentRoot (/var/www/html)に作る。
-------------------------------------

<?php
print "Hello! from PHP\n";
?>

-------------------------------------
/var/www/htmlにおいて,つぎのコマンドで実行する。

$ php /var/www/html/testphp.php
Hello! from PHP

が表示されればOK。これでPHPの動作が確認できた

6.モジュールの追加とチェック

マルチバイト文字,jpegファイル,zipを使いたいのでモジュールを追加する。
(1) 推奨中のバージョンの場合

    $ sudo apt install php-mbstring
    $ sudo apt install php-gd
    $ sudo apt install php-zip

(2) バージョン指定の場合

    $ sudo apt install php8.2-mbstring
    $ sudo apt install php8.2-gd
    $ sudo apt install php8.2-zip

モジュールをチェックする

$ php -m
[PHP Modules]
calendar
Core
ctype
date
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
openssl
pcntl
pcre
PDO
Phar
posix
random
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

7.php.iniの修正

モジュール mbstring gd zip が追加されたので
/etc/php/8.2/apache2/php.ini
を修正する。

$ sudo nano /etc/php/8.2/apache2/php.ini

950行目あたり
extension=gd
extension=mbstring
の「;」を消して有効化する

extension=zip
をそれらの後ろに追加する

設定を変更したのでapache2を再起動する。

$ sudo service apache2 restart

8.PHPファイルのブラウザでの表示

apache2が動作していなかったら起動する(起動していたら再起動する)
まだapache2が起動されていなかったら,起動する
$ sudo service apache2 start
すでにapache2が起動されていたら,再起動する
$ sudo service apache2 restart

ここでブラウザで http://localhost/testphp.php をアクセスし,

Hello! from PHP

が表示されればOK。

9.PHPの設定状況の表示


/var/www/html/info.phpを次のように作る
-------------------------------------

<?php
phpinfo();
?>

-------------------------------------
ここでブラウザで http://localhost/info.php にアクセスし,
phpの設定項目が表になって表示される。
mbstringに関する情報も表の中に項目として表示されていたら,mbstringも認識OK。
(表が表示されたら,ブラウザのページ内検索で「mbstring」を検索するとよい。)
10.おまけ (複数バージョンPHPの使用)
php8.2が動作するようになったが,かつて実績のあるphp7.3も動かすことにした。

(1) phpの古いバージョンをインストールできるようにする
(1.1) パッケージのアップデートを確認
 $ sudo apt update
(1.2) software-properties-commonパッケージをインストールする。
 $ sudo apt install software-properties-common
(1.3) リポジトリを追加する
 $ sudo add-apt-repository ppa:ondrej/php
(1.4) 再度パッケージのアップデートを確認
 $ sudo apt update
(1.5) PHPをバージョン指定でインストールする
 $ sudo apt install php7.3
(1.6) 必要に応じて拡張機能もインストール
 $ sudo apt install php7.3-gd
 $ sudo apt install php7.3-mbstring
    :
(1.7) 拡張機能をインストールしたのでphp.iniも修正
 php.iniは次のところにある。
 /etc/php/7.3/apache2/php.ini

(2) CLI(コマンドラインインターフェイス)でのPHP
PHPのバージョンの切り替え
 $ sudo update-alternatives --set php /usr/bin/php7.3
(php8.2に戻す時 $ sudo update-alternatives --set php /usr/bin/php8.2)
で交互に入れ替えられる。
入れ替え結果は
$ php -v
で確認できる。

(3) apache2でのPHP
CLIが切り替わっても,apache2が使用するPHPは切り替わっていないので切り替える
(3.1)モジュールのインストール
ApacheのPHP7.3モジュール設定をインストールする。
 $ sudo apt install libapache2-mod-php7.3
(3.2)PHP7.3モジュールの有効化
 $ sudo a2enmod php7.3
(php8.2に戻す時 $ sudo a2enmod php8.2)
(3.3)不要になったPHP8.2モジュールの無効化
PHP8.0モジュールを有効化しただけでは、PHPのバージョンが競合してApacheが起動できなくなる。
そのため,a2dismodコマンドでPHP8.2モジュールを無効化する。
削除されるわけではない。
 $ sudo a2dismod php8.2
(php8.2に戻す時 $ sudo a2dismod php7.3)
(3.4) Apache再起動
 $ sudo service apache2 restart