m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

PHP 7.2: count()の仕様変更に遭遇している

さくらのVPSを契約して、CentOS7環境を構築中です。

CentOS Linux release 7.4.1708 (Core)
PHP 7.2.1 (cli) (built: Jan 3 2018 08:53:04) ( NTS )
psql (PostgreSQL) 9.6.5

先日の、remi-php72リポジトリの件でようやくほぼほぼ最新安定リリース環境でのweb&db構築ができつつあり、既存システムの動作確認に着手できたのですが、早速PHPのバージョン変更による影響に遭遇したのでそのメモです。

Warning: count(): Parameter must be an array or an object that implements Countable とは

PHPのオンラインドキュメントで、countabe ではない型をカウントしたときの警告によると、

countable ではない型に対して count() (およびそのエイリアスである sizeof()) を使ったときに E_WARNING が発生するようになりました。

とのことです。例えばFuelPHPでこんなコードを書いていました:

if (count(Input::post('foo')) > 0) {
    ~
}

これは、POSTにて受信するパラメータが存在する場合にだけ処理を行いたいときに書いたものですが、そもそもこのfooパラメータを受信しないときには Input::post('foo') はNULLを返すため、countableではないことになり上記のWarningが発生していました。
なので、このWarningを回避するためにコードを変更しています:

if (!is_null(Input::post('foo'))) {
    if (count(Input::post('foo')) > 0) {
        ~
    }
}

もうちょっとスマートなやり方はないかなぁ。

CentOS7にPHP7.2系をインストールする方法

CentOS7に新しいPHPをインストールしようと参考になる情報を探したところ、Server WorldさんのCentOS 7 : PHP 7.1 インストール : Server Worldによると、remi-safeリポジトリからインストールする手順になっているのですが、この方法に乗っかったあとphpPgAdminを追加しようとしたら、PHP5.4系を追加されてしまい「うぎゃーっ」なんて仕事上で久々に叫びましたよ。
そんなわけで、PHPはシンプルに最新版のみにしたいと考え、teratail上でCentOS - CentOS7でApache httpdとPHP7.1を加えた上でphpPgAdminを加えたい(109793)|teratailなどとアドバイスを頂きまして、自分なりに情報整理しようと思いました。

remi-php72リポジトリの有効化が必要

Remi's RPM repository - Configuration wizardにて、「CentOS 7」「7.2.1」「Single version」と入力することで、具体的な手順を示してくれます。

EPELリポジトリの有効化

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm」は実施済みでした。

Remiリポジトリの有効化

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm」も実施済みでした。

yum-utils パッケージの追加

yum install yum-utils」を実行してyum-config-managerコマンドを使えるようにします。

remi-php72リポジトリの有効化

yum-config-manager --enable remi-php72」を実行してremi-php72リポジトリを有効にします。

リポジトリの更新

yum update」を実行します。

phpをどしどし追加

php-*を順次インストール

yum install php-xxx」みたいにして、必要なphpモジュールを追加していくようです。
わたしの場合は、PHP 7.2環境でphpPgAdminを使いたかったので、真っ先に「yum install phpPgAdmin」を実行しました。
f:id:m6u:20180122175519p:plain
このように、php-*っていうパッケージ名でもPHP 7.2系にかわっています。
足りない分を「yum install php-mbstring php-pear php-xml php-xmlrpc」などとして足すことで補いました。