TOPに戻る
鬱るんです
躁鬱病のITエンジニア「はまー」が心と体の模様を記した雑記帳。 大手IT企業で心身ともにぼろぼろになり退職した後、ほそぼそと働いたり事業を立ち上げようとして頓挫したり、作業所に通ったり障害者雇用で働いたりと紆余曲折したが、今は無職な毎日。

日別アーカイブ:2020年5月31日

昨日は22時半に寝たが、寝付けずに23時10分に起きて牛乳を飲んでチーズを食べた。またPCを立ち上げて、なぜかレンタルサーバーの新ブログの常時SSL化という、「なぜ今やる?」ということをやり始めた。

常時SSL化というのは、サイトコンテンツの内部リンクを完全にSSL化すること。レンタルサーバーになってSSL証明書を発行してもらえたので、HTTPSでこのサイトに接続できるようにできたが、移行前の記事内の画像や他の記事へのリンクがhttpsでなくhttpで始まっており、それらは安全なリンクとみなされない。そのため「安全でないコンテンツへのリンクが含まれる」という状態だった。それを無理やり「Really Simple SSL」というプラグインで「完全にSSL化されている」ように見せかけていた。

しかしこれはあまり美しくない。本来なら自サイトのURLを全部httpsに書き換えるべきである。ということで「Search RegExp」というプラグインでDBの内容を一斉に置換してしまった。先日ローカルサーバーで、SSL化ではないがレンタルサーバーに移行したためホスト名を変えた際、旧ブログのDB内のホスト名を一斉置換するために試してうまくいった。同じようにレンタルサーバーの常時SSL化も近日中にやろうかと思っていた。それをなぜか昨日の夜にやりだした。DBのバックアップをとって、Search RegExpでURL置換。phpMyAdminからSQLでDBの中を見てうまくいったっぽいと確認。なのにReally Simple SSLプラグインを無効化してブログを表示させたら、「保護されてない通信」との表示。あれ~?というところで昨日は0時をまわったので寝た。起きたら8時45分。とほほである。

そして今日は昨夜の続き。多分この辺りが怪しいんだろうと思うところを修正したが、まだおかしい。どうやって調べるんだろうと思ってネットで検索したら、ChromeのデベロッパーツールでWarningが出てるからそれで問題の箇所を特定できると。調べてみたらFeedlyというRSSリーダーへのリンク内にある自サイトのURLがhttpだったのがいけなかったようだった。そいつを修正したら無事完全にSSL化できた。

ところでFeedlyのボタンを押したらエラーになった。また調べたら、なんと2年くらい前にFeedlyが仕様変更になって、コードを書き換えないとちゃんとFeedlyの画面に遷移しないという状態になっていた。ここからアクセスする人はほとんどいないと思うが、まあよくこのタイミングで気づいたものだ。一度設置したら自分もまず押さないボタンだった。

これである。

follow us in feedly

というところで、今日はいろいろいじっていたら前記事のphpMyAdminのトラブルに遭遇して格闘していた。最近こういうトラブルばっかりで、正直楽しい。そして昼間に記事をアップしたら、またサイトが「保護されていない通信」に戻ってしまった。なんで?え~と、どうやら画像をアップしたらhttpで始まるURLでimgタグが埋め込められてしまっていた。???と思ったら、WordPressのダッシュボードで肝心の自サイトのURLをhttpsに書き換えてなかった。プラグインに任せ過ぎだろう、自分。httpsに修正して画像をアップし直したらちゃんとhttpsになりましたよ。これで大丈夫かな。まだなにか罠があるのかな。

そういうことをしていて、日曜日だけど引きこもっていたよ。まだまだコロナは油断してはいけないからこれでいいのだ。明日からまた作業所だ。

今日ローカルサーバーでphpMyAdminにアクセスしようとしたら、この表示。

phpMyAdmin_mbstringエラー

おおーい、エラーかーい。あああやっぱり出たよ、OSアップデートの弊害が。mbstringがないとな。PHP関連では毎回苦労する。PHPのバージョンが上がるたびに、それに振り回されるのだ。PHPのバージョンていくつになったんだ?

$ php -v
PHP 7.2.24-0ubuntu0.18.04.6 (cli) (built: May 26 2020 13:09:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24-0ubuntu0.18.04.6, Copyright (c) 1999-2018, by Zend Technologies

7.2か。7.2のmbstringが入ってないのか?

$ dpkg -l | grep mbstring
ii php-mbstring 1:7.2+60ubuntu1 all MBSTRING module for PHP [default]
rc php7.0-mbstring 7.0.33-0ubuntu0.16.04.15 amd64 MBSTRING module for PHP
ii php7.2-mbstring 7.2.24-0ubuntu0.18.04.6 amd64 MBSTRING module for PHP

入ってるじゃないか。なんでmissingなんだ。

なんか悪い予感がするが、ひょっとして、と思ってWebでphpinfo()を表示させてみた。
ApacheのPHPのバージョンが7.0
おおお!こっちは7.0だと。というか「PHP Version 7.0.33-0ubuntu0.16.04.15」て何?「16.04」てところがすげー気になるんだけど。

Apache用のPHPモジュールは別に7.2用のがあって、それを明示的に指定して入れないといけないのかな。

$ apt-cache search libapache2-mod-php7.2
libapache2-mod-php7.2 - server-side, HTML-embedded scripting language (Apache 2 module)
php7.2-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)

あ、それらしきものが。

$ sudo apt-get install libapache2-mod-php7.2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
libapache2-mod-php7.2
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
1,350 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,793 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libapache2-mod-php7.2 amd64 7.2.24-0ubuntu0.18.04.6 [1,350 kB]
1,350 kB を 1秒 で取得しました (2,042 kB/s)
以前に未選択のパッケージ libapache2-mod-php7.2 を選択しています。
(データベースを読み込んでいます ... 現在 159029 個のファイルとディレクトリがインストールされています。)
.../libapache2-mod-php7.2_7.2.24-0ubuntu0.18.04.6_amd64.deb を展開する準備をしています ...
libapache2-mod-php7.2 (7.2.24-0ubuntu0.18.04.6) を展開しています...
libapache2-mod-php7.2 (7.2.24-0ubuntu0.18.04.6) を設定しています ...

Creating config file /etc/php/7.2/apache2/php.ini with new version
php_invoke: Enabled module dom for apache2 sapi
php_invoke: Enabled module posix for apache2 sapi
php_invoke: Enabled module sysvsem for apache2 sapi
php_invoke: Enabled module sysvshm for apache2 sapi
php_invoke: Enabled module xml for apache2 sapi
php_invoke: Enabled module bz2 for apache2 sapi
php_invoke: Enabled module iconv for apache2 sapi
php_invoke: Enabled module tokenizer for apache2 sapi
php_invoke: Enabled module sockets for apache2 sapi
php_invoke: Enabled module xmlwriter for apache2 sapi
php_invoke: Enabled module json for apache2 sapi
php_invoke: Enabled module ctype for apache2 sapi
php_invoke: Enabled module pdo for apache2 sapi
php_invoke: Enabled module wddx for apache2 sapi
php_invoke: Enabled module xsl for apache2 sapi
php_invoke: Enabled module shmop for apache2 sapi
php_invoke: Enabled module ftp for apache2 sapi
php_invoke: Enabled module simplexml for apache2 sapi
php_invoke: Enabled module fileinfo for apache2 sapi
php_invoke: Enabled module opcache for apache2 sapi
php_invoke: Enabled module sysvmsg for apache2 sapi
php_invoke: Enabled module phar for apache2 sapi
php_invoke: Enabled module readline for apache2 sapi
php_invoke: Enabled module smbclient for apache2 sapi
php_invoke: Enabled module calendar for apache2 sapi
php_invoke: Enabled module exif for apache2 sapi
php_invoke: Enabled module gd for apache2 sapi
php_invoke: Enabled module xmlreader for apache2 sapi
php_invoke: Enabled module gettext for apache2 sapi
php_invoke: Enabled module mbstring for apache2 sapi
libapache2-mod-php7.2: Disabling old php7.0 in favor of using PHP 7.2

最後に「Disabling old php7.0 in favor of using PHP 7.2」と出たのでこれでいけるかと思いきや、それでもだめ。PHPinfoの内容は変わらずVer7.0のまま。Ver7.0用のmbstringはあるのか調べたら、

$ dpkg -l|grep php7.0|grep mbstring
rc php7.0-mbstring 7.0.33-0ubuntu0.16.04.15 amd64 MBSTRING module for PHP

rcだから、設定ファイルだけ残っているということか。7.0と7.2のモジュールを別々に持つことはできないの?それはちょっと無理か。ここに書いてる7.0.33-0ubuntu0.16.04.15というバージョンがやっぱり気になる。Apacheが7.2を使ってくれないとライブラリとの整合性が取れないよな。

論理的に考えよう。ApacheがどのPHPのモジュールを選択するかどこで定義されている?Apacheのコンフィギュレーションファイルだ。それはmods-availableにあるはずだ。どれどれ、

$ cd /etc/apache2/mods-available/
$ ls php*
php7.0.conf php7.0.load php7.2.conf php7.2.load

うむ、availableに7.0と7.2が混在している。おかしいな、さっき上で「libapache2-mod-php7.2: Disabling old php7.0 in favor of using PHP 7.2」と出たのに。まあいいや、7.0をDisableにしてみよう。

$ sudo a2dismod php7.0
Module php7.0 disabled.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo service apache2 restart

これでどうだ。とりあえずPHPのバージョンは?

ApacheのPHPのバージョンが7.2

おお、無事ApacheでPHP7.2を使ってくれるようになった。これでいけるか?phpMyAdminを再度表示。

phpMyAdminのエラーmysqli

まだだめか・・・。いや、mbstring問題は解決したっぽい。「mysqli拡張がありません」とな。なんかモジュールがないのか?ちょっと調べてみる。

$ dpkg -l|grep php|grep mysql
ii php7.0-mysql 7.0.33-0ubuntu0.16.04.15 amd64 MySQL module for PHP

うむ、PHP用のMySQLモジュールは7.0用のしか入ってないっぽい。当然7.2用のもあるんだろうね。

$ apt-cache search php7.2-mysql
php7.2-mysql - MySQL module for PHP

あるっぽい。じゃあインストール。

$ sudo apt-get -y install php7.2-mysql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
php7.2-mysql
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
117 kB のアーカイブを取得する必要があります。
この操作後に追加で 449 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-mysql amd64 7.2.24-0ubuntu0.18.04.6 [117 kB]
117 kB を 1秒 で取得しました (230 kB/s)
以前に未選択のパッケージ php7.2-mysql を選択しています。
(データベースを読み込んでいます ... 現在 159046 個のファイルとディレクトリがインストールされています。)
.../php7.2-mysql_7.2.24-0ubuntu0.18.04.6_amd64.deb を展開する準備をしています ...
php7.2-mysql (7.2.24-0ubuntu0.18.04.6) を展開しています...
php7.2-mysql (7.2.24-0ubuntu0.18.04.6) を設定しています ...

Creating config file /etc/php/7.2/mods-available/mysqlnd.ini with new version

Creating config file /etc/php/7.2/mods-available/mysqli.ini with new version

Creating config file /etc/php/7.2/mods-available/pdo_mysql.ini with new version
libapache2-mod-php7.2 (7.2.24-0ubuntu0.18.04.6) のトリガを処理しています ...

インストール完了。これでどうだろうと試したが、まだだめ。「PHPの設定をチェックしてみてください」と書いてあるのでFAQを読んでみた。

To connect to a MySQL server, PHP needs a set of MySQL functions called “MySQL extension”. This extension may be part of the PHP distribution (compiled-in), otherwise it needs to be loaded dynamically. Its name is probably mysqli.so or php_mysqli.dll. phpMyAdmin tried to load the extension but failed. Usually, the problem is solved by installing a software package called “PHP-MySQL” or something similar.

There are currently two interfaces PHP provides as MySQL extensions – mysql and mysqli. The mysqli is tried first, because it’s the best one.

う~ん、MySQL接続用のモジュールがロードされてないか。定義ファイル自体はあるよな。

$ ls -l /etc/php/7.2/mods-available/mysql*
-rw-r--r-- 1 root root 71 5月 26 22:09 /etc/php/7.2/mods-available/mysqli.ini
-rw-r--r-- 1 root root 72 5月 26 22:09 /etc/php/7.2/mods-available/mysqlnd.ini

ふむ。mysqlndというのはなんだろう。まあいいや。

$ cat mysqli.ini
; configuration for php mysql module
; priority=20
extension=mysqli.so

mysqli.soというのはextensionとしてちゃんとある。これをどこかでロードするように定義してやるはずなんだろうが、どこかと言ってもphp.iniくらいしかないはずだが。php.iniを見ると、

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename
;
; For example:
;
; extension=mysqli

と書いてあるので、そのとおりにしてみた。注意したのは、これは/etc/php/7.2/cli/php.ini ではなく、/etc/php/7.2/apache2/php.ini の方。

これをやってからApacheを再起動して、リトライ。

phpMyAdmin

ようやくたどり着いたよ。毎回こんなことをしているな。

ログインしてテーブルの中身を表示させようとしたところ、

phpMyAdminエラーSQL

なんか真っ赤になってエラーになった。「サーバー上でいくつかのエラーが検出されました!このウインドウの下を見てください」と書いてあるが、phpMyAdminのコードでWarningが出ているのでこっちの知ったこっちゃない。「無視」というボタンを押したらちゃんと結果が表示されたから、もういいやこれで。

また昨日の夜中に何かやった形跡がある。ブログの常時SSL化は覚えているが(別稿でアップする)、全く覚えてない。自分のブログには記事を書きかけてやっぱりやめたものや、書きかけで保存してそのまま忘れてしまった記事などが下書きとして保存されている。そのうちの1つ、おそらく2年前くらいに書いたと思われる記事が昨日の深夜の日付で保存されていた。以前書いた記憶はある。あ、アップしてなかったかこれ、と思ったが、昨日の夜にこれを見た記憶はない。なんだろうなあ。なんでこれが昨日の夜に編集されてるんだろう。とりあえずアップしておこうか。


これは横浜市から来た「がん検診のご案内」に同封されていた、「よこはまウォーキングポイント」というスマホの歩数計アプリのチラシに書かれていたのだが、

ウォーキングポイント

11%の人が「メタボリックシンドローム」でなくなった!

え?

「亡くなった?」

いやいや違う。

まあそれだけ。