石井さんによる PostgreSQL 6.3.2 のインストール手順に従って、PostgreSQL 6.3.2 のインストールが完了していることが前提です。
ねたは以下の URL から持ってきます。
server1:/usr/local/etc# tar xvzf /usr/src/apache_1_3_1_tar.gz server1:/usr/local/etc# tar xvzf /usr/src/php-3_0_2a_tar.gz
~/.profile に以下の1文を追加します。
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
結局、安易な「せっかちな人用」を選びました(^^;。
server1:/usr/local/etc# cd apache_1.3.1 server1:/usr/local/etc/apache_1.3.1# ./configure --prefix=/www server1:/usr/local/etc/apache_1.3.1# cd ../php-3.0.2a/ server1:/usr/local/etc/php-3.0.2a# ./configure --with-pgsql --with-apache=../apache_1.3.1 --enable-track-vars server1:/usr/local/etc/php-3.0.2a# make server1:/usr/local/etc/php-3.0.2a# make install server1:/usr/local/etc/php-3.0.2a# cd ../apache_1.3.1/ server1:/usr/local/etc/apache_1.3.1# ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a server1:/usr/local/etc/apache_1.3.1# make ※この時点で、httpd のバイナリが Apache の bin(ここでは /www/bin) ディレクトリにできたはずとのこと server1:/usr/local/etc/apache_1.3.1# make install ..... +--------------------------------------------------------+ | You now have successfully built and installed the | | Apache 1.3 HTTP server. To verify that Apache actually | | works correctly you now should first check the | | (initially created or preserved) configuration files | | | | /www/etc/apache/{httpd,access,srm}.conf | | | and then you should be able to immediately fire up | | Apache the first time by running: | | | | /www/sbin/apachectl start | | | Thanks for using Apache. The Apache Group | | http://www.apache.org/ | +--------------------------------------------------------+ server1:/usr/local/etc/apache_1.3.1# cd ../php-3.0.2a server1:/usr/local/etc/php-3.0.2a# cp php3.ini-dist /usr/local/lib/php3.ini
/www 配下は以下のようになりました。
server1:/usr/local/etc/apache_1.3.1# ls /www bin/ etc/ include/ libexec/ man/ sbin/ share/ var/
Apache はだいぶおりこうになって、 デフォルトの設定ファイルをすべて用意してくれるようになりました。 変更したところは、/www/etc/apache/srm.conf に
AddType application/x-httpd-php3 .php3を1行加えたのと、/www/etc/apache/httpd.conf の Group に引数が なかったので #-1 を加えただけです。では、起動してみましょう。 起動の仕方もすっかり変わってしまいました。
server1:/www/etc/apache# /www/sbin/apachectl start
一応うまく動いたようです。が、Apache のディレクトリ構造 が全く変わってしまっていて、面食らってしまいました。
http://サーバ/~ユーザ名/形式のアクセスで、「Forbidden」になってしまい、ちょっと悩みました。 /home/ユーザ名/public_html 配下に今までの *.php を全部コピー したんだけどなあ。ディレクトリのパーミッションも合ってるし。
原因は、index.php3 はあるけど index.html がないことでした。
http://サーバ/~ユーザ名/index.php3と明示的に指定すれば表示できました。やれやれ。
以下のようになっています
ディレクトリ | ファイル名 | 説明 | ||||
---|---|---|---|---|---|---|
/www: | bin: | |||||
dbmmanage* | ユーザ認証ファイル(DBMフォーマット)保守 | |||||
htdigest* | ユーザ認証ファイル保守 | |||||
htpasswd* | ユーザ認証ファイル保守 | |||||
etc: | apache: | |||||
access.conf | アクセス制御設定ファイル | |||||
access.conf.default | access.conf と同じ | |||||
httpd.conf | サーバ設定ファイル | |||||
httpd.conf.default | httpd.conf と同じ | |||||
magic.conf | mod_mime_magic用 magic データ設定ファイル | |||||
magic.conf.default | magic.conf と同じ | |||||
mime.types | ファイル拡張子と MIME タイプ対応設定ファイル | |||||
mime.types.default | mime.types と同じ | |||||
srm.conf | 名前空間設定ファイル | |||||
srm.conf.default | srm.conf と同じ | |||||
include: | apache: | *.h | 各種ヘッダファイル | |||
libexec: | (空) | |||||
man: | man1 | *.1 | マニュアルページ | |||
man8 | *.8 | マニュアルページ | ||||
sbin: | ab | Apache ベンチマーク・ツール | ||||
apachectl | Apache サーバ制御インターフェース | |||||
apxs | 拡張モジュールのインストーラ | |||||
httpd | Web サーバ本体 | |||||
logresolve | ログファイルにおけるホスト名解決 | |||||
rotatelogs | ログファイルのサイクリック使用 | |||||
share | apache | cgi-bin | * | cgi スクリプト | ||
htdocs | *.html | HTML サンプル(It Worked!) | ||||
icons | *.gif | 各種アイコン | ||||
var | apache | log | access_log | アクセスログ | ||
error_log | エラーログ | |||||
proxy | (空) | |||||
run | httpd.lock.数字 | ロックファイル | ||||
httpd.pid | pid ファイル |
まず、デフォルトの拡張子が phtml から php3 になったので、 ファイル名の変更を行います。で、動かしてみますが、 文法が変わっているので当然動かない、と。
けっこうな量のコードをすでに書いてしまっているので、 自動変換ツールなるものに挑戦しました。
| |
こいつは何をしてくれるんでしょう? | |
こいつは PHP/FI 2.0 のスクリプトを、うまいこと PHP 3.0 に 変換してくれます。というのはちょっと大袈裟かな?多くの場合、 (まだ)やってくれない事と、決してやってくれないことがあります。 PHP/FI 2.0 と PHP 3.0 に関する非互換性については、 CHANGES を見てください。 現在、このコンバータは以下の事をやります。
あまり多くの機能を盛り込みたくはないので、このコンバータは これ以上のことはやってくれません。単に、PHP/FI 2.0 のスクリプトを PHP 3.0 に移行するための早道を提供するだけです。たぶんいろんな トラブルを避けるためにも、この変換をかけた後も、コードを いろいろといじくり回さなければならないでしょう。 | |
インストール | |
単に 'make' とやるだけ。 | |
使い方 | |
script.phtml という名前の PHP/FI 2.0 スクリプトを script.php3 という名前の PHP 3.0 スクリプトに変換するには、 以下のようにやります。 ./convertor < script.phtml > script.php3 もしちゃんと動いたら、何もメッセージも出ず、変換された script.php3 スクリプトが出来上がります。(でも、前に述べたように、 コンバータがサポートしない違いもあるので、PHP 3.0 配下で 動かす前にちいとばかり修正してやらなくてはなりません。) 'parse error' と言われたら、以下のうちのどれかです。
いずれの場合も php-dev@php.iquest.net に報告してください。 問題となったスクリプトも付けてくださいね。 これらのことはあまり起こらないとは思うんですが、サンプルで やっているときに出た事はあります。このコンバータは PHP 3.0 の パーサを元に、PHP/FI 2.0 言語を理解するように変更を加えて、 変換されたスクリプトを吐くようにしたものです。PHP/FI 2.0 の パーサと PHP 3.0 のそれが違うんで、変更された PHP 3.0 パーサ が認識する言語はちゃんと定義されているんですが、実装する時に 抜けがあったかもしれません。このコンバータは、 PHP/FI 2.0 そのものよりも、ちゃんと PHP/FI 2.0 言語を認識するかも しれません。 |
で、さっそくバイナリを作って実行してみたら、ぬわんと プロンプトに戻って来ません。追っかける気力もないので、 動いた人誰か教えてください(;_;)。....
と言って大騒ぎしいていたら、リダイレクトでファイル名を 渡さずに引数で指定してました(^^;。浦栃@筑波大さん、ありがとう ございました。うーん、初心忘るべからず、ですな。
一部 converter が parse error となったり core を吐くような こともありましたが、無事なんとか *.phtml → *.php3 への 変換は完了しました。ちなみに parse error になったのは 文字コードが JIS だったものと、もともと文法エラーがあったのに PHP/FI では検出できていなかったというパターン。 core を吐いたのは、/* ... */ が複数行に跨っていたパターンでした。
では、いよいよ動かしてみます。引っかかったところを随時 メモしていきます。
エラー | 原因 | 対処 |
---|---|---|
hoge.phtml がない | 拡張子が変わった | hoge.php3 に変更する |
setshowinfo() がない | なくなった? | コメントアウト。 フッタ表示を抑制するために入れていたものでしたが、 これがなくても出なくなりました。 |
$a = "ABC" + "DEF" が 0 になる。 | 文字列の連結は '.'(ドット) に変わった | 実行しながら逐次 '.' に変更 |
$a[] = 配列を返す関数() で、$a[0] が 'Array' となる。 | 多次元配列のサポートに伴い、配列の扱いが変わった。 | $a = 配列を返す関数() とすれば OK でした。 |
';'(セミコロン)のみの実行行を許さない。 | 文法チェックが厳密になった影響でしょう | もともと読みやすさのために入れておいたロジックなので、 ばっさり削除。 |