XML_Unserializerについて

PHP5になったのでPEARのXML_Unserializerを使用しなくてもAPIに対応できそうですが、今までPHP4の時に使用していたので修正する時間もないので継続して使用しています。

ところであるAPIが文字コードshift_jisで出力されているようでXML_Unserializerで文字化けとなりました。

そこで以前、経験したようにXML_Unserializerのオプションを使用してコードをUTF-8に変換するとUTF-8でAPIを配列に出力してくれます。
require_once "XML/Unserializer.php";
$xml_data = file_get_contents(’リクエストURL’);
$parser = new XML_Unserializer(array('parseAttributes' => true,'targetEncoding' => 'UTF-8'));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();

これで後は配列$XMLから取り出した変数をHTMLに書き出せばいいのです。
対象のHTMLはshift_jisなので配列$XMLの出力をUTF-8からshift_jisに変更しなくてはいけません。

mb_convert_encodingはひとつの文字列ごとの変換でのでコードが煩雑になるなと思って配列$XMLを一括してshift_jisに変更する方法はないかと探したら

mb_convert_variables
がありました。PHP関数リファレンスによると
「エンコーディング from_encoding の変数 vars をエンコーディング to_encoding に変換します。 」
「vars(3番目以降の引数)は、変換する変数への リファレンスです。文字列、配列、オブジェクトを指定することが可能です。 mb_convert_variables() は全てのパラメータが 同じエンコーディングを有することを仮定します。 」
ということで

mb_convert_variables("Shift_Jis", "UTF-8", $XML);

とすることで配列$XMLが一括でShift-Jisに変換。

サーバー移動完了

サーバーをPHP5対応に移動しました。
しかし、サイトのすべてにチェックがいき届いていません。

PEARのインストールからPHP5.1から5.2へのアップグレードまでサーバー自体の設定を試行錯誤しながらやってきましたのでそちらに手がかかりすぎたようです。

これから時間をみつけては手直しを行って行きたいとおもいます。

yomiサーチも設置変更しましたが、設定で管理者の許可で登録するはずが、すぐに登録できるようになっていました。現在は設定を直しましたが、9月初旬の登録のうち、申し訳ありませんがサイトの趣旨に合わないので岡山に関係のないものは削除させていただきます。

サーバー変更の準備

サーバーの変更を予定しています。

現在のサーバーはPHP4での動作ができますが、PHP5は動きません。

PHP4は既にサポートサービスも終了し、順次PHP5への移行をしなければなりません。

しかし、このサーバーはPHP5へのバージョンアップは対応できないのです。

やむをえず別の会社のサーバーを探しています。

動きの悪くなったパソコンをWINDOWS7 64ビット搭載のパソコンを購入してメインのパソコンにし、サーバー移行の準備を進めています。

まずはローカルの環境をということで、使い慣れた「AN HTTPD」を導入使用と思いましたが現状では64ビットには対応していませんでした。

そこでXAMPPの最新バージョン1.7.3をインストール。

参考にしたのは

XAMPP をWindows 7 RC 64-bit に導入

[XAMPP]WinXP ローカル環境で複数ドメイン管理

のふたつのブログ。おふたりに感謝します。

ところで、XAMPPの以前のバージョンではPHP4とPHP5の二つが入っていて切り替えできるようになっていましたが、バージョン1.7.3ではPHP5のみです。それでも作成済みのものをローカル環境で実行してみましたがエラーだらけ。

その原因を探しているうちにある事実に気がつきました。

XAMPPの1.7.3はデフォルトでPHPのショートタグを実行��きない設定になっている!

<?= $test ?>とか<? echo $test; ?>ではだめで

<?php echo $test; ?>

のような記述でないとだめだということです。

PHPプロのショー トタグ形式によると「XMLとの衝突を避けるために、今では<?phpで始まることが推奨されている。」ということでした。

PHP.iniを変更することで対応は出来そうですがこの際すべて正規の記述にへんこうすることにしました。

PEARがときどき動かなかった原因

PEARがときどき動かなかった原因はどうやらサーバーのメモリー不足のようでした。

最近PEARの動作不良以外にCGIの動作もときどきサーバーエラーとなり、FTP接続も一時的にできなくなる現象が起き、さらにはメールの受信もできなくなっていたのでサーバー管理会社に調べてもらいました。

その結果、サーバーのメモリー割り当てが不足していたことが原因ということでメモリー割り当てを増やしていただきました。

とりあえず様子をみることに。

PEARが働かない?

最近PEARを使ったプログラムが時々働いていません。

API関係はすべてPEARを使っているので全滅です。

サーバーの負荷の問題?

原因は不明ですが、調子が悪いです。

対策として、PHP4でも使えそうな

http://keithdevens.com/software/phpxml

のPHP XML Libraryを使ってみようと思います。

岡山WEBブログのバージョンアップに関して

岡山WEBブログは、wordpressを使用しています。
これまでのヴァージョンはME2.2でした。
ME2.2からは、データのバックアップがやりやすくなっています。データはMYSQLというデータベースに保存されるようになっていますが、このMYSQLがなかなか難解です。それは日本語という文字データの受け渡しです。レンタルサーバーの場合はなおさらやっかいです。それは、MYSQLの設定、それを読み出す時に利用するPHPの設定が自由にはいかないことです。このブログをおいてあるレンタルサーバーでは、通常MYSQLのデータを見るためのPHPMyAdminを使います。それを使ってエクスポートすると、文字化けという現象がおきました。それは以前のバージョンの時は、バージョンアップするために記事を、ひとつひとつコピペという手作業で移し変えたりもしていました。その時はデータ数も多くなかったのでそれでも良かったのです。
2.2MEからは、それが改善され、WORDPRESSの管理画面からデータのバックアップがXML形式でできるようになっています。そのデータは文字化けはしていません。
しかし、2.2MEでも、PHPmyadminでみると文字化けしています。なぜかデータベース照合手順がlaten1_swedish_ciになっていて英数字以外は文字化けして見えるのです。WEB上のブログでは文字化けはしていませんが、MYSQLをみるためのツールでみると文字化けしてしいたのです。
そして、今回、2.5.1にバージョンアップした結果、PHPMyAdminでみてみると、照合手順がutf_general_c1となっていて内容もすべて確認できました。文字化けは解消しています。
感想として、日本語対応がスムーズになって安心して使えます。WORDPRESSの日本語化に携わった方々の努力に感謝したいと思います。

岡山イベント情報の更新

岡山イベント情報を更新しました。
このイベント情報は、岡山県観光物産課の情報を元にしています。以前、岡山県庁に用事があって行ったときに、岡山県のホームページにでているイベント情報を使わせてくださいとお願いしたら、ぜひ使ってくださいという返事を頂きました。
表形式の岡山イベ��ト情報を、CSV形式のファイルにして、確定情報だけをfeedcreator.class.php
を使って、RSS2.0に変換し、それを、PEARのUnserializer.phpを使って、HTMLで表示させました。

feedcreatorは、RSSフィード生成用のライブラリですが、ウノウラボさんの紹介情報などが参考になりました。

EC-CUBEのインストール

このサイトを設置しているサーバーに、EC-CUBEをインストールしようと1週間くらいまえから四苦八苦していました。EC-CUBEはPHPで書かれたECオープンソースのショッピングシステムです。
説明を見ると、「株式会社ロックオンが2000年の創業以来、手がけてきたECサイト構築により培ったノウハウ(モジュール群)をオープンソースとして提供したECサイト構築パッケージです。」ということでインターネットショッピングのホームページを構築するすべてがこのプログラムで無料でできるということです。
とうことで、インストールにチャレンジしました。
要件としたら、PHPが4.1以上、MySQL4.1以上などが必須ですが、一応満たしているようなので、早速インストールしてみました。
しかし、インストールが成功して、管理画面に移りますいうところで、画面が真っ白に。
この原因が分かるまでに2~3日はかかりました。インストールは成功しているようなのですが、FFFTPでサーバーにアップロードしている以外にインストール作業を通じて作成されているホルダーとファイルが出来ています。その所有者をFFFTPで見てみると、本来の所有者ではない「apache」という名前になっていました。特にSmarty/template_cの中に生成されています。それを一度、ローカルにダウンロードし、サーバーに生成していたファイルとホルダーを削除して、ローカルからアップロードして属性を書き込み可に変え・・というようなことをすると真っ白な画面がログイン画面に。

つぎに苦労するのは、クレジットシステムの導入です。最初から本体についていればいいのですが、クレジット決済については、後付でモデュールとして取り付けるようになっているようです。おそらくバージョンが変わっていくと、最初からマニュアルで付くようになると思います。
決済システムは、EC-CUBEの置いてあるロックオンから無料で購入する形をとるので、ECCUBE2.0を設置したURLとメールアドレスが必要です。そしてメールアドレスに届いたKEYを管理画面に入力設定してダウンロードしてインストールします。この作業が管理画面からの自動作業なので、分かりにくい。マニュアルならダウンロードしたファイルをどこにアップロードしてどういう処置をして、設定できるということがわかるのですが。
このようなエラーがでて設定失敗です。

/var/www/vhosts/ドメイン名/httpdocs/data/downloads/backup/update_1205473883/
詳細 バックアップディレクトリの作成に失敗しました

そこでEC-CUBE開発コミュニティというユーザー交流サイトで同様なエラーを調べると、どうもPHPのSAFTYMODEが原因になっているようでした。
PHPのSAFTYMODEがONになっているとプログラム書き込みの所有者と本来のプログラムの所有者が異なっていた場合に処理を続行してくれないようになっているようです。
EC-CUBEは本来の所有者名でないapacheという所有者でファイルができるようなのでそこに原因はあるようです。
これはもうどうしようもないとあきらめかけていたのですが、safemodeで検索をかけて調べていたら、このサーバーは仮想専用サーバーで、pleskで管理しています。pleskのドメインの管理画面からphPのsafemodeが選べるようになっていることが分かりました。
そこでsafemodeのチェックを外してトライアルするとZEUSの設置は一応できました。
とりあえずこれでEC-CUBE2.0のインストールはできた。ということです。疲れました。

APIで悩みました

今、アフリエイトサービスにAPIを利用できるところができています。なんとかAPIをPHPを使って利用できるようになってきたので、LINKSHAREのクロスオーバーサーチ(リンクシェア・Webサービス)を申し込み、アクセス許可のトークンをいただきました。
そして、いつものようにPEARのXML/Unserializer.phpというユーティりティを使ってみたのだけれど文字化けするのです。今まで、アマゾンでも、リクルートのWEBサービスでも利用できたのに・・・。XMLのソースをみると日本語がUNICODEという記号になっています。いままでこんなことはなかったのに、ということで、半日悩みました。
 それで、他にリンクシェアのクロスオーバーサーチを活用しているところがないかと検索したら、「LinkShare Technical 」を見つけました。こちらはPHPのソースも公開しておられるのでダウンロードしてみました。よく出来たプログラムで、私のような初心者には大変勉強になります。PEARのXML/XML_Tree_Ex.phpを利用していましたが、基本は一緒なので、よくみると、URLからXMLを読み込んで出力する時に「UTF-8」というオプションコードを加えていました。
今まで、PEARのXML/Unserializer.phpでは別に加えなくても支障なく配列に出力してくれていましたが、試しに
$parser = new XML_Unserializer(array('parseAttributes' => true,'targetEncoding' => 'utf-8'));
と書いて見ました。結果は文字化け解消です。
自分の記憶に残るよう、書いておきます。LinkShare Technical さんありがとうございました。

JSONについて

無料のAPIサービスを調べていたら、星占いに関するものが見つかった。

Web ad Fortune 無料API

というサービスです。
占いデータを http://api.jugemkey.jp/api/horoscope/free に GET リクエストを送ると、データを JSON フォーマットで取得できるというものです。フリー百科事典『ウィキペディア(Wikipedia)』によると、

「JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語である。

JavaScript言語以外でのほとんどの言語において、JSONは単純な処理で書き出しや読み込むことができる。

とあるので、今まで、APIをXMLで受け取っていたのと同様に利用できるようでした。では、PHP4で利用できる、JSONを処理するためのツールがあるのではと思い、検索したところ「Jsphon」というPHPで書かれたJSONライブラリが見つかりました。日本語との相性もいいようなので、早速、PEARコマンドでインストール。デコード処理を、試したところ、きちんと配列で返してくれました。ここまでくれば、後は、配列をHTMLに配置するだけです。「Jsphon」の作者の方に感謝します。とりあえず、今日の星占い1に載せてみました。

We love WordPress
One in a Million Theme by WordPress theme