本ブログはアフィリエイト広告を利用しています。

PHPのバージョンアップはApacheと共に

気まぐれから始まる

Apexしている時にふとPHPのバージョンアップでもしようかなって唐突に思いゲームを閉じTeraTermを開く。
時間は午前0時。本当なら別環境でお試し後に本番環境で行った方が間違いなく良いのですが面倒くさい。
なんとかなるをスローガンにPHP7.4をインストールしていきました。インストール自体はすぐに完了し、apacheをリロード。
待っていたのはエラーでした。

The website encountered an unexpected error. Please try again later.

apacheログはこちら

Error: Class 'PDO' not found in /ドキュメントルート/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php on line 129 #0 /ドキュメントルート/core/lib/Drupal/Core/Database/Database.php(374): Drupal\\Core\\Database\\Driver\\pgsql\\Connection::open(Array)
#1 /ドキュメントルート/core/lib/Drupal/Core/Database/Database.php(169): Drupal\\Core\\Database\\Database::openConnection('default', 'default')
#2 [internal function]: Drupal\\Core\\Database\\Database::getConnection('default')
#3 /ドキュメントルート/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\\\\Core\\\\Dat...', Array)
#4 /ドキュメントルート/core/lib/Drupal/Component/DependencyInjection/Container.php(173): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->createService(Array, 'database')
#5 /ドキュメントルート/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(212): Drupal\\Component\\DependencyInjection\\Container->get('database', 1)
#6 /ドキュメントルート/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(62): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->resolveServicesAndParameters(Array)
#7 /ドキュメントルート/core/lib/Drupal/Component/DependencyInjection/Container.php(173): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->createService(Array, 'cache.container')
#8 /ドキュメントルート/core/lib/Drupal/Core/DrupalKernel.php(544): Drupal\\Component\\DependencyInjection\\Container->get('cache.container')
#9 /ドキュメントルート/core/lib/Drupal/Core/DrupalKernel.php(910): Drupal\\Core\\DrupalKernel->getCachedContainerDefinition()
#10 /ドキュメントルート/core/lib/Drupal/Core/DrupalKernel.php(477): Drupal\\Core\\DrupalKernel->initializeContainer()
#11 /ドキュメントルート/core/lib/Drupal/Core/DrupalKernel.php(707): Drupal\\Core\\DrupalKernel->boot()
#12 /ドキュメントルート/index.php(19): Drupal\\Core\\DrupalKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))
#13 {main}

PHP7.1からPHP7.4

唐突に始めようと思ったPHP7.4をインストールしていきます。

コマンドはこちら。PHPのバージョンアップは成功です。

# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum -y install --enablerepo=remi,remi-php74 php php-cli php-devel php-common php-mbstring php-pgsql php-phpunit-PHPUnit php-pecl-xdebug php-fpm php-gd php-gmp php-mcrypt php-opcache php-pdo php-xml php-xmlrpc php-soap php-pecl-apcu php-pear
# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_sqlite.so (/usr/lib64/php/modules/pdo_sqlite.so: undefined symbol: sqlite3_column_table_name)) in Unknown on line 0
PHP 7.4.24 (cli) (built: Sep 21 2021 11:23:11) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.24, Copyright (c), by Zend Technologies
    with Xdebug v2.9.8, Copyright (c) 2002-2020, by Derick Rethans

参考にしたサイト様でapacheの再起動をやっていたのでふーんてな感じでリロード

# systemctl reload httpd

一応表示されるか確認するかとブログにアクセスすると冒頭のエラー表示で当然のことながらHTTPステータスは500エラーとなりました。

The website encountered an unexpected error. Please try again later.

調査開始

apacheログを見るとpdoが見つからないエラーの模様。
必要だからインストールしているだけで、私はPHPなど触ったこともないのでpdoが何なのかは知りません。
調べるとpdoっていう拡張モジュールが入っていないんじゃないかって感じでした。
yumインストール時にphp-pdoを指定していたから入ってると思うけどPHPのコマンドで確認します。

# php -i |grep pdo
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_sqlite.so (/usr/lib64/php/modules/pdo_sqlite.so: undefined symbol: sqlite3_column_table_name)) in Unknown on line 0
/etc/php.d/20-pdo.ini,
/etc/php.d/30-pdo_pgsql.ini,
/etc/php.d/30-pdo_sqlite.ini,
pdo_pgsql

入ってます。ちゃんと有効です。ここから悩みに悩んで時刻は午前2時半・・・
ちょっと一服入れてる時にコマンドでは7.4になってるけどブラウザ経由でもそうなってるのだろうかと考え以下のPHPファイルを作成しました。

info.php

<?php phpinfo(); ?>

このファイルにブラウザでアクセスするとバージョンが7.1になっている。ここまでくるとapacheの設定が悪いということにようやく気付けます。

完全に余談ですが煮詰まった時、休憩挟むと良い案というか別視点でこれやったらどうだろう?っていうのが思いつくので適度に休憩しましょう。

私は風呂でよく閃いたりします。あーすればいいんじゃないか?みたいなこと。

対処

原因と思われるものが判明したのでこちらを参考にlibphp7.soをapache配下にコピーしapacheを再起動。

phpのバージョン更新で、apacheが動かない場合の対処法

再度、info.phpにアクセスするとバージョン7.4の文字が・・・ブログにもアクセスできるようになりました。ちなみに調査中、過去に構築手順を残しているファイルも見ていて、そのものずばりなコマンドを残していました。

cp -p /usr/lib64/httpd/modules/libphp7.so /usr/lib64/httpd/modules/libphp7-zts.so /usr/local/apache-2/modules/

ただ、この手順の説明などは残しておらずただコマンドのみだったので完全に読み飛ばしていました。もうちょっと過去の自分が頑張ってくれていたらここまで時間掛からなかったので悔しいです。

仕事よりもかなり集中して調べものしてたけどこういう時に一番生を実感しますね。まぁコースティックは使わないんですけど。

コメント

タイトルとURLをコピーしました