昨日の昼過ぎから、会社で借りてるrapidsiteのVPSサーバがヘンだ。
spanstyle::monologでタグ「MySQL」が付けられているもの
先日までブログツールであるところのNucleusをいじってましたが、イロイロあって昨日からWordPressをいじり始めています。まだ数時間しかいじってないですが、率直な感想としては
すごくいい。
tDiary、Movable Type、Nucleus、WordPressと使ってみましたが、総合的にランク分けするとこんな感じ。
Movable Type(神)
↓
WordPress(スーパーマン)
↓
tDiary / Nucleus(コボちゃん)
だったらMovable Typeだけ使ってりゃいーじゃんてことにもなりますが、WordPressはいい意味でクセ(特徴)が強く、使っていて楽しいツールになりそうです。Movable Typeと比較してみると…
ひょんなことからWindows XPにLAMP環境ならぬWAMP環境を入れなきゃいけなくなったので、PHP4.4.0のインストールメモを残しておくことにする。実はPHPよりも先にインストールしたMySQL4.0.25の方で大きく躓いていたのだけど…(随分前にインストールした環境に上書きインストールしてしまったみたいで、手動でサービス削除&再登録しなきゃいけなかった)。
ちなみにMySQLを再度インストールするにはコマンドラインから
# sc.exe delete mysql
でサービスを削除し、
# /path/to/mysqld.exe --install
でサービスを再登録しないといけなかった。以前のインストールパスと異なる場所へインストールした場合は、上記の設定をしないと、いくらWinMySQLAdmin.exeから起動しようとしても失敗してしまうみたいだ。同じインストールパスの場合はどうなのかはわからんけれど。
MovableTypeを2.661→3.151-jaにアップグレードしたわけですが、実際は以下のような手順でやりましたです。
↓
バックアップファイルの文字コードをEUC-JPからUTF-8に変更&改行コードをLFに統一(なぜかCRLFも混じってたので)して上書き保存
↓
3.151-jaを新規インストール
↓
3.151-jaにバックアップファイルをインポート
MySQLにもダイナミックページにも指定日投稿にも対応してるんで、結構快適になりましたですよ。
でもひとつ困ったことがあって、以前だったら2005年4月30日 15時28分30秒に作られたエントリーだったら
/2005/0430.html
(<$MTArchiveDate format="%Y/%m%d"$>.html)
がエントリーのURLだったんです(※アーカイブディレクトリは/の直下)。
が、これだとアーカイブの種類は必然的に「Daily」しか選べなくなってしまうわけです。同一日付で複数のエントリーがあったら新しいもので上書きされちゃうので、「Individual」はダメなのです。それじゃ困るよなあということで、今回のエントリーのURLは
/archives/2005/0430_1528.html
(<$MTArchiveDate format="%Y/%m%d_%H%M"$>.html)
になるようにして、アーカイブの種類は「Individual」にしました。となると、以前のURL
/2005/0430.html
にアクセスされたらファイルがないので、当然 File Not Found になっちゃいますね。じゃあどうしようかというのが今回のネタです。
このサイトじゃなくて、会社のサイトのこと。
[Dreamweaver MX にて、拡張子が.htmlのファイルをPHPとして扱う方法]
"C:\Program Files\Macromedia\Dreamweaver MX\Configuration\DocumentTypes\MMDocumentTypes.xml"というのが拡張子と動作を関連付けているもの。これを編集する。
1.<documenttype id="PHP_MySQL"~>のwinfileextensionとmacfileextensionに、それぞれ[html]を追加する。こんな感じに。
<documenttype id="PHP_MySQL" servermodel="PHP MySQL" internaltype="Dynamic" winfileextension="php,php3,html" macfileextension="php,php3,html" file="Default.php">
2.さらに、<documenttype id="HTML" internaltype="HTML"~>のwinfileextensionとmacfileextensionから、[html]のエントリを削除する。こんな感じに。
<documenttype id="HTML" internaltype="HTML" winfileextension="htm,shtml,shtm,stm,lasso,xhtml" macfileextension="htm,shtml,shtm,lasso,xhtml" file="Default.html" writebyteordermark="false">
これでHTML拡張子のファイルを動的ページとして扱ってくれるので、ライブデータ表示ができます。ちなみに、phpとhtmlのどちらか一方にのみ[html]のエントリがあるようにしとかないと、起動時に怒られちゃうので注意。ヘルプのDreamweaver拡張ガイドにも載ってました。あと以下参照な。
http://www.macromedia.com/jp/support/dreamweaver/ts/documents/dw0396.html
_ 個人的メモ
てぃ>
これからでんわしまっする。
昨日に引き続き(って全然書いてねーか)、肩コリがひどかったから6時に帰社した。バイナリデータをデータベースに出し入れする方法がどうしてもわからず、気になってしかたなかったので、会社を出たらそのまま書泉ブックタワー2FのPC書籍のデータベース棚へ。
しばらく冷やかした後、棚の向かいに不意に目を向けると、前の職場のご意見番であり、先輩であり、バイナリ世界の神であるところのM氏がいました。このヒトはこれからも独自APIを(自分に)実装していくのかしら、とか不謹慎なことを考えてしまいました。もちろん、話しかけませんでしたけど。
_ <バイナリデータ(画像ファイルとか)のMySQLへの格納方法>
さすがに今月はPHPのマンモス赤本・青本の両方を買ってしまったので、他の本は欲しいけど買えないなあーと思いながら探すと…あったよー。:-)
バイナリファイルをアップロードし、$_FILESに格納
↓
アップロードしたデータをfreadで読み込み
↓
base64()でバイナリ→文字列へエンコード
↓
addslashes()で文字をスラッシュでクォート(←こう書くと意味わかんね)
↓
SQL発行『UPDATE table_name SET file_data=$bin_data where id=2;』
↓
これでデータベースに登録される。さらに
↓
SQL発行『SELECT * from table_name where id=2;』
↓
$data=mysql_fetch_array()で$data配列にデータが格納された行が取得できる。
↓
あとは、入れたときの逆でクォートを取り除いて、Base64でデコードすればバイナリデータが取得できる。
↓
$data['file_data'] = base64_decode(stripslashes($data["file_data"]));
↓
あとはPDFファイルだったら、
↓
header("Content-type:application/pdf");
echo $data["file_data"];
で出力だ。どーだ!
すげー簡単にやったように書いているが、実は帰宅してからあーでもない、こーでもないと試行錯誤した結果、5時間後にやっとできたという事実は、大人だったら見て見ぬふりをするトコロだ。
ここまで書いといてなんだけど、パフォーマンスを考えると遅くなるのは明白だし、何よりデータベースの領域を激しく食らう可能性があるので、この手法はヤメることにした。代わりにファイル名だけ格納して、実ファイルはサーバ上のウェブ公開していないディレクトリに一元格納して、phpファイルにアクセスがあったらGET引数を見てそこから取り出すという手法をとることにした。今決めた。俺が決めた。俺が仕様だ文句あるか!
本日のツッコミ(全3件) [ツッコミを入れる]
_ いしい 『アブネー! 仕事用テストサーバ内のテストページで作ってたphpinfo()のRefererにココのURLが載ってた!速攻でaccess_logから...』
_ tailup 『金曜日に君と晩ご飯を食べた際に財布をなくしたことが発覚しました。いったいどこにあるんだ~』
_ いしい 『うーん、ままや以外に考えられまい。行動範囲はさほど広くなかったはずだから、モイチド調べてみ。』


