モジュールをインストールできないと思ったら

2009/06/30 | CLI, PDO

VPSを何台か借りているが、VPSというのは、その内情(インストール方法)を知っておかないと、恐ろしく手間取る可能性があることを改めて知った。

格安でVPSを借りているのだが、そこにはpdo_mysqlがインストールされていなかった。そこでpdo_mysqlをインストールしようとして四苦八苦したので、メモを残しておく(現状報告として、現時点ではインストールできていない)。

まず最初にしたことはRPMパッケージ探し。OSはCentOSであることがわかっているが念のため、バージョンを確認。

more /etc/redhat-release

これでバージョンが確認できた(ちなみにOSはCentOS4.7だった)。次に当該バージョンでRPMが提供されているかどうかウェブで調べる。結構調べたつもりだけど、結果として見つけられなかった。「さて、どうしようか」と考えて、次にPECLでのインストールを試みる。これには事前にいろいろなパッケージを入れておく必要がある。yumコマンドでインストールした。

yum –enablerepo=centosplus -y install php-devel php-pear mysql-devel httpd-devel

yumのリポジトリでcentosplusというのを有効にしておく必要があるみたい。ちなみにyオプションは、何を聞かれても「y」と答えなさい、という意味。ここまででPECLコマンドが利用できるようになった(PECLは確かPEARに含まれていたと思った)。そこでコマンドラインで、コマンド一発。

pecl install pdo_mysql

とりあえず応答メッセージの下のほうにcompleteと書いてあるので、いちおうOKっぽい。で、最終作業。php.iniに必要な情報(extension_dirやextension)を記述してapacheを再起動。しかしphpinfoにはpdo_mysqlは現れない。それどころかエラー。

PHP Warning: PHP Startup: pdo_mysql: Unable to initialize module
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0

ん~。どうやらバージョンが違うようだ。どうしてこんな食い違いが起こるんだろう。

その後、いろいろやってみたけどやっぱり動かない。なぜこんなことがおきるんだ。と思ってウェブを調べていたら、英語サイトにヒントが見つかった。そのサイトには、以下のコマンドを試してみろと書いてあった。

php -v
/usr/bin/php -v
/usr/local/bin/php -v

ん~、どういうことだろうと思いつつ、コマンドを打ってみたら、あれまぁ、結果が違うじゃん。バージョンとか。もしやと思って、rpmコマンドでインストールされているPHPのバージョンを調べてみた。そしてphpinfoでもバージョンを確認。そして愕然。

バージョンが違う。少し考えてわかった。PHPはrpmでインストールじゃなくて、コンパイルしてインストールされているんだ。しかもいろいろ調べてみたら、どうもapacheも手作業でインストールされているっぽい(だって設定ファイルの位置がRedHat系の場所と違うんだもん)。てことは、簡単お手軽RPM(もしくはyum)でインストールしようが、何しようが反映されないし、ディスクの肥やしになるだけってことか(性格にはCLI版PHPには反映されるわけだが)。

VPSにしても専用サーバにしても、開発の重要な要素である、PHPやapache、データベース周りはどのようにインストールされているのか知っておく必要がありそうだ。そもそも今回自分が借りているサーバだからいろいろできたけど、そうじゃなかったらサーバ屋さんに有償対応をお願いしたところだけど・・・、自分でやってみて初めて状況がわかったよ。

ということで、問題のpdo_mysqlはいまだにインストールできていない。今度また時間があったら再度チャレンジする予定。自分の家にあるPCにインストールしてあるんだったらとりあえずやっちゃうんだけど、レンタルしているサーバだから再インストールになったらまた費用がかかるから無理はしないことにした。

絵文字の使用許諾について

2009/06/26 | ケータイ

携帯絵文字を使うようなサービスを作ろうと思うと、使用許諾が必要。基本的には各キャリアごとに権利があるはず。

いちおう、ちゃんとしといたほうがいいね。

PostgreSQLデータベースがディスクを圧迫したので

2009/06/19 | PostgreSQL

お客さんに貸してるサーバのディスク容量が残りわずかになってしまった。原因はわかっている。PostgreSQLのメンテナンスが不十分だったからだ。サーバの中にはいくつかのPostgreSQLデータベースが稼動しているが、果たしてどれが原因なのか。どのデータベースがどれだけの容量を使用しているのか調べたのでメモ。

まずPostgreSQLのデータがあるディレクトリに移動する。RedHat系OSでは以下の場所に存在する。

/var/lib/pgsql/

おなじみ、設定ファイル等が設置されている場所だ。この中の奥の階層にデータは格納されている。

/var/lib/pgsql/data/base/

上記の中に入ると、数字だけで構成されたディレクトリが多数存在する。しかも多段の階層で。これだけでは意味がわからない。まずここで、直下の階層についてのみ容量をチェックする。

du –max-depth=1 -h

階層を一つ下って、人間が理解しやすい形式でデータを出力させる。これでひとまず、どのディレクトリがディスクを浪費しているのか把握できる。しかしこのディレクトリ名は何を意味しているのか。

どうやらこれはoidを意味しているらしい。そこでoidとデータベース名を関連付けることさえできれば、どのデータベースがどれだけ容量を使用しているか把握できることになる。それを把握するためのSQL文がコレ。

select datid,datname from pg_stat_database;

これでoidとデータベース名の関連付けができる。
さて、どのデータベースに問題があるのかはすぐにわかったが、どうやって処理しようか。それを現在考え中。頭の痛い課題だ。

UTF-8で正規表現

2009/06/15 | PHPで正規表現

入力チェックの際に、カナ入力のチェックをすることになった。何をいまさらという感じだが、以前カナでチェックをかけたのは何年前のことだろう。で、例によってはまったのでメモ。

preg_match(‘/ァ-ヶー/’,$str);

最初は上記のように記述してみて、なんとなくOKっぽい感じだった。いざテストの段になって、いろいろ入力してみたら、うまく通らないカタカナがある・・・ってすごくたくさん・・・。「チ」「ツ」「テ」「ト」「ナ」「ニ」「ヌ」「ネ」「ノ」・・・。ぜんぜんだめじゃん。

ちょっと調べて回答を見つけて、ようやく思い出した。preg_matchでUTFな文字列を調べるときは注意事項があったことを。

preg_match(‘/ァ-ヶー/u’,$str);

「u」オプションが必要だった。これにて解決。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net