小山博史のJavaを楽しむ(5)
【新人研修向け特別企画】
JavaでPHPを使ってみた
ガリレオ
小山博史
2007/4/12
■ QuercusでPHPを動かしてみよう!
Servlet/JSPコンテナとしての動作は確認できたので、次にResinのQuercusの動作確認をしてみました。次のようなinfo.phpファイルをwebapps/ROOTにおいて、「http://localhost:8080/info.php」へアクセスするだけです。この結果から、PHP 5.0.4であることやシステムのカーネルが何かなどが分かります。後は、同様にしてPHPのプログラムを追加していけば、PHPプログラミングができます。標準APIは基本的にサポートしているので、基本的なプログラミングで困ることはなさそうです。
| info.php |
<?php phpinfo() ?> |
![]() |
| 図4 info.phpの表示 |
さて、特に設定をしなくてもPHPが使えてしまいました。実は、PHPが動作するように初期設定がされています。設定ファイルは、resin-3.1.0/conf/app-default.xml にあります。これを見れば分かるように、PHPを実行しているServletクラスはcom.caucho.quercus.servlet.QuercusServletです。
ちなみに、resin-3.1.0/webapps/の下へsample、sample/WEB-INFというディレクトリを作成して、sample/info.phpなどを置けば、「http://localhost:8080/sample/info.php」を動作させることもできます。このようにして、PHPのWebアプリケーションをすぐに開発し始めることができるわけです。
| resin-3.1.0/conf/app-default.xml |
<web-app> |
■ 日本語を表示させるには?
次に、日本語を含むhello.phpをUTF-8で保存して使ってみました。最近はUTF-8を使えば何とかなる場合が増えてきているので、そのまま日本語が使えることを期待したのですが、見事期待どおりにきちんと使えました。
| hello.php |
<?php |
![]() |
| 図5 hello.phpの表示 |
ファイルからのデータ読み込みもしてみました。filetest.phpというPHPプログラムで、次のようにUTF-8で保存したテキストファイルであるhello.txtを開いて表示するだけの単純なものです。このプログラムは残念なことに、「http://localhost:8080/filetest.php」とアクセスすると、文字化けが発生してしまいました。
| hello.txt |
日本語テスト |
| filetest.php |
<?php |
![]() |
| 図6 filetest.phpの表示(文字化けしてしまう) |
ちなみに、「http://localhost:8080/hello.txt」は表示できました。こちらはResinのWebコンテナが表示しているため問題とならないのでしょう。
![]() |
| 図7 hello.txtの表示 |
ちょっと調べてみたところ、どうやら既存のPHPアプリを動作させることを優先して文字セットはISO-8859-1を前提としているようです。オプションで使用する文字セットの切り替えができるようなパッチを作成してフィードバックをするのがベストなのですが、その処理は意外と難しいものです。HTMLのmetaタグ、PHPのheader関数、OSのデフォルトエンコーディングなどが複雑に関係してくるからです。しかし、勉強で作成する程度の簡単なPHPアプリで日本語を使えるようにするぐらいのことはしたいところです。
■ Resinをカスタマイズするには?
こんなとき、オープンソースは自分で改良して使えます。resin-3.1.0-src.tar.gzを展開して、com.caucho.quercusパッケージ内のコードをのぞいてみました。なお、動作中のResinは、あらかじめ停止し、Binary版は名前を変更しておく必要があります。
| com.caucho.quercusパッケージ内のコードをのぞく |
$ ~/resin-3.1.0/bin/httpd.sh stop |
いくつか検索はマッチしますが、その中で「./lib/i18n/UnicodeModule.java」の"ISO-8859-1"を"UTF-8"とし、「./lib/HttpModule.java」の"iso-8859-1"を"UTF-8"と修正してコンパイルをし直しました。コンパイルに当たっては、Source版には含まれていないJARファイルがいくつか必要なので、resin-3.1.0/modules/ext/ディレクトリを自分で作成してから、そこへ次のJARファイルをBinary版のlibディレクトリからコピーする必要がありました。
| libディレクトリからコピーするJARファイル |
activation.jar |
コンパイルはApache Antを使って行います。今回は使用したマシンにインストールしておいたapache-ant-1.6.4を使いました。手順としては、resin-3.1.0をカレントディレクトリとして、antコマンドを実行するだけです。
編集部注:Apache Antについての詳細を知りたい読者は、現場に活かすJakarta Projectの第2回「AntでJavaのビルドを簡単にしよう」をご参照願います。
コンパイルが成功したので、改良版のResinを起動し、文字化けが発生したプログラムを再度作成してアクセスしてみました。今度は、ばっちり日本語が表示されました。厳密にチェックしたわけではないので、不十分な部分もあると思いますが、こうやって何とかできてしまうときには、オープンソースはいいな、と感じます。
| 改良版のResinを起動 |
$ chmod 755 ~/resin-3.1.0/bin/httpd.sh |
![]() |
| 図8 filetest.phpの表示(文字化けしない) |
| 2/3 |
| INDEX | ||
| 第5回 JavaでPHPを使ってみた | ||
| Page1 Quercusとは、いったい何なのか? 新入社員の研修で試してみては? Resinをインストールしてみよう! Resinを起動するには? ResinはServletを自動でコンパイル・実行 |
||
| Page2 QuercusでPHPを動かしてみよう! 日本語を表示させるには? Resinをカスタマイズするには? |
||
| Page3 Pure JavaのDB、Derbyと連携させるには? PHPからDBにデータを挿入するには? PHPからDBを検索するには? JavaクラスをPHPから使ってみよう! |
||
小山博史のJavaを楽しむ バックナンバー
- 第1回 JavaとJavaScriptの親しい関係
- 第2回 いろいろなJavaを楽しむ
- 第3回 待望のJava SE 6 でパーシステンス
- 第4回 (Java+Derby)* Ruby on Rails プログラミング
- 第5回 【新人研修向け特別企画】JavaでPHPを使ってみた
- 第6回 JavaFXでJava RIA開発はどれくらい変わるの?
- 第7回 そろそろブログ+RSSアプリでも作ってみませんか?
- 第8回 デスクトップをJava製ウィジェットでにぎやかに
- 第9回 Google Android用携帯アプリ作成のための基礎知識
- 第10回 【新人なるプログラマーへ】ソースコードを読みましょう
- 第11回 Javaはクラウドのプラットフォームになり得るのか
- 第12回 「Javaは遅い」から「Javaは楽しい」に至る歴史
- 第13回 Subversionならできる! NetBook最強バックアップ術
- 第14回 UNIX/Linuxも楽しむJava開発者になるための学習法
- 第15回 年末でJetty(絶対)にできるAndroid携帯サーバ活用
| Java Solutionコラム一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





