とある日のこと。
とある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
なんてパッケージないです。。