トップ > PHPことはじめ >

PHPによるWebプログラミング


はじめに

PHPで開発する方のための情報です。 VCやVB,DelphiなどのWin32プログラミングの経験があって,これからWebプログラミングに挑戦したい, という方に役立つ情報を掲載しています。
(2004年10月作成,2006年7月19日更新)
(お問い合わせ) http://www.cba-japan.com/
(最新情報) http://douzo.seesaa.net/
(SD Studio) http://hp.vector.co.jp/authors/VA035840/

PHPとは

日本PHPユーザ会によると「高機能なWeb- DBアプリケーションを容易に作成できるスクリプト言語として 普及しつつあるPHP(正式名称 PHP:H ypertext Preprocessor)」です。
原作者(Personal Home Page Tools、PHP/FI)はグリーンランド生まれの Rasmus Lerdorf さん。( bio 参照。)その後を引き継いでPHP3.0以降を作成した開発者たちが作ったのが、 Zend Technologies社 です。日本には ゼンド・ジャパン株式会社 があります。 最近のWebサイトは、商品を注文したり、情報をリアルタイムで表示したりとさまざまな機能があり ますが、PHPはその裏側を支えるプログラム言語として、手軽に利用できます。またレンタルサーバでも たいていのところでサポートしています。 ほとんどのOS(UNIX,LINUX,Windows,Mac……)で動くため、運用時の選択肢も多く存在します。
PHPの学習には、自分のPCに Apache (サーバ構築ソフト)と MYSQL (データベース)、そして PHP を一通り入れてみるのがよいと思います。すべて無料で入手できます。また、ソースコードが公開されているため、 問題が発生した場合は、原因をソースコードレベルまで追求することも可能です。また、世界中の開発者に よって、常に問題が修正されています。
MYSQLを使う方は、 phpMyAdmin を入れましょう。データベースの内容を確認するのに非常に便利です。 全部をインストールするにはかなりの時間と労力がかかりますが、設定の仕方は覚えて損はありません。最近、 こうした上記のツールを一括インストールするための XAMPPというプロジェクトが便利になりました。 あちこちで評判になっていますし、わずかな労力でインストールできてしまいますので、これでPHPをはじめるのもよいと思います。でも、オープンソースは頻繁にアップデートされますので、 自分で個別にインストールできるスキルを持つことも大事です。
あの「C言語による最新アルゴリズム事典」の著者、奥村晴彦さんが、PHPの入門講座を書いていらっしゃいます。
PHPによるWebプログラミング
分かりやすい、最初のチュートリアルとしてお勧めです。

MsgBox(メッセージボックス)的なデバッグ

現在の変数の値を表示させるために、VBならMsgBox、DelphiならShowMessageを使うのが、 いちばん手軽なデバッグです。PHPで同じことをするにはどうするか、というと、
echo, print_r, var_dump といった関数を使います。
皆さん、見やすいデバッグを各自で工夫されているようです。ただのテキスト表示にストレスがたまってくる方は、 debuglib.php などのツールをどうぞ。

ブレークポイントを使ったデバッグ

Win32プログラミングと同じように、途中でブレークポイントを入れたり、ステップ実行できるようなデバッグをしたりする ツールとして DBG があります。オープンソースです。ただし単体では動作しません。“何かの”統合環境と組み合わせて使用 します。その“何か”ですが……

開発環境は?

Delphi や、 Visual C++ などには統合開発環境(IDE)がありますが、PHPでは、100人が100人使用しているIDEという ものがありません。エディタで書けば十分、と書いているサイトがいくつもあります。しかし、 やはり開発効率が変わってきますから、何でもいいってことはないだろう、と思い、しばらく調査を 続けたところ、こんな事が分かりました。
PHPの開発パターン
レベル(1)→汎用エディタ(秀丸エディタなど)を利用して書く
レベル(2)→PHPの構文、単語が入力できるエディタを利用する
レベル(3)→DBGによるデバッグ環境を組み込んだ統合環境を使う

(1)に関しては、 Vectorの「テキストエディタ」 を見れば、それこそ星の数ほどあります。
(2)に関しては、KJさんという方が、 PHPエディタ というフリーウェアを公開されています。Windows上で使える、日本での最も手軽な開発環境としての一押しソフトです。
(3)に関してですが、海外ではどのようなソフトが出回っているのかと調べたところ、 www.php-editors.com というサイトがありました。世界中からのPHP作成環境が紹介されています。(2)に該当するものも多数ありましたが、 DBGを組み込んだツール(Free)としては、
マグマスタジオFree版があります。
PHPEdit
もインストールして損はないツールだと思います。Maguma Studioのほうは日本語が SJIS表示できましたが、PHP Editのほうは文字化けしてしまいました。フォントの変更もできません。しかし、PHPEditのほうからは、現在、PHP5に対応すると共に、 Unicode化を進めているという情報が来ましたので、今後に期待できるかもしれません。また、PHPEditは、Delphiソースが公開 されています。時間があれば自分で日本語を通るようにするんですが……。Delphi 7 Professionalで うまくビルドできませんでした。(^^ゞ。
(※magumaのサイトを見てみると、Maguma OpenStudioとして2005年3月にオープンソースとして公開される、ということでした。 BorlandのVCLを使っているはずなので、Delphiでコンパイルできるかも。ということは日本語化も可能!?)
DBGが動かなくてよいのであれば、
PHP Designer 2005
Svoi.net PHP Edit
なども日本語(SJIS)が通りました。[PHP Designer 2005は部分的に文字化けしてます。syneditを使用しているためか……]
市販(シェアウェア)には、
・Zend社が提供している、Zendo Studio
があります。そのほかに、
・DBGのサイトで紹介されている、NuSphere PhpED
・Visual Studio .NET上で開発できるようにする、Vs.php
・MacromediaのDreamweaver
などもあります。
PHP Expert Editorは、日本語表示ができました。
余力があれば、IBMがオープンソースコミュニティに提供した、
・無料のECLIPSE(エクリプス)
を使用してみましょう。

オープンソースの統合環境

マグマスタジオは、オープンソースプロジェクトになりました。
Project: Maguma Open Studio: Summary
これで、日本語化しやすくなったと思います。
オープンソースになってから1年がたちましたが、動きはまったくありません。(あれ……?)
自分でダウンロードしてみたところ、もしかしたら、これはひょっとしたらかなりいいのでは?と思い始めました。
枯れた技術(もう本当に枯れてしまった?)を組み合わせて作っていますので、日本語化にちょっと手を出してみようかな、と思い始めてます。

追加情報。

XDebugというツールもあるそうです。
その便利さについては、 Do you PHP? - Xdebugを導入してみるなどに情報があります。
試しに入れてみたんですが、これは便利です!(もっと早く入れればよかった……。)
エラーが起きると、エラーメッセージと一緒にスタックトレース(どこの関数からどう呼ばれて、どんな状態でエラーになったのかを表示)してくれます。
ブレークポイントの機能などもあるそうです。
weaverslaveというエディタは、XDebugを 使えるそうです。(VCL使ってるって感じだなぁ。)ただ、日本語まわりに関しては、“表示だけならOK”でした。入力は文字化けします。
デバッグだけなら使えるかな?

ECLIPSE(エクリプス)って?

アットマーク・アイティの、 連載 Eclipseを使おう! に詳しくまとめられていますが、エクリプスは、「オープンソースでフリーのIDE(統合開発環境)」で、「製品版IDEと同等の充実した開発機能」 が特徴です。JAVAの上で動いているので、JAVA実行環境を入れる必要があります。(全部トータルで考えると結構面倒です。)
PHPに関しては、ECLIPSEに PHPECLIPSE や、 TruStudio(旧WebStudio) などのPHPプラグイン(あとから組み込むパーツのようなもの)を入れることで、PHPの開発環境になります。
WebStudioがうまく動かなかったので、PHPECLIPSEを試していた時、DBGの設定に関する詳しい ドキュメント を見つけて、include_pathかextension_dirか何かを修正したところ、見事に動くようになりました。
TruStudioは2004年11月10日付けでデバッガが動くバージョンがリリースされたようです。
PHPEclipseでもデバッガがすでに動くようです。
Maguma Studioはiniファイルを書き換えてしまうようなので、うまく動かない時はチェックしたほうがよいかもしれません。
(追記:現在のMaguma Open Studioでは、そういうことがないようです!)
まとめとして、簡単にPHPを始めたい人は PHPエディタ 、今後、JAVAや他の言語も使いたい、本格的なツールを使ってみたい、という方は ECLIPSE(エクリプス)と進むのがよいと思います。

ECLIPSEのインストール

参考にしたサイトは、
EclipseでPHPしよう/http://www.itnavi.com/EclipseDePHP.htm#set1
TruStudio Japan/http://trustudio.japansite.org/
などです。現在は、ECLIPSE 3が出ています。
「オープンソース徹底活用 EclipseによるPHPスクリプト開発」 という本も出ていますので、そちらも参考にできると思います。
色々なPHPエディタを試した方は、php.iniの、
implicit_flush
extension_dir
extension=php_dbg.dll
debugger.enabled = true
debugger.profiler_enabled = true
debugger.JIT_host = clienthost
debugger.JIT_port = 7869
といったパラメータもチェックしておいたほうがよいと思います。

お手本?コード、サンプルソース

PHPフォルダの中にあるPEARフォルダを、一度、のぞいておくと勉強になります。PHPでよく使うコードがライブラリの形でまとめられているからです。 また、実際に動くソフトがオープンソースプロジェクトで開発されています。
・コミュニティサイト構築用ソフトXoops(ズープス)
・(自由に編集できる)CMS:コンテンツ管理システムPukiwiki
・CMSコンテンツマネージメントシステムmambo(マンボ)
・ECサイト構築システムosCommerce
・WeblogソフトウェアNucleus
・グループウェアLa!cooda WIZ
・e-learningサイト構築用ソフトwww.excampus.org
・外食産業向け座席予約管理システムGARAGARDOA(ガラガラドア)
・WebPOS業務パッケージフランシーヌ
などなど、探せばいろいろ出てきます。
なお、 SourceForge という、オープンソースを集めている巨大サイトがあります。PHPを使うのであれば、このサイトに詳しいほうが絶対に得します。

GETとPOST

プログラミングを始めて最初に疑問に思ったのが、GETとPOSTのどちらを使うべきか、というものです。 簡単にまとめると、GETはデータがURLと共に送信されるため、辞書サイトや情報サイトの場合は、 だれかがリンクを張る時、直接指定できるようになります。POSTを使えば、個人情報などの送信の場合に 改ざんを防ぐことができます。POSTを使った場合は、ブラウザの「戻る」や「更新」ボタンを押すと、 フォームデータを再送しますか……という画面が出るので、操作性に注意する必要があります。 また、日本語のデータを送る時にGETを使う場合は、エンコードしてから送りましょう。

デバッガ

tomo_iさんという方が、2004年2月に PHP Simple Debuggerというソフトを公開されています。
DBGを使える環境で開発している方には便利かもしれません。
海外製では、 the psd PHP source debuggerというデバッガがありました。 ドイツで作られているようです。が、日本語(SJIS)は表示されました。DBGは必要ですが、DBG Listenerは使っていません。
どちらのデバッガも起動しておけば、エラーが起こったときに捕捉してくれるようです。
psd debuggerのreadme.txtに使い方が書いてあるのですが、ブレークポイントの設定として、
debugbreak()
と書けば、どこでもbreakできます、と書いてあります。
もうひとつは、URLのあとに、?DBGSESSID:1@localhost:7869を付ける、という手もあるそうです。

テンプレートシステム

プログラムのロジック部と、デザイン部の切り離しをするために、 Smartyというシステムがあります。
また、簡単(かどうかは分かりません!)にフォームを作ったり、入力値を検証するためのクラスとして、 HTML_QuickFormもあります。

フレームワーク

Win32プラットフォーム上では、Visual C++ならMFC、DelphiやC++BuilderにはVCLというフレームワークがあります。このフレームワークのおかげで プログラミングの効率化や簡略化が図れました。Webプログラミングでもフレームワークによるプログラミングという考え方が進んでいます。
Webに関しては、MVCフレームワークという考え方が主流です。プログラムの内容を、「データを扱う仕組み(M:モデル)と、データを表示させる仕組み(ビューV:)に分割し、 お互いを切り離してコントロールする(C:コントロール)」というものです。 PHPも、「再利用と保守のしやすいコード」を書き、開発効率を上げる目的で開発が続けられています。.NETもフレームワークですし、JAVAの世界ではMVCフレームワークとしてStrutsが定番なのだそう ですが、PHPの場合は百家争鳴といったところです。
フレームワークの基本的な仕組みの説明として、「PHP: ぴゅーっと速くプログラミング」などは興味深いと思いました。
また、スタックアスタリスクというサイトに、MVCフレームワークが何たるかをまとめた、 「PHPでMVC」 という記事があります。
日本人で本格的にフレームワーク作り(そして公開)に挑戦されているのが、 kunitさんで、 mapleという名称で開発を続けていらっしゃいます。 その後、藤本さんという方が作成している、 Ethnaも、知られるようになってきました。こうした国産フレームワークは、 マニュアルやチュートリアルが日本語だったり、日本語の文字変換関係が充実していたりと、勉強を始めやすいかもしれません。 HotScripts.comのPHP/フレームワークのページや、 Need ScriptsのPHP/フレームワークの項目を見ると、 こういうフレームワークが山ほどあるのが分かります。
また、 Mojaviも初期からのフレームワークとして有名です。 スタックアスタリスクに、
「PHP用MVCフレームワーク」第1回“フレームワークとMojavi”
「PHP用MVCフレームワーク」第2回“Mojaviのセットアップ”
という記事があり、参考になります。また、日本語の集約情報は、Mojavi Japan にあります。
Zend社の Zend's PHP 5 Coding Contestの応募作品を見ると、 新たなMVCフレームワークの応募が多数あります。
Delphi好きの私としては、個人的に PRADOのデザインも面白いなと思っています。
PHP 5用ということですがVCLやASP.NETを意識した設計になっているそうです。
(※やっぱり、Zend PHP5 コンテストで1位になりましたね。2004/10/24)
最近、 Ruby on Railsのことをよく耳にするようになりましたが、これもフレームワークのひとつです。
同じようなことをPHPでも、と考えて始まっている後発プロジェクトとしては、
Cake PHP
Symfony
Biscuit
PHP on TRAX
Qcodo
Code Igniter
などがあります。関心のある方はのぞいてみてください。
(※先日、東京のPHP勉強会に参加したところ、東京国際大学商学部情報システム学科の佐藤英人氏が、 「Webアプリケーション学習用」としての sabaphy サバフィ を紹介されていました。こういうニーズもあるんですね。)
個人的に、PHPのフレームワークとしては CakePHP がいちばんバランスが取れていると感じ、日本での業務用にWEBアプリケーションを書いてみてうまくいったので、 紹介ブログを書き始めました。関心のある方はどうぞ。(http://cakephp.seesaa.net
なお、Rails流のフレームワークといった時にキーワードとなるのは、Scaffolding(足場組み)です。これは簡単にまとめると、「データベースにアクセスして、 CRUD[Create, Retrive, Update, and Deleteの省略。作成、閲覧、更新、削除機能のこと。]を行う機能を 、自動生成する機能」と言えます。それをたたき台にして、自分の必要な機能に「修正」してゆくわけです。3Dモデリングツールなどで、はじめの基本 となる形(球体や立方体)を使って、それを変形させて必要なものに作っていくのと似ています。

[追記]2006年、ついに Zend 社から Zend Framework が公開されました。
[Zend Framework]
[日本のZendによる解説記事]
本家の開発、ということでよっぽどの失敗がない限り、数年後にはスタンダードとして成長していくと思います。
また、Java での成功も見ると、seasar.org の動向も見逃せないでしょうか……。
S2Container.PHP5

参考情報ですが、PHPにはフレームワークとしてではありませんが、そうした技術が存在していました。それは……

PHP的な技術のいくつか

phpMyEditです。
「Webアプリとはデータベースとの連携である」という視点から 考えると、非常にPHP的な発想でデザインされているので使いやすい“テーブルエディタ”です。 phpMyAdminの機能を自由に自分のサイトに取り込める、と言ってもよいと思います。
日本語が通るようにしたものを置いておきますので、必要な方はどうぞ。
phpMyEdit 日本語版
また、SQL文を極力書かずに楽をしようという、"Object-relational mapping"に関しては、玉石混交のアイデアが、 http://www.wiki.cc/php/Object-relational_mapping に集めてありました。

*個人的には、MyDBO などのアプローチもお手軽で好きです。
http://project.zoe.co.nz/patrick/mydbo/

クライアント側印刷ソリューション

PHPを業務で使用するとなると、印刷処理がかならずかかわってきます。「クライアント側の 印刷コントロールなんて、理論的に無理です」という投稿などもみかけますが、やっぱり人間、 「どうしてどうして、できないわけないんじゃない」と思ってしまうわけです。
この問題を解決してしまった方がいます。
帳票印刷 PXDoc
実際には、完全自動の一歩手前までやってくれるそうです。
フリー版では「印刷」ダイアログをOKする動作が入ります。(安全のため。)しかし、フリーソフトの AutoPushButton などを使えば、完全自動で印刷まで行なえます。
サーバ(PHP)側で、
header("Content-type: application/pxd; charset=EUC-JP");
header("Content-Disposition:inline;filename=\"filename.pxd\"");
という行を追加してページを作成すると、クライアントにインストールしてあるpxDocが自動反応し、プリンタに送ってくれる、 というかたちになります。ちなみにデータはSVGフォーマットです。

Delphi環境でPHPを作る?

Delphi7を持っている人は、PHPエディタとしても使えるようです。
Borlandにある、Delphiの下記の表 Borland - Delphi 7 機能一覧(1/5)
を見て、あれっと思った方はいるでしょうか。「JavaScript、PHPおよびINIファイルのサポートが組み込まれた構文強調表示のOpenTools API拡張」なんて書いてあります。 で、海外のサイトで、
Delphi IDE as PHP editor というサイトがありました。こういう使い方をしている方っていらっしゃいますか……。

PHP環境でWindowsアプリを作る

「PHPはWebサイト用だ」というのが一般的ですが、鼻息荒く、Windowsプログラムも作ってしまおうと いう、つわものもいるようです。
WinBinder(A native Windows binding for PHP)
日本語の情報としては、【PHPウォッチ】第12回 PHPでWindowsのGUIアプリを作る「WinBinder」 があります。(この記事で知りました。)
PHP de GUIにも詳細な情報があります。

PHPのGUIをTKで作る

Tcl/Tkというマイナー(?失礼。)言語が昔からあります。この言語そのものの概要については、 AM02:50 Tcl/Tk Scripting Laboratory などが分かりやすいと思います。この"Tk"という部分は、"ToolKit"の略だそうで、Tcl言語になかったGUI(グラフィカルな画面表示) の部分を拡張するためのものだそうです。「とにかく簡単に画面を作りたい」というコンセプトのもとに作られているようで、個人的な感想を いうと、あまり洗練されているとは思えません。しかし、とにかくすばやく時間をかけずに入力画面などを作れるそうです。
このコンセプトで、PHPの表示部分も作ってしまおう、というプロジェクトもあるそうです。今のところ、UNIX専門です。
PHP/TK
PHPがさらに普及して、他言語からの移植などの仕事が増えた場合、もしかしたら便利かも。

Webでグラフィックスプログラミング

PHPで直接、グラフィックスを扱うこともできます。
また最近は、サイト上で映画のようなFlashが流れていたり、マウスでクリックすると生き物のように 動き出す仕掛けなどを見かけます。
GD LibaryMingを使うとできるということです。
Mingの威力については、 Ming配布元のサンプル や、 「REDHOT PEPPER JP 無料でSWFファイルを作る方法 」や、 sephiroth.it Flash&PHP Community などもご覧ください。 Zoomfierは必見です。
AMFPHP An Open-Source Alternative for Flash Remotingなどもどうぞ。

PHPとJavaScriptとの関係

どうやら今後も、この二つは切っても切れない関係になりそうです。
PHPが仕事をするのは“一つのHTMLページが出力されるまで”の段階です。そこまでを動的に(計算して)出力させる ことができます。しかし、最近のインタラクティブなページでは、ユーザの操作に反応して即座にページの内容や色が変化します。 それは、JavaScriptやフラッシュのおかげです。
例えば、住所を登録するPHPのプログラムを書いたとします。「登録」などのボタンを押したあとであれば、PHPのほうに情報が帰ってくるので PHPで処理させることができます。ところが、「登録」などのボタンを押して、サーバに情報を送る“前に”、「郵便番号が記入されていません」 などの警告ダイアログを表示させたいのであれば、それはJavaScriptの担当になります。 最初、JavaScriptは単なるPHPの補助的存在で、簡単な事前チェックに使う程度のものなのかな、と思っていたのですが、実はもっと大きな役割を果たすポテンシャルがあるようです。 最近、にわかに脚光を浴びてきました。 それは……

Ajaxというアプローチ

です。 Google Maps Betaや、 Google Suggest Betaなどを見てください。
これまでにないWebの反応スピードに驚かれると思います。
これはどうやっているのかというと、JavaScriptとXMLHttpRequestなどの既存の技術の「組み合わせ」で実現されているものです。
Webページがサーバから送り出された“後”、JavaScriptを使って、サーバと“交信”して、データをもらってきます。
Ajax: Web アプリケーション開発の新しいアプローチ
などもご覧ください。
これからの技術者は、このクライアント←→サーバのピンポン交信にも強くなる必要があるようです。

レンタルサーバでcronを使いたい

cronとは、UnixやLinuxの,バッチファイルのタスクスケジューラーのようなものです。 これが使えると、一定時間ごとにある作業を行わせる、といったことができるようになります。
しかし、レンタルサーバでは一般に、許可されていなかったり、有料だったり、最短は1時間に1回までだったり、など の制限があります。
しかし、たとえcronが使えないサーバであっても、cronでできることと同じようなことをさせるスクリプトがありました。
pseudo-cron.php use cron jobs just with PHP!
PHPスクリプトで、include "****.php"の形で書けるものであれば、これで実行できます。
仕組みは、“だれかがページを表示した時に”ひっかけて、ついでに、実行するべきスクリプトが既に実行されているかチェックします。 もし、まだ実行されていないようであれば、そのままincludeしてしまう、という仕組みです。
これって発音はまるっきり、“手動CRON”というものですね!
crontabと同じ書き方ができますし、imgタグを使う書き方であれば、主ページと別スレッドで実行することもできます。

レンタルサーバ同士でも同期させる技術

現在、PHPで走るPOSレジシステムが動いています。(いわゆる、スーパーマーケットのレジです。)
単なるレジ機能のみならず、pxDocを使った レシート出力、バーコードリーダによる商品管理(商品バーコード出力)、チェックイン・チェックアウト機能、セキュリティ、多彩な集計機能などを盛り込んだオンラインソリューション! になりました。顧客側で準備するものはインターネットエクスプローラとプリンタとバーコードリーダだけ。数十台準備すれば、それがどんな場所にあっても(たとえ地球の裏側でも) POSシステムとして情報を一括管理できます。これだけのシステムを少人数で開発できたのは、PHPの機動力のおかげかもしれません。
最後の難関は、どうやって“業務をとめない”システムを作るか、ということでした。
また、現在は専用サーバに移行していますが、当初はレンタルサーバで運用させていました。 その時点での懸案事項として、「リアルタイムにレンタルサーバのMYSQLのバックアップを取れるか(またはサブを準備できるか)」という課題があったのですが、その解決法としてSQLyogがありました。
Sqlyog
phpMyAdminなどを使えばリモートサイトのMYSQLの情報が手元で管理できます。ということは、2箇所のリモートサーバの内容を、自動的に“見比べ、比較し、同じになるようにすれば”、同期を取る(シンクロナイゼーションする)ことが できるはずです。その場合、メインサーバがダウンした場合は、サブのサーバに移行すれば業務を続行できます。
SQLyogではそれが可能です。「レンタルサーバ同士のMYSQLの同期を取る」こともできてしまいます。
レプリケーションやクラスタリングなんかよりもずっと簡単です。そしてここにPHPの技術が使われていました。 詳細は、SQLyogと一緒にインストールされる“SQLyogtunnel.php”をご覧ください。ここに秘密があります。
MYSQLには、“レプリケーション”という機能があります。専用サーバを2台持っている方は、こちらを使用されたほうがよいと思います。 しかし、レンタルサーバも含めて運用している方には、SQLyogも選択肢のひとつだと思います。
さらに、この辺の技術に興味がある方には、 PHP Beansも面白いと思います。
追記: EMS SQL Manager 2005 Lite for MySQLもがんばっています。
Liteバージョンはフリーウェアなのに「日本語OK」です。
HTTPtunnelもサポートしました。大量のデータをバックアップする際には、SQLyogではなく、このツールを使っています。
シンクロナイズ機能はないようです。SQLyog以外には、MYSQLにトンネルアクセスしてシンクロナイズできるツールを見た事がありません。
どなたか、ご存じの方がいらっしゃいましたら、教えてください!

データベースをよく知る

現在、MYSQLを使用しています。MYSQLのデフォルトのテーブルはMYISAM型です。 このまま使用すると、高速、コンパクトなデータベースとして利用できるのですが、INSERT,UPDATEなどのSQL文を実行するたび、 “テーブル単位でロックされる”ため、複数のクライアントから書き込む時には想定外の動きになる可能性があります。 トランザクションが必要な場合は、InnoDB型に変えましょう。
このあたりについては、
Hironobu's HomePageによくまとめられています。
[テーブルの構造]InnoDB型は参考になりました。
また MYSQL 4.1 から、文字コードに関する調整が加えられました。「多機能」になったのはよいのですが、やらなければいけないことが一つ増えました。
mysql_connect などでMYSQLに接続したあとは、必ず、データベースの文字コードが何かを指定する必要があります。
PHPとMYSQLでは、文字コード名に微妙に違いがあることに注意しつつ、例えば EUC のテーブルを使っている場合には、
mysql_query( "SET NAMES UJIS" );
という文を、「MYSQL接続後」に入れてやる必要があります。そうしないと、データが化け化けになるので注意しましょう。

もうひとつのバックアップメソッド

HTTPトンネルでのMYSQLアクセスは確かにすばらしい技術ですが、大量のデータを連続して読み出すのにはやはり無理があるようです。 サーバのデータをごっそりほかのサーバに移したい場合にはちょっと使えなさそうです。
どうやっていちばん手軽に行なうか試行錯誤の末、これに落ち着きました。
phpMyBackUpProです。
これを使うと、サーバの全データベースを圧縮したファイルを、“そのサーバ内”に作ってくれます。(この時点でFTPも可能ですが) それを今度は新サーバの方にFTPで送ります。今度は、そちらにインストールしたphpMyBackUpProを使って、解凍+取り込みをやらせます。 テーブルに不整合があると、文句を言ってなかなかうまく動いてくれませんでしたが、大量のデータを複写する場合には便利でした。

FireFox(1.0)でひっかかる

クライアントから、画像出力に関してありえない(と思った)動作報告がありました。「ボタンを押しても、さっきと同じ画像ばかり 出てくるんですけど。」最初、話がかみ合わなかったのですが、調査しているうちに、クライアントがFireFoxでテストしており、FireFoxのデータキャッシュ が悪さをしていることに気がつきました。
FireFox->ツール->オプション->プライバシー->データのキャッシュ->クリア
を押して直るようであれば、キャッシュが原因です。
Webで調査したのですが、通常、データキャッシュを使用させないためには、
// 日付が過去
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// 常に修正されている
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");
?>

などを最初に書けばよい、とあります。 (マニュアル、 headerを参照してください。 )
ところが、こちらで試したところ、FireFoxには通用しなかった?ようです。
結論としては、
header ("location: make_image.php?".microtime());
などのように、ダミーのパラメータをつけることで解決しました。

最新ニュースのチェック

次のようなサイトはおすすめです。
phpspot開発日誌 大垣 靖男さんブログ 上鍵 忠志さんブログ Wings(山田 祥寛さん)
「釣ったよ!」
PHP Classes 世界の若者たちによるアイデアコンペ。
http://www.developertutorials.com/、初心者に分かりやすい入門記事(英語)


(C) 2005 S.Dozono All Rights Reserved.
E-Mail: dozono@(at)gmail.com