本日はインすこールモノ。

ん?すこ?そうですね。

いや、前振り考えてる場合じゃない。

わりかし余裕ないんで。半沢始まるまでに書く。

・・・あれ、半沢来週に延期?なんじゃそりゃぁぁぁ!


さて、順調にいけばPHP8が今年中には出るっぽいですね。

あとCakePHP4も既に出ているっぽい。

調べたら既にCakePHP4.1とか出ているっぽい。

自分の立ち位置など、最近そうした情報に疎い環境になってきたが、意識して最新に触れるようにしたくてラズパイに最新のPHPを入れて弄ってみる。

言い訳だな。

というわけで、巷に情報が腐るほどあると思うけれども、ラズパイにApache2.4とPHP7.4を入れてWEBサーバーに仕立てていく。

ちなみに、環境としては以下のようにラズパイ4を2台用意。

  • WEBサーバー(今回対象)
    • hostname:RaspberryPi402
    • ipアドレス:192.168.0.12
  • DBサーバー(すでに構築済み)
    • hostname:RaspberryPi403
    • ipアドレス:192.168.0.13
    • database:MySQL8.0.20





【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品


Amazon 楽天

Smraza Raspberry Pi 4 USB-C (Type C)電源、5V 3A ラズベリーACアダプター RPi 4b Model B 1GB / 2GB / 4GB/ 8GB適用 PSE取得


Amazon 楽天

サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA


Amazon 楽天



1.Apache2のインストール

をする。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install apache2

ufw(Firewall)を入れてるので、ポート番号=80を開放する。家でSSLは別に使用しないので443は開放しない。してもよいけど。しない。いや、開放しとくか。

$ sudo ufw allow 80
$ sudo ufw allow 443


<裏話>
本当は。

2020/09/06時点でApache2.4の最新は2.4.46で、ラズパイの標準リポジトリ?では2.4.38で、最新バージョンをインストールしようと試みたが失敗。

libcrypt1.debをインスコする時に、インスコするとlibc6壊すよ、って言ってエラー。

現状の標準リポのlibc6はlibcrypt1と統合されてるんかね?

というわけで、Apache2.4の最新はインストールできませんでした。ちくしょー。
</裏話>

2.PHP7.4のインストール

をする。

通常のリポジトリ(?)からapt installするとPHPの最新は7.3になってしまう。

最新PHP7.4を入れるには以下の手順でリポジトリ(?)をまずは登録。そしてパッケージリスト更新。

$ su - root
# wget -O - https://packages.sury.org/php/apt.gpg | apt-key add -
# echo "deb https://packages.sury.org/php/ `lsb_release -cs` main" >> /etc/apt/sources.list.d/php.list
# apt update
# apt upgrade

リスト中にPHP7.4があることを確認。

# apt policy php
php:
  インストールされているバージョン: (なし)
  候補:               2:7.4+76+0~20200511.26+debian10~1.gbpc9beb6
  バージョンテーブル:
     2:7.4+76+0~20200511.26+debian10~1.gbpc9beb6 500
        500 https://packages.sury.org/php buster/main armhf Packages
     2:7.3+69 500
        500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

実際にPHP7.4関連のパッケージを検索してみる。デバッグシンボルパッケージは無視。

# apt search php7.4 | grep ^php7.4* | grep -v "dbgsym"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php7.4/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd all
php7.4-bcmath/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-bz2/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-cgi/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-cli/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-common/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-curl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-dba/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-dev/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-enchant/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-fpm/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-gd/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-gmp/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-imap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-interbase/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-intl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-json/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-ldap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-mbstring/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-mysql/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-odbc/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-opcache/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-pgsql/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-phpdbg/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-pspell/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-readline/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-snmp/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-soap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-sqlite3/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-sybase/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-tidy/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-xml/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-xmlrpc/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
php7.4-xsl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd all
php7.4-zip/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf

とりあえず、apache2のモジュールlibapache2-mod-php7.4と上記全部をインストール。

apt -y install libapache2-mod-php7.4 \
php7.4 \
php7.4-bcmath \
php7.4-bz2 \
php7.4-cgi \
php7.4-cli \
php7.4-common \
php7.4-curl \
php7.4-dba \
php7.4-dev \
php7.4-enchant \
php7.4-fpm \
php7.4-gd \
php7.4-gmp \
php7.4-imap \
php7.4-interbase \
php7.4-intl \
php7.4-json \
php7.4-ldap \
php7.4-mbstring \
php7.4-mysql \
php7.4-odbc \
php7.4-opcache \
php7.4-pgsql \
php7.4-phpdbg \
php7.4-pspell \
php7.4-readline \
php7.4-snmp \
php7.4-soap \
php7.4-sqlite3 \
php7.4-sybase \
php7.4-tidy \
php7.4-xml \
php7.4-xmlrpc \
php7.4-xsl \
php7.4-zip

インストールされたPHPのバージョン確認。

# php -v
PHP 7.4.9 (cli) (built: Aug  7 2020 14:55:48) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies

これでPHPの最新がインストールされた。


3.設定

をする。

まずapache2のconfigが正しいかどうかテスト。

# apache2ctl configtest

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

おっとぅ?エラってる。

なので、fqdn.confを作成してServerNameを設定。サーバー名は適当。

# vim /etc/apache2/conf-available/fqdn.conf

ServerName raspi-webserver

あとはPHPを使えるように設定。

# vim /etc/apache2/mods-available/mime.conf

:
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-bzip2 .bz2
AddType application/x-httpd-php .php          # 追加
AddType application/x-httpd-php-source .phps  # 追加
:
:
AddHandler cgi-script .cgi .php               # .phpを追加
:

設定を反映させてapache2を再起動。

# a2enconf fqdn
# apache2ctl configtest

Syntax OK
# systemctl reload apache2

とりあえず、動作確認ド定番のphpinfoを表示させてみる。

# vim /var/www/html/test.php

<?php
phpinfo();
?>

ブラウザーから以下に接続。

http://192.168.0.12/test.php

はい、OK。

本当は、途中libapache2-mod-php7.4入れ忘れててphpinfo表示されなくて焦って時間食ったってのは内緒だ。


4.PHP7.4からMySQL8.0へ接続するテスト

もう1台のラズパイにはMySQL8が入ってるので、そこと接続してデータ取ってきて表示させるテストもしてみる。

MySQL8.0.20@192.168.0.13上での準備

やってることはtestdb作って、そこに接続するユーザーを2つ作成。

ユーザーの1つはMySQLサーバー上のユーザー。もう1つのユーザーはPHP側から接続するユーザー。

そんでもってtesttblてテーブル作って1レコードinsert。

$ mysql -u root -p
:
:
mysql> create database testdb;
Query OK, 1 row affected (0.02 sec)

mysql> create user testuser@localhost identified by 'testpassword';
Query OK, 0 rows affected (0.01 sec)

mysql> create user testuser@'192.168.0.12' identified by 'testpassword';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on testdb.* to testuser@localhost;
Query OK, 0 rows affected (0.02 sec)

mysql> exit;

$ mysql -u testuser -p
:
:
mysql> use testdb;
Database changed
mysql> create table testtbl (
    -> id int not null auto_increment
    -> ,name varchar(100)
    -> ,insuser char(10) not null
    -> ,insdatetime timestamp not null default current_timestamp
    -> ,upduser char(10) not null
    -> ,upddatetime timestamp not null default current_timestamp on update current_timestamp
    -> ,primary key( id )
    -> )
    -> ;
Query OK, 0 rows affected (0.09 sec)

mysql> insert into testtbl(name,insuser,upduser) values('あああああ','testuser01','testuser01');
Query OK, 1 row affected (0.06 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from testtbl;
+----+-----------------+------------+---------------------+------------+---------------------+
| id | name            | insuser    | insdatetime         | upduser    | upddatetime         |
+----+-----------------+------------+---------------------+------------+---------------------+
|  1 | あああああ      | testuser01 | 2020-09-01 22:29:21 | testuser01 | 2020-09-01 22:29:21 |
+----+-----------------+------------+---------------------+------------+---------------------+
1 row in set (0.00 sec)

mysql>


PHP7.4.9@192.168.0.12上での準備

やってることはapache2のドキュメントルート上にMySQLに接続してSELECTして取得したレコードを表示する、ただそれだけのphpファイルを用意。

# vim /var/www/html/testdb.php

<?php
    echo "<!doctype html>\n";
    echo "<html class='no-js' lang='ja'>\n";
    echo "<head>\n";
    echo "  <meta charset='utf-8'>\n";
    echo "  <title></title>\n";
    echo "  <link rel='stylesheet' href='css/test.css'>\n";
    echo "</head>\n";
    echo "<body>\n";

    try{

        echo "<h1>PHPからMySQLへの接続テスト</h1>\n";

        // MySQLへ接続する
        $db = new PDO("mysql:dbname=testdb;host=192.168.0.13", "testuser", "testpassword");
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        echo "<h2>SQL文</h2>\n";
        echo "<div>\n";
        echo "SELECT * FROM testtbl\n";
        echo "</div>\n";
        // クエリを送信する
        $sql = $db->prepare( "SELECT * FROM testtbl" );
        $sql->execute();

        echo "<h2>結果</h2>\n";
        echo "<div>\n";
        //結果セットを取得・表示する
        $all = $sql->fetchAll();
        foreach ($all as $data){
            var_dump($data);
        }
        echo "</div>\n";

        $db = null;
    }catch(PDOException $e){
        echo $e->getMessage();
        exit;
    }

    echo "</body>\n";
    echo "</html>\n";
?>


実行

ブラウザーから以下に接続。

http://192.168.0.12/testdb.php

はい、OK。


5.まとめ

今日は以上!


半沢生放送、俺は意外に面白かった。

6.参考

今回も先人の方たちに感謝。

Raspbian Buster に PHP7.4 をインストール(2020/01)

【Ubuntu 18.04 LTS Server】Apache2とPHP7.2を動かす | The modern stone age.

Apache2のPHP設定 | koba'sLab


【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品


Amazon 楽天

Smraza Raspberry Pi 4 USB-C (Type C)電源、5V 3A ラズベリーACアダプター RPi 4b Model B 1GB / 2GB / 4GB/ 8GB適用 PSE取得


Amazon 楽天

サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA


Amazon 楽天




【今日の音楽】
緑黄色社会

2020/02/19