PHPで使用中のメモリを知る

2009/07/05 | PHPの基本

PHPでは、設定を変更することで使用するメモリ量の上限値を決めることができる。php.iniのmemory_limitの設定だ。しかしこの値は上限値であって、実際のところどのくらい使っているのかを知らないと、正しく設定することができない。結局変数に格納されているデータを想定(もしくはグローバルに格納された値の容量を調べる)しないといけないのか。

と思ったら、便利な関数がありました。memory_get_usage。この関数を呼び出した時点で、そのプログラムに割り当てられたメモリ量を知ることができるとのこと。素敵な関数だ。

大きな配列やファイルを読み込む必要があるときは重宝しそうだ。

PostgreSQLとPostGIS

2009/07/04 | PostgreSQL

最近PostGIS関連の話題に触れる機会があった。前々から手をつけなくてはいけない、と思いつつ、データベースのこみいったこととか得意ではないので放置していたが少しがんばることにした。まずはローカルのWindowsマシンに新ストールするところからはじめた。

以前WindowsマシンにPostgreSQLをインストールしようとしたときに、pgAdminから接続できなかったりいろいろてこずった記憶があった(Windowsマシンには残骸が残っていた)。しかし今回はスムーズにインストールできた。まず最初に残骸を一式削除し、PostgreSQLのサイトから8.3系をダウンロードした。最新はPostgreSQL8.4だけど(公開ほやほや)、最新である必要もないので今回は8.3にしておいた。ダウンロードは以下のページから。

http://www.postgresql.jp/

すごく久々にPostgreSQLのサイトを見たけど、リニューアルされた感じ。わかりやすいかどうかといわれると、それはなんともいえないけれど、ダウンロードページへの導線がわかりやすくてよかったかも。

インストーラを起動し、適宜必要な項目を入力。メインのインストールが完了したら、アプリケーションスタックビルダなるユーティリティが起動した。ここからPostGISをインストールできるらしい。なんとも簡単になったものだ。しかしPostGISを選択してインストールを続行していると、「要求された操作には管理者特権が必要です」なんてメッセージが表示されてどうしてもインストールできない。

とりあえず悩むのも面倒だったので、メッセージ中に書かれているPostGISインストーラ(上記操作の中でダウンロードだけは完了している)を直接起動したらうまくインストールできた。この後pgAdminを起動し、PostgreSQLサーバにうまく接続できることを確認した。pgAdminから確認して、データベース「postgis」とか、PostGISのテンプレートとかができていることは確認できたからたぶん大丈夫なんだろう。興味本位でいろいろ見てみたら、関数がたくさん用意されているようだ(674個)。これがPostGISの本体に相当するものだろうか・・・。

さて、作業はここまででいったん終了。これからどうしようか・・・。途方にくれる。

携帯とメールヘッダ

2009/07/03 | ケータイ

mb_send_mailとかでメールを送信する際、第4引数に何も設定していなければ、メール受信者はわけのわからないアドレスからのメールを受信することになる。そこで以下のようにFromヘッダを与えて、送信者のアドレスを通知することが一般的だと思う。

From: hoge@example.com

さらに、メールアドレスだけではイマイチなのでニックネームをつけてあげることも多い。マルチバイトな文字をニックネームとして付与する場合、たとえmb_send_mail関数を使っていても第4引数に関しては何も処理してくれないので、自分でエンコードしてやる必要がある。

‘From: ‘.mb_encode_mimeheader($name).'<hoge@example.com>’

で、最近気づいたこと。こんな具合に書いても、携帯でメールを受信する場合はニックネームである$nameが展開されない(無視される)場合があるようだ。うちには3キャリアの携帯電話があるが、そのうちドコモ(F705i)はだめだった。たぶん機種依存な部分なんだろう。

ちょっと嫌だなぁ、と思ったのでメモしてみた。

ZEUS決済

2009/07/02 | 決済

仕事で決済システムの導入をやるかもしれない。決済代行会社はZEUS使用の予定。実は決済システム導入の経験がないのでちょっと緊張している。

ZEUSは多彩な決済方法があるようで、簡単っぽい。意外と緊張する必要もないのかもしれないけれど。いちおう事前にプログラム等のフローを知りたくて問い合わせたら「詳細は契約後でないとお伝えできません」というつれない返事だった。面倒だったので、突っ込まなかったけれど、簡単な流れくらいは聞き出せただろうに、と思って少し公開している。

おそらく使用するのはリンク型と呼ばれるタイプ。ウェブ上で紹介されている内容を見る限りでは以下のステップになると思う。

  1. 購入申し込みフォームを用意する。
  2. 購入申し込みそのものはここで完結させる。
  3. 購入完了後にZEUSの決済ページへ遷移させる(たぶんこの際にID番号か何かを引き渡すんだと思う)。
  4. ZEUSで決済処理を済ませてもらう。
  5. 決済完了後、事前にZEUSに設定しておいたURLへ遷移させる。
    裏でZEUSが、こちら側の特定のプログラムに対してクエリを発行して、入金を確認できるようにする。
  6. ZEUSの結果を表示させる。
    もしくはZEUSに起動された特定のプログラムから決済完了のメールを送信させる。

たぶん、こんな流れなんだと思う。だから実際に記述しなければいけないプログラムは、購入のためのプログラムと、ZEUSからのアクションを受け取るプログラムの二つになると思われる。

だれか経験者の人がいたら、だいたいあっているかどうかこっそり教えてほしい今日この頃である。

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

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にインストールしてあるんだったらとりあえずやっちゃうんだけど、レンタルしているサーバだから再インストールになったらまた費用がかかるから無理はしないことにした。


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