gakkieのBlog

ubuntuでPHPエクステンションを作ろう-2

このエントリーを含むはてなブックマークはてなブックマーク - ubuntuでPHPエクステンションを作ろう-2 この記事をクリップ!Livedoorクリップ - ubuntuでPHPエクステンションを作ろう-2 Yahoo!ブックマークに登録 BuzzurlにブックマークBuzzurlにブックマーク @niftyクリップに追加 このエントリをつぶやくこのWebページのtweets Share on Tumblr FC2ブックマークへ追加 newsing it! この記事をChoix! Googleブックマークに追加 Bookmark this on Delicious Digg This FriendFeedで共有

前回から3週間くらいたってしまいました。

その間に、今までほとんど使ってこなかったPHPを書いてます。
ほとんど書いたことが無いにもかかわらず、
ある程度なら簡単に書けちゃうPHPはほんとに便利ですね。

ただ、便利過ぎて、適当に書いちゃったり、
それでも動くからって、自分が出来るエンジニアだと勘違いしてしまいそうになるのが、
非常に恐い言語ではないか、と感じます。

そんなときにPHPエクステンションなわけです。
適当に書いたら動かないCとかC++でコードを書くわけですから、
素人にはおすすめできない。

ということで、今日は一気にHello Worldまで。

流れ

hello worldまでのpecl-genのインストール後の流れは以下。

  • pecl.xmlファイルの作成
  • pecl-genコマンドの実行
  • ビルド・インストール

前回書いた、

  • スケルトンから必要なコードを自動生成(ext_skel)
  • 設定ファイルを編集
  • Cでプログラムを編集
  • ビルド

という流れが間違いではないことがわかりました。

pecl.xmlファイルの作成

hello worldをするために以下のようなファイル(hellopecl.xml)を作成します。
[code]


string hello()
RETURN_STRING("Hello World", 1);



echo hello();


[/code]
XMLでスケルトンを書くんですね。

extensionをextentionって書くと、次のpecl-genコマンドで、
[code]
no matching tag handler for extention in hellopecl.xml on line 2:24
[/code]
なんてエラーが出るので気を付けてください。

pecl-genコマンドの実行

次は、このスケルトンから必要なファイルを自動生成します。

[code]
$ pecl-gen hellopecl.xml
[/code]

失敗したとかで作りなおしたいときは、-fオプションを付けるといいかもしれません。

このコマンドを実行すると、helloっていうディレクトリができて、必要なファイルがその下にできます。
hello.cがC言語のコードになるんだろうなぁと思いつつ、チラ見。
[code]
98 /* {{{ proto string hello()
99 */
100 PHP_FUNCTION(hello)
101 {
102
103
104
105 if (ZEND_NUM_ARGS()>0) {
106 WRONG_PARAM_COUNT;
107 }
108
109
110 do {
111 RETURN_STRING(“Hello World”, 1);
112 } while (0);
113 }
114 /* }}} hello */
[/code]

きっとこれが実体だろうな。
いじるのはまた今度。

ビルド・インストール

ビルド・インストールはコマンドがやってくれます。
[code]
$ cd hello
$ phpize
$ make
$ make test
[/code]

この時点で、modulesディレクトリにビルドされたものが入っています。
インストールしちゃいます。

[code]
$ sudo make install
[/code]

これでインストールまで完了です。

テスト

上でPHPエクステンションを作るところまでは完了しました。
あとはphp.iniに記述して、apacheの再起動後、エクステンションが使えるようになるはずです。

ubuntuのphp5におけるphp.iniファイルは、/etc/php5/conf.dに入れます。
[code]
$ sudo vi /etc/php5/conf.d/hello.ini
$ cat /etc/php5/conf.d/hello.ini
extension=hello.so
[/code]
きっとどっかにあるphp.iniが読み込んでくれるんです。

Apacheを再起動します。
[code]
$ sudo /etc/init.d/apache2 restart
[/code]

phpinfo()でhelloモジュールが読み込まれているのを確認したら、以下のphpコードが実行できます。
[php]
< ?php echo hello(); ?>
[/php]

画面にHello Worldが出たら完了です!

まとめ

pecl-genまでたどり着くのが大変だっただけに、それ以降は簡単でした。
というのも、pecl-genで検索すると、hello worldくらいすぐヒットするんですよね。
もし、何か作ったらBlogに書こうと思います。

参考文献




Leave a Reply