●Rocky Linux 9にPHP 8.1をインストールする
参考URL:Rocky Linux 9にPHP 8.1をインストールする方法
OSのバージョンを確認します。
●PHP 8.0(ソース)のインストール
PHP 8.0を更新する方法はこちらに記載しています。
●インストール
・ソースからのインストール
http://www.php.net/downloads.phpから、インストールしたいバージョンをダウンロードします。
●設定ファイルの変更
必要があれば、「php.ini」の設定を変更します。
●動作確認用PHPスクリプトの作成
Apacheは問題なくインストールされているものとします。
ここでは、PHPが正しく動作しているかを確認するために、PHPのインストール環境を表示するスクリプトを作成します。
Apacheのドキュメントルート「/var/www/html(注)」に「info.php(サンプル1)」を作成します。
注:ソースからインストールした場合は「/usr/local/apache2/htdocs」がドキュメントルートになります。
注:セキュリティ管理上、サーバ環境の情報を簡単に表示できてしまうのは不用心なので、必要ない場合は削除しましょう。
作成したら、Webブラウザで「http://127.0.0.1/info.php」にアクセスします。情報の一覧が表示されれば正常です。
「info.php」がそのまま表示されてしまう場合は、Apacheの設定ファイルで下記のような記載がないか、または、Apacheの設定ファイルでPHP用のモジュールが読み込まれていない可能性があります。
Apacheを再起動・・するが、新たなエラーが・・。
sqliteをインストール後、PHPのconfigure時に「--with-apxs2=/usr/sbin/apxs」を付加し、インストールすればいいみたい。
Webブラウザで「http://127.0.0.1/info.php」にアクセスすると、情報の一覧が表示されました。
●MySQLとの連携
PHPのconfigure時に「--with-mysql」を付加し、インストールします。
データベースは●データベースの作成を参照して作成してください。
動作確認スクリプトの作成1
/var/www/html/test_mysql.phpを以下のように作成します。
MySQLサーバへの接続に成功した場合「Success MySQL First Test」、失敗した場合「Error MySQL First Test」と表示されます。
動作確認スクリプトの作成2
/var/www/html/test_mysql2.phpを以下のように作成します。
動作確認スクリプトの作成3
/var/www/html/test_mysql_pdo.phpを以下のように作成します。
●PostgreSQLとの連携
PHPのconfigure時に「--with-pgsql」を付加し、インストールします。
テストデータベースは●テストデータベース作成参照して作成してください。
動作確認スクリプトの作成
php-pgsqlのインストールと利用を参照してください。
●異種バージョンの同居
参考URL:さくらVPSでphp5.3/5.2/5.1 が同居する環境を構築してみた
参考URL:php::Apacheに複数バージョンのphpを共存させる
CentOS 7で5.3.3と5.1.6が別々に動作できるよう設定してみましたので、その時の作業を記録します。
5.1.6で動作させたいフォルダを仮に「/home/test/public_html」とします。
5.3.3はyumでインストール済みです。5.1.6のtarボールをダウンロードしCGIとして設定します。
●「現在このリクエストを処理できません。」と表示される
あるPHPにアクセスすると下記のようなエラーが表示されるようになりました。
これを下記のように変更することで解決しました。
●php-fpmが起動しなくなった
参考URL:RockyLinuxでPHPをアップグレードする(8.2→8.3)
参考URL:OS起動時に php-fpm が起動しなくなった際に対応した箇所
参考URL:PHP7.1でphp-fpmが起動しない
PHPを8.1から8.2にバージョンアップ後、php-fpmが起動しなくなってしまいました。
下記のように実施したところ
参考URL:Rocky Linux 9にPHP 8.1をインストールする方法
OSのバージョンを確認します。
# cat /etc/redhat-release Rocky Linux release 9.1 (Blue Onyx)普通にPHPをインストールしようとすると、PHP 8.0をインストールしようとします。
# dnf install php 依存関係が解決しました。 ==================================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ==================================================================================================================================== インストール: php x86_64 8.0.20-3.el9 appstream 11 k 依存関係のインストール: apr x86_64 1.7.0-11.el9 appstream 123 k apr-util x86_64 1.6.1-20.el9 appstream 94 k apr-util-bdb x86_64 1.6.1-20.el9 appstream 13 k httpd-core x86_64 2.4.53-7.el9 appstream 1.4 M httpd-filesystem noarch 2.4.53-7.el9 appstream 15 k httpd-tools x86_64 2.4.53-7.el9 appstream 82 k nginx-filesystem noarch 1:1.20.1-13.el9 appstream 11 k oniguruma x86_64 6.9.6-1.el9.5 appstream 217 k php-common x86_64 8.0.20-3.el9 appstream 665 k rocky-logos-httpd noarch 90.14-1.el9 appstream 24 k 弱い依存関係のインストール: apr-util-openssl x86_64 1.6.1-20.el9 appstream 15 k httpd x86_64 2.4.53-7.el9 appstream 48 k mod_http2 x86_64 1.15.19-2.el9 appstream 149 k mod_lua x86_64 2.4.53-7.el9 appstream 62 k php-cli x86_64 8.0.20-3.el9 appstream 3.1 M php-fpm x86_64 8.0.20-3.el9 appstream 1.6 M php-mbstring x86_64 8.0.20-3.el9 appstream 471 k php-opcache x86_64 8.0.20-3.el9 appstream 512 k php-pdo x86_64 8.0.20-3.el9 appstream 84 k php-xml x86_64 8.0.20-3.el9 appstream 133 k トランザクションの概要 ==================================================================================================================================== インストール 21 パッケージ ダウンロードサイズの合計: 8.7 M インストール後のサイズ: 42 M これでよろしいですか? [y/N]: N 操作が中断されました。2023年2月現在、Rocky Linux 9ではPHP 8.1をインストールできるようなので確認します。
# dnf module list php Rocky Linux 9 - AppStream Name Stream Profiles Summary php 8.1 common [d], devel, minimal PHP scripting language ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalledPHP 8.1をインストールします。
# dnf module install php:8.1 -y 依存関係が解決しました。 ==================================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ==================================================================================================================================== group/moduleパッケージをインストール: php-cli x86_64 8.1.8-1.module+el9.1.0+13171+4883e0c8 appstream 3.5 M php-common x86_64 8.1.8-1.module+el9.1.0+13171+4883e0c8 appstream 667 k php-fpm x86_64 8.1.8-1.module+el9.1.0+13171+4883e0c8 appstream 1.8 M php-mbstring x86_64 8.1.8-1.module+el9.1.0+13171+4883e0c8 appstream 475 k php-xml x86_64 8.1.8-1.module+el9.1.0+13171+4883e0c8 appstream 142 k 依存関係のインストール: httpd-filesystem noarch 2.4.53-7.el9 appstream 15 k nginx-filesystem noarch 1:1.20.1-13.el9 appstream 11 k oniguruma x86_64 6.9.6-1.el9.5 appstream 217 k モジュールプロファイルのインストール中: php/common モジュールストリームの有効化中: php 8.1 トランザクションの概要 ==================================================================================================================================== インストール 8 パッケージ : : 完了しました!インストール状況を確認します。
# dnf module list php Rocky Linux 9 - AppStream Name Stream Profiles Summary php 8.1 [e] common [d] [i], devel, minimal PHP scripting language ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalledPHPを設定します。
# vi /etc/php.ini expose_php = On ↓ expose_php = Off ;date.timezone = ↓ date.timezone = 'Asia/Tokyo' error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ↓ error_reporting = E_ALL & ~E_NOTICEphp-fpmが自動起動するように設定します。
systemctl enable --now php-fpm
●PHP 8.0(ソース)のインストール
PHP 8.0を更新する方法はこちらに記載しています。
●インストール
・ソースからのインストール
http://www.php.net/downloads.phpから、インストールしたいバージョンをダウンロードします。
$ cd /usr/local/src
$ tar zxvf php-5.2.9.tar.gz
$ cd php-5.2.9
$ ./configure --with-apxs2=/usr/sbin/apxs「libphp5.so」インストールのため
$ make
$ su
# make install
make installを実行したら、あとはphp.ini-recommendedを/usr/local/lib/php.iniにコピーします。
●設定ファイルの変更
必要があれば、「php.ini」の設定を変更します。
php.iniのインクルードパスの変更を行います。 ;include_path = ".:/php/includes" ↓ include_path = ".:/usr/local/include/php:/usr/local/lib/php" php.iniのドキュメントルートのパス設定を行います。 doc_root = "/usr/local/apache2/htdocs" php.iniの拡張モジュールのパスを変更します。 extension_dir = "/usr/local/include/php/ext" 必要に応じて、php.iniの文字コード等の設定を以下の様にUTF-8用に変更します。 コメントアウトされているものについては、コメントを外します。 output_buffering = On output_handler = mb_output_handler default_charset = "UTF-8" mbstring.language = Japanese mbstring.internal_encoding = UTF8 mbstring.http_output = UTF8
●動作確認用PHPスクリプトの作成
Apacheは問題なくインストールされているものとします。
ここでは、PHPが正しく動作しているかを確認するために、PHPのインストール環境を表示するスクリプトを作成します。
Apacheのドキュメントルート「/var/www/html(注)」に「info.php(サンプル1)」を作成します。
注:ソースからインストールした場合は「/usr/local/apache2/htdocs」がドキュメントルートになります。
$ vi info.php <?php phpinfo(); ?>PHPスクリプトは「<?php」で始まり「?>」で終わります。その間に「phpinfo();」のようなコードを記述します。その際、行末には必ず「;」を付加します。phpinfo関数はPHPインストール環境を表示します。簡単なサンプルですが、サーバ環境を表示できるので開発時には重宝します(注)。なお、PHPスクリプトファイルの拡張子は「.php」になるように保存します。
注:セキュリティ管理上、サーバ環境の情報を簡単に表示できてしまうのは不用心なので、必要ない場合は削除しましょう。
作成したら、Webブラウザで「http://127.0.0.1/info.php」にアクセスします。情報の一覧が表示されれば正常です。
「info.php」がそのまま表示されてしまう場合は、Apacheの設定ファイルで下記のような記載がないか、または、Apacheの設定ファイルでPHP用のモジュールが読み込まれていない可能性があります。
AddType application/x-httpd-php .phpそこで、/etc/httpd/conf.d/php.confを作成します。
# vi /etc/httpd/conf.d/php.conf ← php.conf作成
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
LoadModule php5_module modules/libphp5.so
#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Apacheを再起動したら、「libphp5.so」が無いと言われたので、コンパイル時に「--with-apxs2=/usr/sbin/apxs」を付加して、PHPを再インストールします。
Apacheを再起動・・するが、新たなエラーが・・。
httpd: Syntax error on line 207 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/libphp5.so into server: \ /usr/lib/httpd/modules/libphp5.so: undefined symbol: sqlite3ExprDeletesqlite3がインストールされていないようなので、「sqlite」をhttp://www.sqlite.org/からダウンロードします。
$ cd /usr/local/src $ tar zxvf sqlite-3.6.15.tar.gz $ cd sqlite-3.6.15 $ ./configure $ make $ su # make install下記のようにインストールされます。
/usr/bin/install -c -d /usr/local/bin ./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin libtool: install: /usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3 /usr/bin/install -c -d /usr/local/include /usr/bin/install -c -m 0644 sqlite3.h /usr/local/include /usr/bin/install -c -m 0644 ./src/sqlite3ext.h /usr/local/include /usr/bin/install -c -d /usr/local/lib/pkgconfig /usr/bin/install -c -m 0644 sqlite3.pc /usr/local/lib/pkgconfig再度、PHPをコンパイル・・。
$ ./configure --with-apxs2=/usr/sbin/apxs --with-sqlite=/usr/local/include 1回目のコンパイル失敗 $ ./configure --with-apxs2=/usr/sbin/apxs --with-sqlite=/usr/local/lib 2回目のコンパイル失敗いろいろ試してみるが、どうしてもPHPのconfigure時に下記のエラーが表示されてしまうので、
configure: error: wrong sqlite lib version or lib not foundmake cleanを実行。再度、PHPのconfigure、make、make installを実行。Apacheも起動。
$ cd /usr/local/src/php-5.2.9 $ ./configure --with-apxs2=/usr/sbin/apxs $ ./configure $ make $ su # make install 「LoadModule php5_module /usr/lib/httpd/modules/modules/libphp5.so」が追加され、 新しい「httpd.conf」に変更される。 # vi /etc/httpd/conf.d/php.conf ← 上記で作成した「php.conf」を編集 # LoadModule php5_module modules/libphp5.so ← コメントアウトする # service httpd start ← Apacheの起動何事もなくApacheが立ち上がりました・・。
sqliteをインストール後、PHPのconfigure時に「--with-apxs2=/usr/sbin/apxs」を付加し、インストールすればいいみたい。
Webブラウザで「http://127.0.0.1/info.php」にアクセスすると、情報の一覧が表示されました。
●MySQLとの連携
PHPのconfigure時に「--with-mysql」を付加し、インストールします。
データベースは●データベースの作成を参照して作成してください。
動作確認スクリプトの作成1
/var/www/html/test_mysql.phpを以下のように作成します。
# vi /var/www/html/test_mysql.php ← test_mysql.phpの作成
<?php
mysql_connect("localhost","root","") or die("Error MySQL First Test");
echo "Success MySQL First Test";
?>
http://(Webサーバ名)/test_mysql.phpにアクセスすることにより、DBへの接続状況を確認することができます。
MySQLサーバへの接続に成功した場合「Success MySQL First Test」、失敗した場合「Error MySQL First Test」と表示されます。
動作確認スクリプトの作成2
/var/www/html/test_mysql2.phpを以下のように作成します。
# vi /var/www/html/test_mysql2.php ← test_mysql2.phpの作成 <html> <head> <meta http-equiv=content-type content="text/html; charset=UTF-8"> <title>PHPのテスト</title> </head> <body> <?php //初期設定 $username = "myuser"; ← データベース「auth」へアクセス可能なユーザ $password = "mypass"; ← 上記ユーザ用のパスワード $dbname = "auth"; $sql = "select * from city"; // サーバ接続 $con = mysql_connect("localhost","$username","$password") or die("接続失敗:" . mysql_error()); // データベースを選択 mysql_select_db($dbname,$con) or die("DBがありません:" . mysql_error()); // 文字化け防止のおまじない // $strsql = "SET CHARACTER SET UTF8"; // SQLの実行 $res = mysql_query($sql,$con); print "照会件数= " . mysql_num_rows($res) . "<br />"; // 展開 while ($item = mysql_fetch_array($res)) { print $item[0]." ".$item[1]."<br />"; } // 接続をクローズ mysql_close($con) or die("MySQL切断に失敗しました。"); ?> </body> </html>
動作確認スクリプトの作成3
/var/www/html/test_mysql_pdo.phpを以下のように作成します。
<html> <head> <title>PHP MySQL TEST</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <h2>DB接続テスト(PHP MySQL pdo版)</h2> <?php $server = 'localhost'; $user = 'myuser'; $pass = 'mypass'; $dbname = 'auth'; $my = new MySQLi($server, $user, $pass, $dbname); $my->set_charset('utf8'); $sql = "SELECT * FROM `city` LIMIT 0 , 30"; $result = $my->query($sql); // データベースの中身を取得 while($row = $result->fetch_assoc() ){ echo $row['country'] . " / "; echo $row['capital'] . "<br>"; } // DB接続を閉じる $my->close(); ?> </body> </html>
●PostgreSQLとの連携
PHPのconfigure時に「--with-pgsql」を付加し、インストールします。
テストデータベースは●テストデータベース作成参照して作成してください。
動作確認スクリプトの作成
php-pgsqlのインストールと利用を参照してください。
●異種バージョンの同居
参考URL:さくらVPSでphp5.3/5.2/5.1 が同居する環境を構築してみた
参考URL:php::Apacheに複数バージョンのphpを共存させる
CentOS 7で5.3.3と5.1.6が別々に動作できるよう設定してみましたので、その時の作業を記録します。
5.1.6で動作させたいフォルダを仮に「/home/test/public_html」とします。
5.3.3はyumでインストール済みです。5.1.6のtarボールをダウンロードしCGIとして設定します。
# cd /usr/local/src # wget http://museum.php.net/php5/php-5.1.6.tar.gz # tar zxvf php-5.1.6.tar.gz コンフィグするのに不足したモジュールをyumでインストール ※環境により必要なモジュールは異なる # yum install flex libxml2 libxml2-devel コンフィグのオプションは環境により異なるので参考程度に・・・ # LDFLAGS=-L/usr/lib64/mysql ./configure --prefix=/usr/local/lib/php-5.1.6 --with-config-file-path=/usr/local/lib/php-5.1.6 \ --libdir=/usr/lib64 --with-zlib --with-zlib-dir=/usr/include/ --enable-fastcgi \ --enable-cgi --enable-force-cgi-redirect --enable-mbstring --enable-mbstr-enc-trans \ --enable-track-vars --enable-mbregex --with-mysql=/usr/lib/mysql --with-mysqli=/usr/lib/mysql/mysql_config --with-gd \ --with-jpeg-dir=/usr/lib64 --with-png-dir=/usr/lib64 --program-suffix=516 --enable-zend-multibyte # make # make installapacheの設定ファイルを変更します。
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org # vi /etc/httpd/conf/httpd.conf ※変更した箇所のみ記載 UserDir enabled test ← 該当フォルダのユーザのみ許可 UserDir public_html ← コメントアウト <Directory /home/*/public_html> ← コメントアウト AllowOverride FileInfo AuthConfig Limit ← コメントアウト Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec FollowSymLinks ← コメントアウト </Directory> ← コメントアウト <Directory "/var/www/cgi-bin"> AllowOverride None Options FollowSymLinks ← 変更 Order allow,deny Allow from all </Directory> # service httpd restart # cd /var/www/cgi-bin # ln -s /usr/local/lib/php-5.1.6/bin/php516 php5165.1.6で動作させたいフォルダは「/home/test/public_html」ですので、ここに.htaccessを設置します。
$ /home/test/public_html/.htaccess AddHandler php516-script .php Action php516-script /cgi-bin/php516動作確認のため.htaccessと同じ箇所にtest.phpを設置します。
$ /home/test/public_html/test.php <?php phpinfo(); ?>http://<サーバ名>/~test/test.phpにアクセスし、表示される結果が5.1.6であれば問題なく動作しています。
●「現在このリクエストを処理できません。」と表示される
あるPHPにアクセスすると下記のようなエラーが表示されるようになりました。
このページは動作していません tori.bigbang.mydns.jp では現在このリクエストを処理できません。 HTTP ERROR 500
# tail -f /var/log/php-fpm/www-error.log [23-Jan-2022 22:57:17 Asia/Tokyo] PHP Warning: include_once(/var/www/html/***/***/xxx.php): failed to open stream: Permission denied in /var/www/html/yyy.php on line 7 [23-Jan-2022 22:57:17 Asia/Tokyo] PHP Warning: include_once(): Failed opening './***/***/xxx.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /***/***/xxx.php on line 7 [23-Jan-2022 22:57:17 Asia/Tokyo] PHP Fatal error: Uncaught Error: Call to undefined function rssGen() in /var/www/html/yyy.php:10 Stack trace: #0 {main} thrown in /var/www/html/yyy.php on line 10いろいろ調べた結果、アクセスしたPHPから呼び出すPHPのアクセス権がおかしくなっていることに気が付きました。
これを下記のように変更することで解決しました。
# ll /var/www/html/***/***/xxx.php -r--rw---- 1 root wheel 16012 3月 1 2019 /var/www/html/***/***/xxx.php # chmod 664 /var/www/html/***/***/xxx.phpこれにより表示できるようになりました。
●php-fpmが起動しなくなった
参考URL:RockyLinuxでPHPをアップグレードする(8.2→8.3)
参考URL:OS起動時に php-fpm が起動しなくなった際に対応した箇所
参考URL:PHP7.1でphp-fpmが起動しない
PHPを8.1から8.2にバージョンアップ後、php-fpmが起動しなくなってしまいました。
ERROR: No pool defined. at least one pool section must be specified in config file failed to post process the configuration FPM initialization failed色々調べた結果、php-fpm.confのサイズが「0」になっていました。
下記のように実施したところ
# cp -p /etc/php-fpm.conf.rpmnew /etc/php-fpm.conf正常に起動するようになりました。