PHP

何かと詰まりやすいphp

PHP環境の構築

PHP環境の構築

Ubuntu環境にPHPレポジトリを追加してインストール

概要

UbuntuのLAMP環境に必要なPHP8.1系とその設定を行います。

さっくりとした手順

  1. レポジトリを追加します
  2. インストールを行います
  3. インストールを確認します

レポジトリを追加します。

sudo add-apt-repository ppa:ondrej/php

Ubuntu20.04系ではこれを行わないとPHP7.4系しかインストールされません。

sudo aptitude update

PHP8.1系のインストールを行います。

sudo aptitude install php8.1
sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,imagick,gmp}

インストール後の確認をします。

sudo systemctl restart apache2.service
php -v
PHP 8.1.27 (cli) (built: Dec 21 2023 20:19:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.27, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.27, Copyright (c), by Zend Technologies
PHP環境の構築

Ubuntu 24.04のphp環境構築と環境設定

「Nextcloud等のLAMP環境が動くか」を考慮しながらUbuntu 24.04サーバを構築しています。

そこで、php8.3のインストール及びモジュールの追加を行います。

さっくりとした手順

  1. レポジトリを追加します。
  2. php並びに必要なパッケージを段階的にインストールします。
  3. Nextcloud等で必要になるように設定をしていきます。

レポジトリ追加とアップデート

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

段階的なインストール

sudo aptitude install php8.3
sudo aptitude memcached php8.3-apcu
sudo aptitude install php8.3-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,imagick,gmp}
sudo aptitude install php8.3-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,pgsql,pdo_pgsql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,imagick,gmp}
php -v
PHP 8.3.11 (cli) (built: Aug 30 2024 09:28:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.11, Copyright (c), by Zend Technologies

2024/09/06現在のバージョンです。

OPcacheとAPCuの有効化

Nextcloudはこの設定が無いと警告の対象となります。(或いはエラーが発生します)

sudo mv /etc/php/8.3/mods-available/opcache.ini /path/to/backup/directory/opcache.ini.$(date +%Y%m%d)
sudo mv /etc/php/8.3/mods-available/apcu.ini /path/to/backup/directory/apcu.ini.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

cat <<- __EOF__ | sudo tee -a /etc/php/8.3/mods-available/opcache.ini
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
cat <<- __EOF__ | sudo tee -a /etc/php/8.3/mods-available/apcu.ini
extension=apcu.so
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
__EOF__

※ メモリ量などは環境に合わせます。

sudo systemctl restart apache2.service
systemctl status apache2.service

active (running)を確認します。

PHP環境の構築

PHPのメモリ使用量をデフォルトから増やす。

概要

NextcloudなどのWebアプリでは、デフォルトの128MBでは足りないと言われますので、php.iniを修正します。

環境

で動作を確認しました。PHP 8.1でapache環境です。

手順

php.iniのバックアップを作成

sudo cp -pi /etc/php/8.1/apache2/php.ini /path/to/backup/php.ini.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

diff -u /etc/php/8.1/apache2/php.ini /path/to/backup/php.ini.$(date +%Y%m%d)

差分が存在しないことにより、バックアップが取れていることを確認します。

php.ini修正

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini

memory_limitを512Mに置き換えます。(Nextcloudの推奨値。サーバの環境に合わせます)

diff -u  /path/to/backup/php.ini.$(date +%Y%m%d) /etc/php/8.1/apache2/php.ini
-memory_limit = 128M
+memory_limit = 512M

設定反映

sudo systemctl restart apache2.service
PHP環境の構築

PHP環境でComposerをインストールする。

概要

LAMP環境で使われるComposerをインストールします。

環境

の両環境で動作を確認しました。PHP 8.1、Apache環境です。

手順

Composerをダウンロードしてインストールします。

sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php
sudo php -r "unlink('composer-setup.php');"

全てのユーザーが実行できるように設定します。

sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

インストールを確認します。

which composer

/usr/local/bin/composerを確認します。

composer -V

Composer version 2.6.6 2023-12-08 18:32:26のように表示されればインストールできています。

PHPモジュール

PHPモジュール

PHP8.1環境でmemcacheとAPCuを有効化

概要

Nextcloudで特に重要になるmemcacheとAPCuを有効化していきます。

環境

以下で確認済み。

両方ともPHP 8.1を入れていて、apache環境です。

手順

ディレクトリに移動します。

cd /etc/php/8.1/cli/conf.d

memcacheにファイルを追記します。

cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__

apcuにファイルを追記します。

cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/20-apcu.ini
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
__EOF__

設定を反映します。

sudo systemctl restart apache2.service

モジュールが組み込まれているかを確認します。

php -m | grep apcu
php -m | grep memcache

それぞれが表示されれば設定は有効化されています。