PHPの新しいバージョンであるPHP7が2015年12月に正式リリースされました。
で、PHP5.6は2018年12月31日でサポート終了するようです。
それに伴い、2016年12月に、さくらのレンタルサーバーでphpのバージョン7(php7.1)が使用できるようになりました。
要するに、早急に新しいバージョンへの対応を検討する必要があります。
残念ながら、ネット記事で今回初めて知りました・・・。
で、さくっと切り替えてみる
切り替えは簡単です。
SSH切り替え同様に「7.2」ボタンを押すだけです。
ありがとう、さくら。
で、案の定、PHP生成のサイトが軒並み白紙です。
コードの修正箇所をphp7ccで調べる
白紙だから、何が悪いのかも分かりません。
ネットで調べると「php7cc」というチェッカーがあるようです。ありがたや!!
インストール方法
composerをインストール
まず、curlコマンドでcomposerをインストールします。
1 |
curl -sS https://getcomposer.org/installer | php |
次に、pathの通った場所に移動します。
1 |
mv composer.phar ~/bin/composer |
インストールが正常に完了してるか確認します。
成功していればアスキーアートでComposerの文字が出てきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.8.0 2018-12-03 10:31:16 Usage: command [options] [arguments] Options: |
これでPHP7への移行箇所を調べるためのツールを使うための準備が出来ました。
php7ccをインストール
次にphp7ccをインストールします。
一般的なサイトで書かれている「global」指定はできません。
1 |
Could not parse version constraint global: Invalid version string "global" |
さくらインターネット上では次のようにします。
1 2 3 |
$ composer require sstalle/php7cc --dev Package sstalle/php7cc is abandoned, you should avoid using it. No replacement was suggested. |
これで環境は整いました。
使い方
次のようなコマンドを打つだけです。
1 2 3 |
$ ~/bin/vendor/bin/php7cc (確認したいファイル).php Checked 1 file in 0.033 second |
で、結果は正常、問題なし。
よかった。よかった!
・・・・。
ちっとも良くない!!
不具合を見つけなきゃ駄目でしょ!!
地道なデバッグ
コードの50%を削除して表示確認を繰り返し、自作関数が原因と分かりました。
で、この関数は外部ファイルとして読み込んでいる自作ライブラリです。
このライブラリのコードに直接php7ccを適用してみると、多くのエラーが見つかりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ ~/bin/vendor/bin/php7cc lib/ライブラリ名.inc File: /lib/ライブラリ名.inc > Line 11: [Error] Removed function "ereg_replace" called ereg_replace(',', ',', $str); > Line 63: [Error] Removed function "ereg" called ereg(' $', $buf); > Line 98: [Error] Removed function "eregi" called eregi($words[$j], $text[$i]); > Line 116: [Error] Removed function "split" called split(',', chop($readbuf)); > Line 117: [Error] Removed function "ereg_replace" called ereg_replace(' | ', '', $buf[1]); ....色々 |
理由は、ereg()、ereg_replace()、split()等が廃止されたようです。
そもそも、PHP5.3.0 で非推奨となり、PHP7.0.0 で削除されました。
とは言っても、このサイトはPHP3の時代から存在してるので知らないよ・・。
1 2 3 4 5 6 7 |
//置き換えると ereg('^s', $str); preg_match('/^s/', $str); //違いはスラッシュで囲む。 //置き換えると split(',', chop($readbuf)); explode(',', chop($readbuf));。 |
とりあえず動作しましたが、このライブラリコピーしまくりで数十個存在してます・・・。
やれやれ。
wordpressもエラー吐いてるぞ・・おい
1 |
Warning: count(): Parameter must be an array or an object that implements Countable in /wp-content/plugins/addquicktag/addquicktag.php on line 150 |
前のバージョンではcount(NULL)に対して0を返していたが、PHP7.2からwarningを出しているようです。
回避策は次のようになります。
1 2 3 |
if (is_array($hoge)) { count($hoge); } |
まとめ
師走らしく大変な感じです。
サイトのコンテンツは増えてないけど、内部の仕組み対応が多いな・・・。