2012年6月26日火曜日

php4でのxml処理

  • このエントリーをはてなブックマークに追加

この時代でも、たまにサーバによってはphp4で動いているとかがある。
正直早くサーバ変えてくれよとか思うけれどもしょうがないなぁと思いつつ、
とりあえず今回はphp4でのxml処理。

基本的にphp5だったら$simplexml = simplexml_load_file(xmlのパス)って書き方でいけるけど、
php4ではよくわからない作業をしてたりで、うまく取れなかったりとかになってしまう。

そこで色々とネットで調べていたらphp4でも楽にできるようなライブラリがあるとのこと。
ということでパっとみて2種類あったので書いてみる。↓



■XML_Unserializer
PEARのライブラリの一つってことみたいで、下記からダウンロードできるみたい。

XML_Serializer

ダウンロードできるのは説明書?みたいなものだけだった。
windows環境なのがだめなのか何なのかよくわからないが、
他のブログとかに書かれているのって誰かが書いたのをコピペしたのではないかと疑ってしまう。

ということでXML_Unserializerはあきらめた。

■Keith Devens .com - PHP XML Library, version 1.2b
次にいろんなブログで書かれていたものがこちらのもの↓

PHP XML Library

source codeってところがあったので、そこの内容をコピペしてxml.phpというのを作成。
使い方は下記になるとのこと。

<?php 
include('xml.php'); 
$data = XML_unserialize($xml); 
?>

ということで試してみたけれどもエラーが出てきた。↓
<?php 
include('xml.php'); 
$data = XML_unserialize("test.xml");
print_r($data);
?>

Fatal error: Cannot pass parameter 1 by reference in ●● on line 3
どのブログも同じようにしか書いてないけど、パスを直接書いてはだめとかわかってるのかな?と思った。
というか他のブログで書かれているようなことをコピペしてるのかな?って感じ。
ちなみに下記のように書いてももちろんダメ。(真っ白になる)
<?php 
include('xml.php');
$xml = "test.xml";
$data = XML_unserialize($xml);
print_r($data);
?>

ということでこれの正しい書き方はこんな感じ↓
<?php 
include('xml.php');
$xml = file_get_contents("test.xml");
$data = XML_unserialize($xml);
print_r($data);
?>

基本的に今の時代php4でやるっていうのは少ないんだし、
php5だったらsimplexml_load_file(xmlのパス)って感じで処理できちゃうから、
一応こういうのは正式な書き方でブログに載せるべきだと思う。
公式サイトのほうにも載ってないからっていうのはあるけども、
エンジニアでなおかつ人に広める以上はちゃんと書くべきではないのかな。

ちなみにsimplexml_load_fileとかみたいにでてくるのではなくて、下記のような感じで出てくる。
<?php 
Array
(
[main] => Array
  (
    [item] => Array
      (
        [0 attr] => Array
          (
            [name] => aiueo
            [attr1] => 0
            [attr2] => 0
            [attr3] => 0
            [attr4] => 0
            [attr5] => 0
          )
        [0] => 
        [1 attr] => Array
?>

simplexml_load_fileとはもちろん形式も違うから取り出し方も変わるわけだし、
やっぱこういうのはちゃんと載せておくべきだと思う。


でもまぁその前にphp4とか昔のサーバがなくなればいい話だけど。

Adsense