PHP5.6 が EOL(4)
少しでも移行が楽になるよう、php7ccをインストールしてみた
PHP5.6からPHP7へ移行する際の修正として、このBlogの場合は以下の項目がありそうだ。
- MySQL拡張(mysql関数)をMySQLi拡張(mysqli関数)に変更
- ereg()関数をpreg_match()関数に変更
- 短縮形式タグ "<? ?>" は非推奨のため使用を止める("<?=$変数名?>"は使っても良いようだ)
PHP7で削除された機能は他にも色々あるので、漏れがないよう全ての修正箇所を洗い出しておきたい。という事で、php7cc という互換性チェックツールを使ってみることにした。
しかし、php7cc をダウンロードしてインストールという簡単なものではなかった。先ず、PHPのパッケージ管理ツールの Composer というものをインストールする必要があり、Composer を使って php7cc をインストールするという流れになる。
1) Composerのインストール
Composer のインストール手順はDownload Composerに従った。
$ /usr/local/php5/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ /usr/local/php5/bin/php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
$ /usr/local/php5/bin/php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 1.8.3) successfully installed to: /Users/hoge/composer.phar
Use it: php composer.phar
$ /usr/local/php5/bin/php -r "unlink('composer-setup.php');"
|
この後、"composer.phar" をPATHが通っている場所(例えば"/usr/local/bin/"など)にコピーしておくと良いとのことだが、今回は php7cc をインストールしたいだけなので、このまま使用することにする。
2) php7ccのインストール
$ PATH="/usr/local/php5/bin:$PATH"; ./composer.phar global require sstalle/php7cc
Changed current directory to /Users/hoge/.composer
Using version ^1.2 for sstalle/php7cc
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Installing bcncommerce/json-stream (0.3.0): Downloading (100%)
- Installing nikic/php-parser (v1.4.1): Downloading (100%)
- Installing psr/container (1.0.0): Downloading (100%)
- Installing pimple/pimple (v3.2.3): Downloading (100%)
- Installing symfony/finder (v3.4.21): Downloading (100%)
- Installing psr/log (1.1.0): Downloading (100%)
- Installing symfony/debug (v3.4.21): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.10.0): Downloading (100%)
- Installing symfony/console (v3.4.21): Downloading (100%)
- Installing sstalle/php7cc (1.2.1): Downloading (100%)
symfony/console suggests installing psr/log-implementation (For using the console logger)
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
Package sstalle/php7cc is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
|
インストールが成功すると、"~/.composer/vendor/bin"の配下に php7cc があるので、ここへPATHを通す。
$ ls -l ~/.composer/vendor/bin
lrwxr-xr-x 1 hoge hoge 28 2 2 19:53 php7cc -> ../sstalle/php7cc/bin/php7cc
$ export PATH="~/.composer/vendor/bin:/usr/local/php5/bin:$PATH"
|
これで php7ccが使えるようになる。使用方法は、
$ php7cc --help
Usage:
php7cc [options] [--] <paths> (<paths>)...
Arguments:
paths Which file or directory do you want to check?
Options:
-e, --extensions[=EXTENSIONS] Which file extensions do you want to check (separate multiple extensions with commas)? [default: "php"]
-x, --except[=EXCEPT] Excluded files and directories (multiple values allowed)
-l, --level=LEVEL Only show messages having this or higher severity level (can be info, message or warning) [default: "info"]
-r, --relative-paths Output paths relative to a checked directory instead of full paths to files
--integer-size=INTEGER-SIZE Target system's integer size in bits (needed for bitwise shift checks) [default: 32]
-o, --output-format[=OUTPUT-FORMAT] Output format (plain, json) [default: "plain"]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Checks PHP 5.3 - 5.6 code for compatibility with PHP7
|
3) php7ccを使ってみる
$ php7cc admin include module object
File: /Users/hoge/Sites/module/counter.php
> Line 19: [Error] Removed function "eregi" called
eregi('nava21.ne.jp', gethostbyaddr($_SERVER['REMOTE_ADDR']));
Checked 81 files in 16.289 seconds
|
php7cc のパラメタに、phpファイルやphpファイルが入っているディレクトリを複数指定して一気にチェックすることができる。こんな風に検出した互換性の問題が表示され、最後にチェックしたファイル数とかかった時間が表示される。
|