システム担当のGucciです。
先日TwitterOAuth+PHP+MySQLの開発環境でDBから指定した情報をCronを使ってランダムでツイートするTwitterBotを開発しました。
TwitterBot自体はもう結構前からいろんな人が開発していて、今更感もあり、あえてブログ記事にはしなかったのですが、それなりに満足するオリジナルなTwitterBotが完成しました。
サクる公式Twitter(@circru_com)で運用しているので興味ある方はそちらをご覧ください。
その開発のプロセスで下記のようなエラーが発生し、先に進めれない不具合(?)が発生しました
PHP Parse error: syntax error, unexpected '[' in /home/hogehoge/public_html/twitter/twitteroauth/src/TwitterOAuth.php on line 129
はて?何のエラーだ?
っていうのでいろいろググってみたのですが、それらしき答えが見つからず、頭を悩ませていたのですが、どうやらこの不具合が出るのは使っているPHPのバージョンがTwitterOAuth の基準より低い時に起こるよっていう記述を見つけました。
TwitterOAuth を調べてみるとPHP5.6が必要とのことだったので使っているサーバーのPHPのバージョンを調べるとPHP5.3.3
「ぉ、ぉう。。。これか。。。」
てな具合でこれが今回のブログのタイトル「CentOSにyumを使ってPHP5.3をPHP5.6にアップデートしてみた!」になった経緯ですw
では本題に戻ります
実際にCentOS6.xに入っているPHP5.3をPHP5.6にアップデートしようとすると結構これがめんどくさい作業があります
これはPHP5.3からPHP5.4にアップデートする時も同じなのですが単純に
% yum update php
なんて淡い期待をして打ってみてもアップデートされません。。。
yumを使ってPHPをアップデートするにはリポジトリでyumを拡張する必要があります。
そうしないとどんなに打ち込んでもアップデートしてくれません。
そして、この「リポジトリでyumを拡張する」これがこんなに問題を抱えるなんてここでは思いもしませんでした。
今回はCentOS6.x系でPHPをアップデートするために必要なepelとremiのリポジトリで拡張します
% sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm % sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
ぐいぐいーっと進んでいきます
無事にリポジトリをインストールできましたらこのリポジトリを使って次にyumでPHPをアップデートします。
今回はPHP5.6にアップデートすることが目的なのでシンプルなコマンドを書きますが、PHP関連でインストールしているものがあれば、追加してください
% yum install --enablerepo=remi --enablerepo=remi-php56 php
これで無事にPHPのVer.がPHP5.3からPHP5.6になったと思います。
そう!
ここまではこれでよかった。。。
私もこれでいいと思っていた
実際にこの後、TwitterOAuthを使ったPHPプログラムは正常に動作し、今も自動で昼夜問わずつぶやき続けている。
なにをもったいぶってんだ?ってお叱りを受けそうなので進めますが、人間というのはなにか1つでも最新のバージョンにアップデートすると、ほかにもアップデートできるものがあるんじゃないの?って思ってしまうことありませんか?
私は思ってしまいました。
私がPHPのプログラムを作る際によくというか必ずPEARを使っています。
今インストールしているPEARのパッケージでアップデートできるものがないか、確認してみることにしました
コマンドはこちら
% pear list-upgrades
ずらずらっとインストール済みのパッケージの一覧に現在インストールされているバージョンと最新バージョンが表示されると思います。
あるよあるよ
最新バージョンが!!
っていうことで、ここでもまた何も考えずにPEARのパッケージのUPGRADEをやってみることにします
コマンドはこちら
% pear upgrade [options] ...
見なれたコマンドなのでささっと打ち込んでエンター!ペン!!
Upgrade Error…
「は?」
「え?」
「なんで?」
「ははーん スペル間違いだな!!」
もう1回よく見てパッケージ名も間違わずに、1個ずつ。。。
えんたーーー!ペン!
えらー。。。
「はいーーー?(杉下風)」
ここから考えること10分。。。。
UpgradeをできないならInstallとか別のコマンドはどうなんよ?
ってことでPEARのパッケージでまだ入れていないパッケージをインストールしてみましたが、これも同じエラーで帰ってきました。
じゃぁアンインストールは?
エンター!!ペン!
ずずーーぅ complete!
「おおお!!アンインストールはできた!!」
10秒後
嫁「ねぇねぇ、なんかサイト表示されなくなって500エラーって出てるんだけど。。。」
私「あああああああああああああああああああああああああああああああああああああ」
そうです。必要なパッケージをアンインストールしてしまったばっかりにサイトが表示されないことに。
慌ててアンインストールしたパッケージをインストールすることに。。。
ここで感のいい人なら気づいたかもしれません。
そうです。
インストールできないからアンインストールを試したんですw
実際に一度アンインストールしたパッケージをインストールしようしてもエラーでインストールできません。
SSHに流れるソースを見ているとダウンロード自体はうまくいってるらしくファイルも指定された場所に落ちてきています
と、いうことはPEAR側のサーバーが壊れてるのではなくて、
落としてきたパッケージをインストールできないということ。
なにが考えれるか、ゆっくり考え直すことにしました。
ここでいきなり神が舞い降ります
「あ!」
そうPHP5.6にアップデートした時です!
上にも記述しましたがPHPをyumを使ってアップデートした時にPHPしかアップデートしていませんw
PEAR自体のアップデートをしていないんです
慌てて
% yum update php-pear
って打ってみます
エラー!。。。
「はいー?」
「なんで?」
「うーーーん。。。」
「あ!」
ここでもまた神が舞い降ります。
「PHP5.6にアップデートした時にリポジトリ使ってんじゃん」
そうなんです
ここでようやく「CentOSにyumを使ってPHP5.3をPHP5.6にアップデートしてみた!その結果。。。」がやってくるんです
% yum update --enablerepo=remi --enablerepo=remi-php56 php-pear
こういう風にコマンドを修正し、アップデート
無事PEARがアップデートできました
ここからはPEARのいつものコマンドでインストールもアップグレードもできます。
リポジトリを使ってyumでPHPをアップデートした時はこういう落とし穴がありますでのご注意ください。
いい勉強になった。。。