技術メモ

PHPをインストールしたあとからsimplexmlを入れる

とある日のこと。

とあるXMLを返すAPI(つーか、今日びjsonで返して。。)を叩くPHPコードを書いていた際、XMLをパースする関数が全く動かない現象に遭遇しました。ちなみにさくらVPSです。

検索すれども、XMLの形式がおかしいから正規表現で直してからパースさせたり、エラーを出力させてみたり。

そもそもエラーを出す前に500エラーがでてるんですが。。

simplexml_load_file() でやっても simplexml_load_string() でやってもSimpleXMLElementでやっても500エラー。

APIは叩けてて、文字列としてXMLソースはとれてる。

何かがおかしい。

といろいろ調べた結果、simplexmlが入っていないことが判明。つまり、simplexml_load_file() もsimplexml_load_string() もSimpleXMLElementも、何それおいしいの状態だったみたいです。

公式サイトを見ると、デフォルトで有効になっているとのこと。

・・・どーやってPHPインストールしたんだオレ。

つーことで、あとからsimplexmlをインストールしたつめあとを残します。

1.公式サイトで手順を確認

公式サイトによると、

composer require ext-simplexml

してね。とのこと。

よし。意気揚々と実行。

composer入ってねー。とエラー。

2.composerインストール

こちらのサイト様を参考にさせていただき、インストール。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

再度

composer require ext-simplexml

しても、ext-domがねーよってエラー。

3.php-xmlインストール

yum install --enablerepo=remi,remi-php70 php-xml

するも、さくらVPSにリポジトリがない。。

4.さくらVPSのyumが参照するサイトを変更する

さくらVPSのyumはさくら指定のサイトを参照するようになっていたので、ミラーサイトに変更します。

【変更するファイル】/etc/yum.repos.d/CentOS-Base.repo

デフォルトではこうなっているので

baseurl=http://ftp.sakura.ad.jp/pub/linux/centos/$releasever/updates/$basearch/

コメントアウトして以下に変更します。※ミラーサイトは例です。

baseurl=http://ftp.riken.jp/Linux/centos/$releasever/os/$basearch/

http://ftp.jaist.ac.jp/pub/Linux/CentOS/$releasever/os/$basearch/

http://ftp.iij.ad.jp/pub/linux/centos/$releasever/os/$basearch/

5.simplexmlインストール

Packagistでsimplexmlを探す。

composer.jsonは以下でインストールしてみました。

{
    "require":
    {
        "halilim/xml-iterator": "^1.0"
    }
}
composer install

入った。。見事にXMLパースできました。

つーか、PHP公式で載ってる

ext-simplexml

なんてパッケージないです。。