CLIで動かしてみてるんだけど、どうもcygwinとcentosのPHPでxpathの挙動が微妙に違う。なんでだろう

時間がある時、windowsにインストールしたwindows上で動くLinuxっぽい何かで、PHPのプログラムを作成するわけだが、そのファイルを実際にcentos7のサーバーへ入れて動かしたところ、xpathの部分で何度もエラーが返ってきて止まる状況が確認できた。

作って動いた部分をそのまま移植したにも関わらず、何度もエラーが出るので、チェックしたところ、xpathの挙動がcentos7とcygwinのphpでは書式というか作法が違うらしきことがわかったのでメモしておく

cygwinでは配列だが、centos側ではオブジェクトで指定しないといけない

以下がcygwin側のPHPで実際に実行できたプログラムの一部分

//cygwin上のphpで動いた部分
$tmp=$xpath->query('//h1[@id="title"]');
echo $tmp[0]->textContent;

上記は実際にcygwin上で作ったファイルで、これでしっかりと<h1>内のテキストが取得できた。ところがこれをcentos7上で実行したところ、「Cannot use object of type DOMNodeList as array」というエラーを吐き出すことになった。配列として使えん的なそんなエラーなんだろう。

そんなことで、今度は以下の内容に変更してみた。

//centosで動いたもの
$tmp=$xpath->query('//h1[@id="title"]');
echo $tmp->item(0)->textContent;

すると、今度は正常に動いた。PHPでも環境で動きが違うのだなぁと思ったので以上、記録を取っておくことにした。

コメント

cygwinは、linuxっぽい何かですしね