2017年1月8日日曜日

PHPで Fatal error: Arrays are not allowed as constants が発生した場合の対処方法

オフィス狛 技術部です。

弊社は Codeigniter を使ってWebシステムを作る事が多いのですが、
開発(ローカル)環境で作成したプロジェクトをLinuxサーバへ配置し、
いざURLに接続・・・と言う時に、

Fatal error: Arrays are not allowed as constants

が発生する事が多いです。

原因も分かっているので、毎回同じ対応するのですが、
とりあえず記録として残しておこうと思います。

まず、エラーの内容ですが、直訳でも通じる程シンプルで、
「配列は定数として使えませんよ」と言う事です。

配列を定数として使えるのは PHP 5.6 からで、
その前のバージョンでは使用出来ません。

Linux系のサーバーだと、デフォルトが PHP 5.5 というのが多くて、
毎回、サーバーに配置してから気付く、という感じです。

対処方法としては、PHPをバージョンアップさせるか、
それが無理なら、配列を定数として使う事を諦めるしかありません。

今回は、PHP のバージョンアップの手順を備忘録も兼ねて、残しておこうと思います。
なお、以降の手順は CetnOS の場合を想定しています。

1)現在のPHPのバージョンを確認する

何はともあれ、まずは現在のPHPのバージョンを確認します。
$ php -v
PHP 5.5.38 (cli) (built: Nov  9 2016 17:25:01) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
やはりバージョンは5.5 です。

2)異なるバージョンのPHPをインストールする

次は、現状のPHPとは異なるバージョンのPHPをインストールします。
今回は、PHP 5.6 をインストールします。
$ yum -y --enablerepo=epel,remi,remi-php56 install php56

これでインストールは出来たのですが、PATHは通っていない状態なので、下記を実行します。
$ source /opt/remi/php56/enable
ちなみに、「/opt/remi/php56/enable」の中身は、こんな感じです。
export PATH=/opt/remi/php56/root/usr/bin:/opt/remi/php56/root/usr/sbin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/remi/php56/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export MANPATH=/opt/remi/php56/root/usr/share/man:${MANPATH}

次はphpコマンドのリンク先を変えていきます。
現状のリンク先を確認すると、
$ ls -lrt /usr/bin/php
lrwxrwxrwx. 1 root root 14 11月 15 21:42 /usr/bin/php -> /usr/bin/php55
現状はPHP 5.5にリンクされている事が分かります。
では、一旦リンクを外して、PHP 5.6へリンクするように変更します。
$ unlink php
$ sudo ln -s /usr/bin/php56 /usr/bin/php

正しく変更されているか確認します。
$ ls -lrt /usr/bin/php
lrwxrwxrwx. 1 root root 14 12月  3 12:35 /usr/bin/php -> /usr/bin/php56
$ php -v
PHP 5.6.28 (cli) (built: Nov  9 2016 06:57:19) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

これで、Fatal error: Arrays are not allowed as constants が発生しなくなるはずです。


,

0 件のコメント:

コメントを投稿