Archive for 7月, 2008
MYSQLの文字コード
文字コードの件でつまづいた。
PHP+MySQLの掲示板を試作した時から気づいてたが、掲示板に書き込んだ日本語文字列が、何故かコンソールで見ると文字化けする。文字コードはサーバからクライアントまで全てUTF-8で統一しているはずなのに。statusコマンドで確認しても、全てutf-8になっている。
掲示板での読み書きに支障は無いので特に原因を調べようともしていなかったが、コンソールからデータ入力をする必要が出てきたのでちょっと調べてみた。
こんな記事を見つけたので、ためしにmy.cnfに”skip-character-set-client-handshake”と追加してmysqldを再起動してみたところ、掲示板の投稿がコンソールと同じように全部文字化けした。この状況で新たに投稿してみると、文字化けなく投稿でき、コンソールの方も文字化けせず表示できた。
さらに、このブログのデータベースを調べてみると、例の行の追加前も追加後も、どこも文字化けせず正常に表示されるし、新規投稿してもおかしな事は起こらない。
どうやら掲示板のコーディングに原因があるようだ。
でも、とりあえず今回は解決なので詳しくはそのうち調べることにする。
DOMとか PEAR
RSSの処理をしたかったのでまず手軽にJavaScriptで試そうとしたら、他ドメインへのHTTPリクエストは禁止のようで断念。まあ当然か。PHPでやる方針に変更。
PEARのHTTP_Requestパッケージを使えばファイルの取得が簡単そうだからさっそくやってみようとしたが、サーバにPEARが入ってなかったようで。
調べた挙句、yumでphp-pearパッケージをインストールすればいいっぽいことが判明。早速入れてみた。
それから、動作テストに何度も失敗しつつ、なんか色々手探りで、pearのHTTP_Requestパッケージをインストール。
# pear install HTTP_Request
他にDOM関数を使うためにphp-xmlモジュールが必要とのこと。本来標準で入ってるらしいが、CentOS標準のパッケージの場合は入っていないらしい。なのでインストール。
# yum install php-xml
この後Apacheをリロードしたらようやく使えるようになった。
掲示板 PHP+MySQL Ver.
PHP+MySQLの掲示板を作ってみた。テーブルは一枚なので、データベースのメリットがそれほど活かせていないが、独自ファイルへ書き込むよりデータの扱いがやりやすくなった。機能追加もやりやすそうだ。
PHPスクリプトは、BBS機能をひとつのクラスとしてまとめる方針で書いている。データ処理部分と整形・表示部分をほぼ完全に分離したい。
まだPHPの文法についてあまり詳しくないので、色々と手間取ることも多い。というかPHPの変数の扱いが相当ユルいのが厄介。逆にデバッグをやりにくくしてるような。せめて変数の宣言は必須にしてほしい。設定で変えられるんだろうか。
BBSの、現時点での問題点をまとめてみる。
- オブジェクトの構造をどうするか。
最終的には、BBSを独立したモジュールとして(今もある程度独立してるが)、インタフェースを通じて整形・表示部分に値を渡すスタイルにしたい。そのインタフェースをどのようにすべきか。
また、インスタンス変数はどのようなものを用意するか。外部からの勝手な変更を避けるためにメソッド呼び出しによってしか変数にアクセスできないようにするか。どのメソッド・変数をprivate指定して外部から隠蔽するか。
現在、表示部のコードにも一部MySQL関数が含まれている。表示部においてはあまりデータ処理をすべきではない。データ処理はBBSクラスの中で行うように改良すべきである。 - 入力の字数チェックについて。
現時点ではPHPスクリプトでの字数チェックはしていない。データベースの制限文字数を超える字数での入力があっても、そのままデータベースにINSERTするようになっている。その際MySQLサーバは、エラーを吐くのではなく、制限を越えた部分については切り捨てて、データベースに登録するという挙動をするようである。
できればこのような中途半端な措置を取らず、制限を超える文字数のINSERTが合った場合にはエラーを吐いてほしい。また、それ以前に、文字数のチェックはPHPスクリプト側で行い、制限を超える場合にはデータベースにアクセスせずにエラーを吐くべきである。 - PHPのクラスの扱いや、スクリプトを複数ファイルに分けて記述する方法について勉強する必要がある。BBSクラスの記述を別ファイルに移動しようとしたがうまくいかなかった。
PHP+MySQLの勉強を少し
初めてのSQLとかいう本を読みつつ、MySQLの使い方を勉強。
今日は、とりあえずPHPからMySQLにアクセスすることを目標に進めた。
DreamWeaverにはデータベースアプリケーションのための機能が色々と付いてるみたいだが、使い方がよく分からない。その機能を使ってデータベースに接続するところまではできたが、それとPHPスクリプトとの関連が謎。これはマニュアルを読むべきか。
ちなみに、接続する際に少し躓いた部分がある。ユーザtest@localhostとして繋ごうとしたが、MySQLに登録してあったtestのホストはkusu.jpn.chのみ。この場合、これらを自動的に同じものと解釈してくれるわけではなく、別々のものとして認識されるようで、接続を拒否されてしまった。新たにtest@localhostユーザを作成するとうまく接続できた。
で、早速データベースにアクセスするPHPコードを書こうとググってみたところ、まず一番目にpearのDB.phpを用いた方法が紹介されてるページが見つかった。早速サンプルコードをコピペして実行してみたが、DB.phpが見つからない旨のエラーが出た(httpdのエラーログ)。
よくよく考えてみると、そもそもこのブログのデータベースアクセスの際にDB.phpは使っていなかったはず。このブログのインストール時の記録を調べてみると、php-mysqlというパッケージをインストールしていたことが分かった。色々調べていると、DB.phpを使うのは時代遅れ、といった内容の記事も見つけた。
そこで、php-mysqlパッケージを使ったデータベースアクセスについて解説しているサイトを探し出し、サンプルスクリプトを弄ってテストしてみたところ、成功。
さらに少し弄って、かなりやっつけだがデータの書き込み・読み込みをするようなスクリプトを作った。
以下は、用いたテーブルの定義。
create table bbs( res_num SMALLINT UNSIGNED AUTO_INCREMENT, res_time DATETIME, res_name VARCHAR(30), res_text TEXT, res_host VARCHAR(15), CONSTRAINT pk_bbs PRIMARY KEY (res_num) );
掲示板とか
作ってた掲示板(PHP)を、とりあえず設置して動くようにしてみた。ログはCVS形式。これをMySQLにアクセスするように変更したい。
ついでに、以前拾ったyokoku.out掲示板を設置してみた。PHPの画像処理とかやってるし、コードを参考にしてみたい。ただ、設置の際に文字化けに悩まされた。文字コードはUTF-8なのだが、掲示板の投稿データや、作成された画像がなぜか文字化けしてしまう。
とりあえずmb_convert_encoding関数が怪しかったので全部取っ払って試してみるとうまくいった。もっと文字コードについて詳しくならねば。
データベースを勉強したい
データベースの勉強を色々としてみたい。
サーバ管理の仕事ではPHP/MySQLのスキルを要求する求人が多いっぽいから、これを学べば専門的なバイトも有利になるかも。そういうのが自分に向いてるかは別として。
とりあえずこの前作ってたPHPの掲示板を、データ管理にMySQL使うように改造しようと思う。簡単な掲示板なら表1枚程度でできそうだ。
メールサーバ構築
といっても使い道はなさそうだが。
とりあえず基本的に内部からのみ使えるようにざっと設定。以前調べた際はうちのプロバイダはOBP25Bをしていたはずなのだが、外部のSMTPサーバに接続できるかどうかテストしたところ普通にできた。今のところ対策はしていないが、必要になればする。
POP/IMAPサーバソフトも設定したが、メールの受信テストがうまくいかなかった。とりあえず今日はもう眠いので中断。
–追記
OBP25Bのテストのとき、つながったと思っていたのは実は自分のサーバだった。
***.***.comの名前解決をする際、見つからなかったので、自ドメインを付加した***.***.com.kusu.jpn.chを調べ、自分のIPアドレスを接続先として選んだようだ。自分のドメインの名前解決にはワイルドカードが認められてるから。
とりあえず、外との間でメールの送受信ができるようになった。
JSで遊んでみる
Posted by admin in JavaScript on 2008 年 7 月 6 日
なんか気が向いたのでJavaScriptでみかか変換のスクリプト作ってみた。
いや、正確には作ってる途中。
JavaScriptはちょこっと触ったことあったけど、まだ実用的なスクリプトをほとんど書いてない。
開発環境としては、大学の演習で使ったVisualStudio2005に慣れてしまった。別に強力ってわけでもないけど、デバッグ機能が直感的に使いやすいのが効いたかもしれない。JSは型チェックが曖昧でほんとデバッグしにくいので。
Aptanaがいいとか聞くし、普段Webサイト作ってるのはDreamWeaver8だから、そういったソフトでも試そうと思うが、何にせよきっかけというか、これを作るといった明確な目標がないと、モチベーションが続かない。
とにかく、自由自在にAjaxなWebページを作れるようにならないと。
最近は、少し前には全部Flashで済ませてた事なんかもバンバンJS使うようになってきてるし、そういうところを見るとJSもかなり使いやすくなってきてるんだな、と思う。