2020-01-10

hetemlでPHP5.4からPHP7.3への移設 あれこれ

年始早々下の子がインフルエンザ(A型)にかかって家で看ることになったので、気になっていたサーバ移設作業を行いました。2009年からhetemlというレンタルサーバでホームページ

http://yasuabe.info/

を公開しています。使い慣れた sakura internet に乗り換えようかと検討中でしたが、ドメイン設定など諸々めんどくさそうでそのままにしていました。先日、hetemlから「新サーバー環境への移設メンテナンス計画のご案内」というメールが来て、近いうちに新サーバへ移行しないとダメそうなので、せっかくの機会だからと重い腰を上げて新サーバへの移設を行うことにしました。

以前もPHPのバージョンアップに伴い、PHPのスクリプトを修正する必要がありました。その際、動けばいいやということでPHP5.4に設定しましたが、今回は最新のPHP7.3が推奨されているのでかなりの変更が必要になりそうです。また、そもそも新サーバに替えるのでSSHの設定、フルパスの指定なども変更する必要があります。ただ、hetemlでは新サーバでの動作確認を充分に行ってから移設を完了できるようになっているので助かりました。

まず、移設中はcronの設定はできないので現行のcron設定をコピー保存。つぎに新サーバとのSSH接続を確認(パスワード保存)。さらに、新サーバでのPHPをPHP7.3(CGI版)に変更しました。PHP7.3(モジュール版)だとデバグ作業が困難なのでCGI版にしました。現行のスクリプトはPHP5.4対応のため廃止された関数を書き換える必要があります。特にmysql関数が使えなくなったため mysqli 関数に変更する必要がありました。この際、単に mysql_***をmysqli_***とするだけなら楽なのですが、引数の定義が変わっているため、例えば

mysqli_select_db(\$dbname) --> mysqli_select_db(\$conn, \$dbname)
mysqli_query(\$sql, \$conn) --> mysqli_query(\$conn, \$sql)

と変更する必要がありました。ただし、\$conn = mysqli_connect(\$sv, \$user, \$pass)、\$dbname ="使用するDB名" など。また、split関数はPHP7では使えないのでexplodeに変更。(splitなんて10年以上見ていませんでした!)これらのエラーを表示するにはCGI版にしないとダメでした。モジュール版のほうが動作が速いようですが、新サーバをモジュール版に設定してしまうとCGI版には変更できないのでCGI版のままにしました。

すべてのページが問題なければ移設作業を完了させます。一度完了させると現行のサーバは使えなくなるので充分確認してから移設完了を行いましょう。私は不安だったので近くのスーパーまでペットボトルのゴミを捨てに行ってから再考したあとに移設完了ボタンを押しました!

新サーバへ移設完了後はまずcronの設定を行います。すると、bad interpreter: No such file or directory というエラーが出たので


を参考にして改行コードの設定を変更しましたが同じエラーが出ました。そこで、


で確認したところ、PHPをバージョンアップしたのでスクリプト冒頭のおまじないを #!/usr/local/bin/php54 から #!/usr/local/php/7.3/bin/php に変更する必要がありました。変更後は無事動いてくれました。


を参考にしてサイトのSSL化を行いました。ボタン1つで無料でSSL化してくれたので驚きました。新サーバへ移設しないと無料SSLは使えないのでもっと早くやっておけば良かったです!

最後にhttpsへのリダイレクト処理を行います。

https://blog.heteml.jp/?p=4152

を参考に .htaccessファイルに
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
を追記しましたが、403エラーが出てしまいます。その後、試行錯誤の末


を参考にして上記を
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
赤字部分を挿入して.htaccessファイルを書き換えると無事リダイレクトされました。ふぅ~~。賢明なる皆さんはとっくに新サーバに移設されていると思いますが、移設をためらっている方は参考にしてください。

0 件のコメント: