cakePHPその後
なんとかチュートリアルが動いた記念。
→「付録 A. Cake ブログチュートリアル」
新しいサーバーのテスト環境が出来たのでさっそく試すがまったく動かず。エラーログをみつつあちこち修正。デバッグ用メッセージを出力してみると読み込んだcsvファイルの各カラムの1文字目が文字化けしている。今までSJISで書かれたファイルをPHPで読み込んでから変換していたがEUCに変換済みのファイルを読み込むように変更。やはり本番となると色々問題が出てくるなぁ.
仕事で使っているWebサーバー、そろそろ限界ということで近々ニューサーバーを導入予定。「PHP4にするか5にするか選んでちょ」と言われたがずっと5にしたかったので迷わず5に。とはいえ今動いているプログラムの動作を検証しなくてはならない。ニューサーバーでテストできるのがもう少し先だし修正があるならさっさとつぶしておきたいのでXAMPPを使ってテストしてみた。結果はなんの問題も無くふつーに動いた。きっと俺のプログラムが素晴らしかったからに違いない。そういうことにしておこう。
XMLのパースにPearのXML Unserializerじゃなくてx2p.phpってのを使っているんだけど、ずっとバージョンアップしてないみたいだから動かないかも?と思って心配してたんだけど動いて良かったぞと。
富山で長期入院している友達から俺がmixiで日記に設定している「写真日記」が見られないとのメールが来た。他のマイミクはみんなmixi純正(?)の日記を使っているから携帯でも見られるらしい。
せっかくなのでなんとかする。ま、RSSをパースして携帯電話用にHTMLを生成すればいいだけ。画像は全てFlickrに置いてあるので画像のURLもちょびっといじってサムネイルの方を表示する様に。
PHPでXMLを読み込んでほにゃららってのは仕事で毎日の様にやっているのでささっと出来たが、悩んだのが画像のサイズ。面倒なのでFlickrが勝手に作ってくれるサイズから選ぶことにしたが、Smallの240×180とThumbの100×750。前者は今時の携帯なら十分表示出来る大きさだが容量が35KBぐらいある、後者は5KB前後と容量は小さいが画像も大きさが物足りない。ま、写真日記ってことでとりあえず大きい方に。
で、こんな感じに出来ました。せっかくなのでサブドメインも作ったりして。
携帯版写真日記
http://m.flapro.net
出社すると、間違えて違うディレクトリに画像をアップしてしまったとの報告。上書きはしていないので直接の影響は出ていないとのこと。いらない画像ファイルがあるのは良くないので探し出して削除することに。
今回はディレクトリ名は分からないがディレクトリの階層は分かっていたので簡単なプログラムをPHPで書くことに。
・指定したディレクトリ配下の第一階層にあるディレクトリを全て取得
・各ディレクトリを走査し指定した画像ファイルが存在するかチェック。
・存在した場合ディレクトリ名とその画像を表示。
それをPHPで書くとこんな感じになりました。
//探したいファイルの名前
$filename = "title.jpg";
//検索するディレクトリ
$dirname = ".";
$fp = opendir($dirname);
while(($dir = readdir()) !== FALSE){
if(file_exists("../$dir/$filename")){
//ファイルがあったディレクトリの名前を表示
print $dir."<br>";
//画像を表示
print "<img src=\"../$dir/$filename\"><br>";
}
}
先週辺り突然出会った「PearのCache Lite」、じっくり取り組む余裕が無かったが、今日から制作に入った割と小振りなコンテンツで試す。複数のCSVとXMLファイルからデータを読み込んで表示する俺的にお約束のパターン。CSVから読み込むデータは他のコンテンツでも共通で使っている物なので取り込んだ配列をキャッシュに入れておけば便利かもとか色々考える。
今回は1ページ物だったのでこのページを表示する部分を丸ごとキャッシュに入れて使ってみることに。やることが決まれば作るのは割と簡単。
・指定したIDのキャッシュが存在していればキャッシュから読み込んで表示
・存在していなければ通常の処理をして表示、データをキャッシュに保存。
この流れがもの凄く簡単に出来る。うーん、なるほどこれは便利だ。複数ページへの対応とか考えてみよ。
商品データをCSVからfgetcsv関数を使って読み込んで使っていたが文字化けが発生。どうやら「十(漢数字の10)」の文字で化けているらしい。原因をネットとかで調査。SJISでバックスラッシュ(or ¥)に相当する5Cというコードを含んでいる文字がいくつかあって「十」もその一つだった。CSV中の文字列はダブルクォーテーションでくくっていたので「十」の後ろのダブルクォーテーションがエスケープされてしまい以後の読み込みが変てこに。
まず浮かんだ解決策はCSVの大本のEXCELファイルをEUCにしてもらうこと。CSVから読み込むときにEUC→SJIS変換する必要があるがこれが一番簡単。残念ながら他部署がからんでいるので不可。次の案はCSVを丸ごと読み込んでEUCに変換して別のファイルとして書き出すプログラムを作成、元のプログラムではCSV読み込み時にEUC→SJIS変換をすれば良い。で、これで行くことに。
あたらに作るプログラム
CSVファイルを読み込む
文字コードをEUCに変換
別のファイルとして書き込む
元のプログラムの変更点
EUCに変換されたCSVからデータを読み込んだあとEUC→SJIS変換する
以上。
PHPの参考書
「PHP辞典」
Livedoor番組表と、Amazon Web ServiceをマッシュアップしたAmazdoorと言うのを作りましたが、今回さらにYoutube APIを使って機能を追加しました。Amazdoorはキーワードを入力すると、番組名や出演者、番組紹介文の中からマッチした物を表示して、同じキーワードで検索したamazonの商品を右側に出すというもの。今度はamazonの代わりにYoutubeの動画が出ます。まだ作りかけですけど、久しぶりのエントリなのでとりあえず公開。前回は出演者の名前をクリックするとgoogleで検索になってましたが、今回はその出演者名でAmazdoorTube検索します。
→AmazDoorTubeを見る
毎度おなじみ、おすすめPHPの参考書
はじめてのPHP言語プログラミング入門
[改訂版] PHP ポケットリファレンス
RSSリーダーのおかげでブログやニュースのチェックが効率的になりました。元々はFireFoxやSafariのRSSリーダーを使用してたけど、マシン毎にブックマークを設定するのが面倒で今は「Netvibes.com」を愛用中。RSSを配信しているサイト自体は普及して来た感じだが、職場で周りを見てるいと実際に利用している人はまだまだと言う感じ。来年Internet Explorer 7と共にもっと普及するかな。
となるとそろそろ仕事で運営しているサイトでもRSSの配信しちゃおうかなとさっそく作業開始。元々XMLに入れた最新トピックスをXMLをJavascriptで読み出してトップページに表示しるので、これをRSSに変換すれば良いだけ。他所のRSSを見てみてフォーマットを研究。毎度おなじみ「PHP ポケットリファレンス」を読みながらひたすら作る。元のXMLを読み込んでRSSのフォーマットに書き出すだけなんだけど書き出したRSSが上手く読めない。「Feed Validator」と言うサイトでRSSの有効性をチェックしたり色々調べたらheaderが抜けていた。
header(”Content-Type: text/xml; charset=UTF-8″);
とやって完成。
そうなると気になるのがブラウザのURL入れる所に出てくるRSSフィードアイコン(?)の出し方。アイコンを出したいhtmlのヘッダに
<link rel=”alternate” type=”application/rss+xml” title=”RSS 1.0″ href=”RSSのURL” />
とやるだけ。