AN HTTPD + PHP + MySQL の日本語表示の問題の続きですが、PHP を最新版に変更して、
日本語パッチを当てることで、HTML を簡素化することにしました。
いとさんの解説ページ、「AN HTTPDでPHPを動かす」
http://homepage1.nifty.com/yito/anhttpd/faq/php.html
には、
http://homepage1.nifty.com/yito/anhttpd/faq/xoops.html
「AN HTTPDで XOOPS を動かす」を視野に入れた場合等、
「確実性を求める人は 4.3.1を使い、それ以降のバージョンは使わないのがいいかと思います。」
とありましたので、できれば避けたかったのですが、「php.ini」を、どう書き換えても、
「SJIS」スプリプト及び、「MySQL」の「SJIS」データが、デフォルトで、文字化けしてしまいます。
「php.ini」の「SJIS」指定が完全に無視されているとしか思えません。
手順としましては、まず、
http://www.php.net/downloads.php
から、「php-4.3.4-Win32.zip」をダウンロードして、解凍します。
次に、
http://www.geocities.jp/rui_hirokawa/php/
「PHP 日本語ページ」の、
http://www.geocities.jp/rui_hirokawa/php/
「マルチバイト対応版PHP-4.3.4 (PHP 4.3.4,マルチバイト対応版v.1.1)」
をダウンロード・解凍して、中身を、先ほど解凍した「php-4.3.4-Win32」に上書きします。
あとは、いとさんの解説ページに従って進めますが、補足事項が、二点あります。
* 添付のdll(dlls/*.dll)をパスの通っているディレクトリ(C:\Windows\system32 等)にコピーする。
* 「extensions=php_mbstring.dll」を二重登録しない
(「extension=php_mbstring.dll」の外した「;」を元に戻して、再度コメント化する)
この二点を守らないと、正常に動作しません。
その他、変更点:
default_charset = "Shift_JIS"
mbstring.internal_encoding = SJIS
AN HTTPD + ActivePerl + MySQL では、問題なく動作して、
AN HTTPD + PHP + MySQL ではエラーが出た、以下の件は、
「C:\mysql\share\」を作成、「charsets」をすべての中身ごと、そのフォルダ内にコピーすることで、解決としました。
「sjis.conf」だけをコピーするのでは、なぜかエラーが出ました。
>
File 'c:\mysql\\share\charsets\?.conf' not found (Errcode: 2) Character set '#13' is not a compiled character set and is not specified in the 'c:\mysql\\share\charsets\Index' file
これは、最新版に、日本語パッチを当てた時点で確認したところ、
>
File 'c:\mysql\share\charsets\?.conf' not found (Errcode: 2) Character set '#13' is not a compiled character set and is not specified in the 'c:\mysql\share\charsets\Index' file
と、「\\」の二重表示がなくなっていました。
PHP でエラーとなる、「C:\mysql\share\charsets」のディレクトリ指定を、当方の環境に変更しようとしたのですが、
どうも、「php4ts.dll」内で指定しているようで、ファイルをしばらくいじってみましたが、成功しませんでした。
AN HTTPD + ActivePerl + MySQL では、特に指定しなくても、
「E:\xxx\yyy\zzz\MySQL\share\charsets」のパスが通っていたので、少々不満です。
やはり、いとさんの解説ページは、確信に近いものがありますね。
「sjis.conf」はその場所に、置かなければなりません。その他の場所は不可という結論です。
>
MySQLについては、
http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
の 6. 日本語表示 のところを読んでください。
中田様、
ご指導、ありがとうございます。あらためて、そのとおりにいたしました。また、
>
ご自分のページで解説等をしてくださるのは、もちろんかまいません。
ご許可、ありがとうございます。
当方の環境が、光 100MB になりましたら、正式に公開する予定ですので、それまでに、
可能な限りのことを試してみたいと思います(現在、4ヶ月、待たされています)。
いまは、Windows2000 Pro + AN HTTPD 1.42k を、DynDNS にて、ISDN で、試験公開してかれこれ二週間になります。
(OS、サーバとも、再起動回数「0」です)
今回の結論である、PHP スクリプトを、似たようなことをされている方の参考になればと思い、以下に記します。
「MySQL_SJIS.php」のように、適当に名前をつけて、「SJIS」で保存してください。
<HTML>
<HEAD>
<TITLE>全国郵便番号</TITLE>
</HEAD>
<BODY>
<TABLE ALIGN="CENTER" WIDTH="750" BORDER="5" CELLSPACING="3" CELLPADDING="2" BGCOLOR="snow" BORDERCOLOR="lightyellow" BORDERCOLORLIGHT="ivory" BORDERCOLORDARK="lemonchiffon">
<?php
echo "<TR>";
echo "<TH NOWRAP>郵便番号</TH></NOBR>";
echo "<TH NOWRAP>都道府県</TH></NOBR>";
echo "<TH NOWRAP>市区町村</TH></NOBR>";
echo "<TH NOWRAP>詳細</TH></NOBR>";
echo "</TR>";
$db = mysql_connect('localhost','User_Name','User_PassWord');
mysql_select_db('DataBase_Name');
$sel = mysql_query('SELECT newpost,pref,area,addr from jp_zipcode WHERE pref="東京都" ORDER BY newpost');
while ($row = mysql_fetch_array ($sel)) {
echo "<TR>";
echo "<TD>".$row["newpost"]."</TD>";
echo "<TD>".$row["pref"]."</TD>";
echo "<TD>".$row["area"]."</TD>";
echo "<TD>".$row["addr"]."</TD>";
echo "</TR>";
}
mysql_free_result ($sel);
mysql_close($db);
?>
</TABLE>
</BODY>
</HTML>
竹嶋さん、
MySQLについては、
http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
の 6. 日本語表示 のところを読んでください。
ご自分のページで解説等をしてくださるのは、もちろんかまいません。
しばしばすみません。竹嶋 健二です。
AN HTTPD + ActivePerl + MySQL についてなのですが、Perl / CGI からの呼び出しで、
ユーザ名とパスワードの指定方法は、この前書きましたが、
タグ表示がどうなるのかわからなかったため、「( )」が余分についています。
正式に、もう一度書いておきたいと思います。
$db = DBI->connect('DBI:mysql:DataBase_Name','User_Name','User_PassWord') || die "CONNECT ERROR $DBI::ERRSTR";
詳しい導入方法は、
http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
「MySQLのインストール/動作確認手順」を参考にしました。
このページに、AN HTTPD + PHP + MySQL が続いて解説されていましたので、
データベースのデータに、日本語が含まれる場合をやってみました。
日本語データの含まれるテーブルは、以下のページを参考に作成します。
http://y-kit.jp/saba/xp/mysqltry1.htm
http://y-kit.jp/saba/xp/mysqltry2.htm
http://y-kit.jp/saba/xp/mysqltry3.htm
「SQLコマンドでMySQLデータベースを使ってみよう 準 備 篇」に、
全国郵便番号のデータと、その登録方法が掲載されていました。
まず、そのとおりにやってみます。
次に、
http://www.spencernetwork.org/
「PHP SAMPLES & TIPS」の中の
http://www.spencernetwork.org/jcode/
より、「国際化されてなくても変換したい方へ」
の、最新版をダウンロードして、解凍、
PHP スクリプト等を置く場所へ、コピーします。
これで、一応、日本語表示が可能になります。
それから、
http://www.softagency.co.jp/mysql/Manual/4.1.1/html-split/manual_3.html#SEC180
を参考に、作成したデータをソートしつつ、ブラウザで表示します。
「MySQL.php」などと適当な名前をつけて、「SJIS」で、次のスクリプトを保存します。
<HTML>以上のとおりにすると、「MySQL」が、「ぷぷっ!」と鳴いて、ソートされたデータが、HTML 表示されます。
<HEAD>
<TITLE>PHP TEST</TITLE>
</HEAD>
<BODY>
<TABLE ALIGN="CENTER" WIDTH="750" BORDER="5" CELLSPACING="3" CELLPADDING="2" BGCOLOR="snow" BORDERCOLOR="lightyellow
" BORDERCOLORLIGHT="ivory" BORDERCOLORDARK="lemonchiffon">
<?php
include_once("./jcode.phps");
echo "<TR>";
echo "<TH NOWRAP>";
$Str = "郵便番号";
echo JcodeConvert($Str, 0, 1);
echo "</TH></NOBR>";
echo "<TH NOWRAP>";
$Str = "都道府県";
echo JcodeConvert($Str, 0, 1);
echo "</TH></NOBR>";
echo "<TH NOWRAP>";
$Str = "市区町村";
echo JcodeConvert($Str, 0, 1);
echo "</TH></NOBR>";
echo "<TH NOWRAP>";
$Str = "詳細";
echo JcodeConvert($Str, 0, 1);
echo "</TH></NOBR>";
echo "</TR>";
$db = mysql_connect('localhost','User_Name','User_PassWord');
mysql_select_db('DataBase_Name');
$sel = mysql_query('SELECT newpost,pref,area,addr from Table_Name WHERE pref="東京都" ORDER BY newpost');
while ($row = mysql_fetch_array ($sel)) {
echo "<TR>";
echo "<TD>".$row["newpost"]."</TD>";
echo "<TD>";
$Str = $row["pref"];
echo JcodeConvert($Str, 0, 1);
echo "</TD>";
echo "<TD>";
$Str = $row["area"];
echo JcodeConvert($Str, 0, 1);
echo "</TD>";
echo "<TD>";
$Str = $row["addr"];
echo JcodeConvert($Str, 0, 1);
echo "</TD>";
echo "</TR>";
}
mysql_free_result ($sel);
mysql_close($db);
?>
</TABLE>
</BODY>
</HTML>
どうも。はじめまして。竹嶋 健二と申します。
このたび、自己解決したご報告をしたいと思います。
当方の環境:
WindowsXP Pro SP1
Office2003 Pro
CPU : Intel Pentium4 2.40GHz
RAM : 1024MB
AN HTTPD : バージョン 1.42k
ActivePerl : ActivePerl-5.6.1.628.msi
KAKASI for Win32 : kakasi-2.3.4
Namazu for Win32 : Namazu 2.0.12
search-s for Namazu : srchs092.exe
Adobe Reader 6.0
MySQL : 4.0
PHP : 4.3.1
//
Windows2000 Pro
Office2000 Pro
CPU : Intel PentiumV 866MHz
RAM : 512MB + 64MB
AN HTTPD : 1.42k
ActivePerl : 5.6.1.628
という、2本立てになります。
2台とも、AN HTTPD その他のソフトは、Windows ドライブをはずして、
「E:\xxx\yyy\zzz\」のようにインストールしてあります。
じつは、AN HTTPD は、PC-9801 / Windows95 の時代より、使用させていただいておりますが、
このたび、IIS にかかわることになりそうなので、とりあえず、
「自サーバのセキュリティ検証」ということで、
Windows2000 を、DynDNS にて、かれこれ 10日ほど公開しております。
公開ということになれば、「安全」と「安定」が求められますから、
AN HTTPD が、もしや落ちたりはしないかなどという実験をしている最中です。
で、AN HTTPD は最新版がよい、その他のソフトはクエスチョン、ということのようなので、
http://homepage1.nifty.com/yito/anhttpd/install.html
http://homepage1.nifty.com/yito/anhttpd/env.html
を、参考に、ActivePerl : 5.6.1.628 を、クリーンインストールしてみました。
>
1.Perlをインストールしたフォルダ(例えば C:\Perl)以下を削除する。複数フォルダある場合はそれらを全て削除。
2.レジストリエディタ(regedit.exe)で以下のレジストリが存在すれば全て削除する。
・HKEY_LOCAL_MACHINE\Software\ActiveState
・HKEY_LOCAL_MACHINE\Software\ActiveWare(Perl for Win32をインストールした場合に存在)
・HKEY_LOCAL_MACHINE\Software\Perl
3.AUTOEXEC.BATのPATH(Win9x)や環境変数のPATH(WinNT系)に C:\Perl\bin などPerlのパス設定があれば削除する。
4.アプリケーションの追加と削除の一覧に名前だけ残ったときは、窓の手などのツールを使って削除する。
>
WiundowsXP にて、以上のようにしたところ、
「コントロールパネル」に、登録情報だけが残ってしまいまして、
仕方なく、
ActivePerl-5.8.0.805-MSWin32-x86.msi 及び、
ActivePerl-5.8.3.809-MSWin32-x86.msi の、
再インストールを試みたところ、完全に削除することができました。
順番としましては、
ActivePerl-5.8.0.805-MSWin32-x86.msi を入れて、削除、
ActivePerl-5.8.3.809-MSWin32-x86.msi を入れて、削除、
ActivePerl-5.6.1.628-MSWin32-x86-multi-thread.msi を入れたところで、
登録情報が残っていることに気が付き、すべて、
再インストールの「削除」オプションを併用しての削除、
その後、ActivePerl-5.6.1.628-MSWin32-x86.msi をインストール、
ということになります。
どうも当方の環境では、レジストリと「窓の手」だけでは不十分で、
その後、再インストールの「削除」オプションで、
完全削除をしないといけないようです。
ここから、WindowsXP の、本格自サバ計画が始まります。
http://homepage1.nifty.com/yito/anhttpd/faq/index.html
の記事から、「sendmail」を、装備、
http://y-kit.jp/saba/
を参考に、「MySQL」の搭載、
http://www.geocities.co.jp/SiliconValley-SanJose/2576/
及び、
http://sl.hunet.ne.jp/cgi/_cool/namazu2/
を見て、「Namazu」を入れる、と来たところで、
「Namazu」が、Office2003 Pro を認識しないという問題に突き当たりまして、
昨日(もう今日のことになりますが)ようやく、あちらへ自己解決の報告メールを出したところです。
何が必要で、何が必要でないか、また、何が悪いのかが、
まったくわからない状態での作業でしたから、
結構手間取りまして、自己解決のメールを出して、
「Namazu」サイドの、最新ログを見ましたところ、
私めの、約3時間前に、「Namazu」より、同様の解決がなされていた旨、知りました。
「Namazu」の、Office2003 への、対応状況に興味がある方は、
http://www.queen.ne.jp/iMA/showmdir.pl?namazu-devel-ja=Current
を見てください。「竹嶋 健二」の名で、投稿しております。
さて、これより、「MySQL」を、CGI 対応しましたところ、なにやら、
http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
に、PHP なるものの記述があるではありませんか。
「MySQL」の、CGI 化は、ユーザ名とパスワードの設定方法が記載されていなかったため、
少々手間取りましたが、解決は比較的早かったです。正解は、
$db = DBI-(>)connect('DBI:mysql:DataBase_Name','User_Name','PassWord') || die "CONNECT ERROR $DBI::ERRSTR";
になります。
ところで、PHP って、導入は簡単なはずですよね。
http://homepage1.nifty.com/yito/anhttpd/faq/php.html
に書いてあるとおりです。
いずれのログを見ても、紹介ページの記載どおりにしていなっかたため、
正常に動作しなかったようです。
「(ここのところを)よく読んでください」というアドバイスに終始しておりまして、
皆さん、それで解決していらっしゃいます。
というわけで、私めも、同様の投稿をするのがいやだったため、自己解決に至りました。
ところが、どう頑張っても、「php.ini」の「423行目」にエラーが出て、動作しません。
これを、「c:\php\sapi\php4isapi.dll」のようにすると、セキュリティエラーも出ず、
いとも簡単に作動するのです。
「php.ini」を、間違って複数個作ってしまったのではないかという疑いで、
すべてのドライブの検索も、何度かいたしました。
>
Security Alert! The PHP CGI cannot be accessed directly.
This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.
>
まったく、過去の投稿と、同じ症状です。お話になりません。
仕方なしに、「最新版」の導入を検討いたしまして、ダウンロード、解凍もいたしました。
で、解決いたしました。
>
確実性を求める人は 4.3.1を使い、それ以降のバージョンは使わないのがいいかと思います。
>
と、あったので、できることなら避けたかったのですが、ソースを見ても、皆目わかりません。
いや、それでですね、「4.3.1」で解決したのです。
「php-4.3.4-Win32.zip」を解凍して得られたものを、手順どおりに、
コピペ、リネームして、「php.ini」の書き換えに取り掛かったところ、
問題の「423行目」が、
extension_dir = ./
ではなく、
extension_dir = "./"
と、なっておりました。
慌てて、削除してしまった「4.3.1」を解凍しなおして、
extension_dir = "E:\xxx\yyy\zzz\PHP\extensions\"
としましたところ、テストページは、完全動作いたしました。
extension_dir = E:\xxx\yyy\zzz\PHP\extensions\
は、どうも、バグの、一種のようですね。
いやあ、「C言語風」に記述すればよい、などというログもあって、
extension_dir = /[Ee]\|/xxx/yyy/zzz/PHP/extensions/
みたいな書き換えも、少しずつ修正しながら、何度もトライしてみたのですが、
結論に至るまで、徹夜で、24時間かかりました。
そういうわけで、このたびのご報告を終わります。
ところで、WoindowsXP に、AN HTTPD を搭載するまでは、
現在 IIS が入っている、Windows2000 に、AN HTTPD を入れて、
ローカルなテストなどをしていたのですが、
print "Content-type: text/html\n";
の記述が、まかりとおっておりました。
BIGLOBE のサーバでも、問題なく、動作しております。
無論、正解は、
print "Content-type: text/html\n\n";
なのでしょうが、Windows2000 で動いて、WindowsXP で動かないのは何故?
と、思います。
「Transfer-Encoding: chunked 2BD」と、でます。
悪ければ、デバッガが、立ち上がります(設定変更していないものですから)。
それと、いま、書き込み中に、間違えて、「ESC」を何度も押してしまったのでしょうか、
九分通り書いたところで、メールアドレスもろとも、すべての文章が消えてしまいました。
そのため、日付の記述が、厳密には、一日ずれてしまっています。
これは、「仕様」になるのですね?
長々と、失礼いたしました。