忍者ブログ

カウンター

プロモーション

カレンダー

12 2026/01 02
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


No Image

PHP エディタx入力x内部解釈x出力xブラウザ(文字コード見直し)

PHP の調べ物

 PHPエディタ(php_editor と、php_editor_std) なるものと、Notepad++ EUC-JP 対応版 なるものを、
当初からPHP エディタのターゲット として使おうとしてきた。

 結局なんだか普通にエディタっぽいNotepad++ EUC-JP 対応版 を使ってきたのだが、
PHPエディタ の通常版がプロジェクト単位で使えるのもあり、そのうちこちらにした方が良いかな?
とか思いつつ、通常版は拡張子の関連付けからなんだかややこしく、プロジェクトに参加させないファイルは
開くことが出来ない気配・・・

 なので一度は簡易版みたいなスタンドあローン版があり、こちらはファイルだけを開けるので
学習用には楽だが、なんだか両方使わないといけないっていう気配に陥りそうで、ぶっちゃけややこしい・・・
Windows に拡張子の関連付けを行うと、それぞれかぶらない様に設定されてしまうのがわかったので、
この際通常のプロジェクト単位のバージョンの方に.php なども設定しなおしてみて開いてみると、
「作成するファイル名を指定してください」 と出て、その拡張子に関連付けしたファイル名は表示されるが
そのプロジェクトに参加させてみると、ファイルは中身が「空」の物、つまり新規になってしまう。

 この都合の悪さは痛い^^; 
プロジェクト単位でしか作業をしなくても、ファイル単位で使えない→通常版
プロジェクトで作業出来ないが結構いけるのかな?って思った→スタンドアローン版

で結局前もこのPHPエディタなる物はphp.exe でエラーチェック が出来るとかchmコンパイルされた
PHP マニュアルが見れる(これはエラーの詳細でジャンプできないから便利でない)とかも使えるので
使おうと思って、度々この通常かスタンドアローンか迷い、Notepad++ EUC-JP 対応版 を使ってる
始末なのだった・・・・・

 それで長くなるが今回やっとまた、PHP エディタを使おうと思い、PHP のテストなどでお決まりの
雛形があるので、その雛形を私は雛形.php って名前でつけてるのだが、これをスタンドアローンで
開いて拡張子に驚きました・・・

 その拡張子の問題について述べます。まずはそのファイルの内容です。
--------------------
<html>
<head><title></title></head>
<body>
<?php

?>
</body>
</html>
--------------------
たったこれだけ、これだけがどうもマズイみたいなのです^^;;;

これをメモ帳で開き、名前を付けて保存にすると、文字コード は「ANSI」なのです。
でもこれを、PHPエディタ のスタンドアローン版で開くと、何度 Shift-JIS で保存しても、
再度開くと「UTF-8」なのです^^;

でもなぜか、こっちのコードの例だと、Shift-JIS として認識してくれます^^;
--------------------
<html>
<head><title></title></head>
<body>
<?php
//テスト
?>
</body>
</html>
--------------------
開く時にどっちかわからないなら、Shift-JIS を選ぶかUTF-8 を選ぶか選択する様な設定が無いです><;

このPHPエディタスタンドアローン版(Ver.1.33)は、ぶっちゃけ気が付かないと、初心者は文字コード で
ハマるかもしれません。。。

 後で分かったのですが、これはNotepad++ EUC-JP 対応版 でも同様な状況な様です!!!
 なぜ気が付かなかったのかは、Notepad++ EUC-JP 対応版 の場合は、
複数同時に沢山のファイルが開けて、そのままNotepad++ EUC-JP 対応版 本体を閉じて終了しても、
次開くと、指定したファイル を閉じてない限り、セーブしてもまた開きます。
 つまり、形式変換してセーブして閉じなければ、またShift-JIS から使えて、
設定が残るのです。
 個人的には便利に思えました、しかしこれもShift-JIS 優先とかの設定があればいいですね^^;

 とりあえず、なんだか、色々エディターの問題でつまずいて、
私は、PHP エディターなる物のデフォルトがUTF-8形式であると誤解していて
これがPHP でデフォルトで扱うと便利なのかな? とか思っていましたが、
他のエディタ、Notepad++ EUC-JP 対応版 でも同様なので、これは多分デフォルトではないと
思えました。

 とりあえずは、凄い慣れない疑問でしたが、なんとなく普通は
「日本語が混ざっていないANSI は、UTF-8 であり、日本語が混ざるとANSI であってもそれは、
S-JIS(Shift-JIS)である?!ことを薄々理解しました、多分それであってるのかな???????
 
 また言い換えると、普通にメモ帳では ANSI という取り扱いしかないのに対し、
PHP エディタ や、Notepad++ EUC-JP で自動的にファイルを開いた時に認識する文字コードが違う事も
判り、あぁそういえば、PHP の設定ではAuto とか設定があるから、これがバグの原因になるのも
よく似た事なのか!と実感しましたorz


 今までとりあえずS-JIS(Shift-JIS) を使ってきたのですが、今後の為を考えて色々調べました。
<調べたサイト>
----------------------------------------------------------------------------------

php.iniの文字コードの設定 (設定の組み合わせだけ参考に)

phpiniの文字コードの設定 - [データベース]All About (設定の組み合わせを参考に、他の資料もあるサイト)
PHPの文字化けについて (こうするとこうなると結果だけ書いてある)

PHPの文字化けを本気で解決する - ぎじゅっやさん (PHPに内部エンコードの概念が無いと言っている。内部で処理するときに基本となる文字コードはあるのでは?内部のエンコード指定が固定か固定でないか?を言いたいのかわからないが、ちょっと間違っている気がする。動く組み合わせだけの参考)

XAMPP MySQL (& cakePHP) 文字化け対策: PHPを使ったWebサイト構築 備忘録 (MySQL の設定に関して触れていたので載せてある。メモですがこの例だと「utf8」を選んでいる。)

さぼてん: PHP+MySQL+UTF-8で文字化け対策 (SQLインジェクションに脆弱 とかを参考になりそうだけど、ちょっと私には気が早すぎ。そしてこのサイトの主さんも他のサイトを参考にしている、その説明の説明サイトみたいな感じ。)

文字コードの変換 (PHP で関数の例で文字コードの話、あんまり設定環境や動作環境からの文字化けとは関係無いです^^; 済みません。)

こりゃまたPHP!~PHP概説めにー : こりゃまためんどい文字コード (このサイトも文字コードの細かい詳細は他のサイトへのリンクを基本に話を進めてある。またDBやgoogle やamazon との連携する場合の事も多少書いてある。)

----------------------------------------------------------------------------------


この上記リンクを見て、結局自身のサーバや、レンタルサーバの設定を見てみないと
一番最良の設定が見えてこない事がわかった。

 
そこで、実際に、phpinfo 関数を用いて、自身のPCの設定や、無料HPを調べてみた。

<自分のPCのmbstring.xxx の設定>
Directive Local Value Master Value
mbstring.detect_order SJIS,EUC-JP,JIS,UTF-8,ASCII SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output SJIS SJIS
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding SJIS SJIS
mbstring.language Japanese Japanese
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

<とある無料HPのmbstring.xxx の設定>
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding no value no value
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

ここで、mbstring.http_input がauto となっているのは、
クロスサイトスクリプティング を考えると危険かもって気がついたのは後回しとして^^;;;
とりあえず、サーバによっては設定自体がされていない場合もある事を知った。
そのサーバが設定出来るのかや、固定されているのかによっても扱いが違ったり、
スクリプト内部から初期設定をして使うなどと言う使い方が想像できた。

なので今は、エディタの保存文字コードは特に気にしないで(ちょっと気になる部分はもちろんあるが^^;我慢して)
今後、DBやら、他のサイトの機能を連携させたりする事が出てきた場合に、臨機応変に切り替えるか、
それとも汎用性のある変換ルーチンやクラスライブラリをPHPの関数で作れるのならば、
作れる能力が付いた頃になんとか考えてみようと思いました。

 またちょっと予断ですがDBの文字コードについて、良い例のサイトがあったのでリンクをメモとして残します。
以下リンク。

MySQL - Wikipedia
MySQL5はsjis(Shift JIS)、utf8(UTF-8)、ujis(EUC-JP)など各種文字セットを指定できるとある。

 最後に関係ありませんが、PHP でS-JIS(Shift - JIS) を使い続けるのは文字化けの問題からは
セオリーではないみたいです。PHP ではEUC-JP か、UTF-8 を使うべきだそうです。
データベースと共に用いる場合にはデータベースの文字コードにも考慮しなければいけないので
文字化けを極力防ぐには、PHP やデータベース の内部処理の文字コードに合わせるのが
ブラウザなどを抜いた処理の部分では一番の文字化け対策の様です。

 

 

拍手[0回]

PR

No Image

やっとわかった!PHPのバージョンの謎!(PHP5.3.2とか)

PHP の調べ物

 前回の私のサイトで、PHP のコンパイラのバージョン、つまりVisual C++ のコンパイラの違いで
PHP の本体プログラミングが収められている圧縮ファイルやインストーラーが違うのでは?と思い、
それでも何かApache の.httpd ファイルの設定をいじってみたり、PHP.ini の設定をいじってみたりして、
途方に暮れていました。

 そして、圧縮形式やインストール形式、名前の違うPHP ファイルを手当たり次第解答したり、
そして判ったのです・・・・

 結論:
 PHP は、VC++ のコンパイラのバージョンでWebサーバ環境を分けてしまっている!
(5.3.2のみなのか、以降ずっとなのか不明)

 つまり、IIS を使うならVC9、Apache 使うならVC6 みたいです(前回の私のサイトを見た方が早い)。

 これ正直・・・ コンパイラ の設定とかプリプロセッサをよく知ってるなら、
VC++ の6や9のバージョン違いを把握して、こんな分け方しないで、
Apache 用でVC6 とVC9 でコンパイル 出来るとか、
IIS用でVC6 とVC9 でコンパイルできるとかしないのかな?とか。

 もしくはApahce 用であっても、VC6 コンパイラバージョン、VC9 コンパイラバージョンという分け方、
同様にIIS 用でVC6 コンパイラバージョン、VC9 コンパイラバージョンという分け方をしたら、
こんな変な所でつまずかない気がしたorz

 あと、結果的に現状で、IIS 用のDLL とかApache 用のDLL とかがインストーラーの違い(コンパイラの違い)
によって違うの部分があるならパッケージ内容を何処かに詳細な記載をするべきだと思った。
 また、Thread Safe 版と、Non Thread Safe 版でも使えるWebサーバ とかCGI とか用途が違い
パッケージが違うみたいです。

 Webサーバの選択でIIS かApache とかの環境ごとにダウンロード した方が、
VC バージョン表記で分類するダウンロード の方が、使う側はとても楽なのにと思った。

 コンパイラのバージョン で分けるのは開発している人の都合であっても?使う側の都合じゃないよ?!
そう分けてるって思うのは私だけなのだろうか?

 まぁなんらかの理由で現状続いているやり方なので、そのやり方を理解するしかないが、
少し簡潔なやり方ではないと思えた。

 こんな事を話していても始まらないので終わりにしようと思うorz


 次回は実際にPHP のインストールパッケージ(Windows のzip 版) の
ファイルの比較とファイルの用途の解明をしてみようと思います。

次回に続く

 
追伸:
この記事は古くなっています!
この後の続きを書きました。

追伸:
上記の記事は古くなった!!!

追記の内容は
Apache とPHP のバージョンについて(2014年3月31日)
に書きました。

 

拍手[1回]


No Image

PHP はどうもコンパイラのVer でWebサーバを決めている?!

PHP の調べ物

 なんだかPHP と Apache をインストールしたのだが動かないのが
前回(っていうか今日はブログ一日で何回書いているんだw)なんだが、
まぁとりあえず他人のブログなどを拝見させてもらいながら進めようかなと
Webを冒険してた訳なのですが、やっぱりダウンロードページをもう一度みて
他のバージョンとの違いをもう一度確認してみようかなと思って見て来ました。

 そこで横に書いてある得体も知れない何かを伝えている英語が気になりました・・・・
IIS はVC9?  PHP はVC6? え!? どう言う事なんだ???!!!
英語読めない私でも何かピンとキターーーーー!
つまり、VCコンパイラのバージョンによってApache かIIS のどちらに使うかの
推奨?推薦?バージョンが決まっているって事?!

 とりあえず怪しいので、適当でも良いのでPHP のダウンロードサイト
右にある英文を適当に訳してみた。

Which version do I choose?
(私はどちらのバージョンを選択すればよいか?)

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
(あなたは、apache.orgからApache 1またはApache2のPHPを使用している場合 PHPのVC6にバージョンを使用する必要があります)

If you are using PHP with IIS you should use the VC9 versions of PHP
(あなたがIIS上でPHPを使用する場合PHPのVC9バージョンを使用してください)

VC6 Versions are compiled with the legacy Visual Studio 6 compiler
(VC6にバージョンは、従来のVisual Studio 6コンパイラでコンパイルされています)

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.
(VC9のバージョンは、Visual Studio 2008のコンパイラでコンパイルされ、パフォーマンスと安定性の改善があります。)

The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed
(VC9のバージョンをお持ちならばマイクロソフト2008 C + +のランタイム(x86)またはマイクロソフト2008 C + +のランタイム(x64)をインストールする必要があります)

Do NOT use VC9 version with apache.org binaries
(apache.org バイナリでVC9バージョン を使わないでください)

 っていうかw 今日リアル寒すぎるので^^; また後で編集します・・・・w
後日ですが、翻訳完了しておきましたw

 ※このVCコンパイラ によってPHP のWebサーバ が違うのは、
5.3.2のみなのか、以降ずっとなのか不明でした。


次回のブログに続く


 

 追伸:

上記の記事は古くなった!!!

追記の内容は
Apache とPHP のバージョンについて(2014年3月31日)
に書きました。

拍手[0回]


No Image

PHP5.3.2とApache2.2.15(気軽すぎた軽率なバージョン移行)

Apache と PHP の調べ物

 PHP5.3.0 からPHP5.3.2 へ
Apache2.1.11 からApache2.1.15 へ同時になにげなく移行しようと思ったのですが、
なぜかApache のhttpd ファイルにPHP の設定を4行書き込むとそのうち1行はなんとかエラーは
無いのですが、他の3行はまるで受け付けません。

 調べてみると、PHP5.3.2 にはPHP5.3.0 にあったファイルが無くなっていたり、
ちょっと不安要素もあります。

 これらの意味が判りました、コンパイラのバージョンによってWebサーバを決めている様なのです!!!
続き(後から書いたブログ) に詳細が載っています。


 またApache ですが、今まで何気なく使っていましたが、ダウンロード時点ですでに
OpenSSLを使えるmod_ssl が組み込まれた物と、そうでない物が存在している事も
知ってはいましたが、さほど気にしていませんでした。
 そしてPHPでは、Apache2 の MPM マルチスレッドモードを実運用環境で使用することは推奨されて
いなかったり
と色々ある様なので、結構奥が深いと思いました。

 PHP は特にですが、バージョンごとに内容が全く違いすぎて、その違いを簡単に調べるすべや、
経験や、情報収集の仕方が見つからないならば、下手にバージョンを変えるべきでは無い事も
個人的な考え方ですが身をもって理解しました。
 PHP は下位互換性の設定など勝手になんとかなると思って当てにしてはいけない! 
これが身をもって学んだ経験だと思います^^;


 とりあえず、PHPは5.3.0 に戻して、Apache だけをVerUpできるかやってみようと思います。
まず全部白紙に戻してみますw そんな感じでーw(どんな感じだろ?w)


追伸:このネタの落ち度は追求した結果わかりました。

 うん! これ(上の  で消した文章)も違ったね! ハマってる時に出した結論はある程度時間が
経つと変わったり、他の事に気が付いたり、他の情報が入り物事の見方が変わるもんですw
ってことで申し訳ないですが@@;

 まぁでも、このブログのタイトルに気軽すぎた軽率なバージョン移行 とありますが、
このPHP やApache と長く付き合っていく上で良い失敗、良い経験をしたと思っています。

多少ある(結構あるかも・・・w)続き(後から書いたブログ)をご覧下さいっw

拍手[0回]


No Image

qualified domain name(FQDN:完全修飾ドメイン名)のエラー

Apache の調べ物

 なにやら?!毎回Apache のエラーに出ているメッセージが気になる。

httpd.exe: Could not reliably determine the server's fully qualified domain name,
using xxx.xxx.xxx.xxx for ServerName

これが出るので調べてみた。

なんだかこれは「確実なサーバの完全修飾ドメイン名を決定することができなかった。」らしい

 つまりドメインネームサーバー(DNS)を設定しているのなら、そこから自身の名前を照会して
解決する様だが、DNSもないし、単純に名前が解決していない様だ。

私の場合はApache のWebサーバーのドメイン名をlocalhost としているが、
それでもこのエラーは出るらしい。

まぁなんだか良くわからない部分もあるが、とりあえず確実に名前を解決してあげる方法が
ある様なので設定してみたいと思う。

なぜかこれはhttpd ファイル(Apache の設定ファイル)では無い。
Apache が適当に回避してくれれば楽なのだが、とても忠実にOSから見えるドメインに対しての
設定をしないといけない様だ。

OS(私はWindows XP)でそのドメインの設定のファイル(通称:ホスト名解決ファイル と言うらしい)は、
%Systemroot%\System32\Drivers\Etc にある。

これはWindows によって場所が違うらしい
-------------------------------------------------------------------------------------------------
   Windows NT                    %Systemroot%\System32\Drivers\Etc
   Windows 95                    <ドライブ>\<Windows フォルダ>
   Windows for Workgroups        <ドライブ>\<Windows フォルダ>
   Windows 3.1                   <ドライブ>\<Windows フォルダ>
   MS-Client 3.0                 <起動ボリューム>\Net
   Lan Manager 2.2c クライアント  <起動ボリューム>\Net
-------------------------------------------------------------------------------------------------

でそのフォルダにある、「hosts」と言うのが今回変更しようとしているホスト名解決の順序が
記載されているファイルである。

これに、
127.0.0.1        localhost.localdomain localhost
とあるハズだが、これの下に一行自身のIPアドレスと、Apache の設定ファイルで
指定したドメインの名前を入れて保存すれば完了である。

127.0.0.1        localhost.localdomain localhost
xxx.xxx.xxx.xxx       ????.???

xxx.xxx.xxx.xxx=PCのIPアドレス
????.???=Apache で付けたドメインの名前


追伸:やはり私の設定ではドメインの名前をlocalhost としてしまっているので
xxx.xxx.xxx.xxx にはApache で指定したアドレスのlocalhost は使えない様だ。


追伸の追伸: でも何かこの方法のみでは解決できなくて、同じApache Service のえらーが
イベント ビューア で残ってしまう。

 やはり思ったのだが、普通はWeb上でDNSが紹介してくれる物を
擬似的にローカルに構築したWebサーバーなので、DNS関係の設定が出来るルーターがあれば
そのルーターに擬似的と言うか仮想的にそのドメインの名前をIPアドレスで返す設定を
組み込んだ方が実験の意味では実際のWeb上に近しい模擬テストになり正解!
なのだと思う。

 でもルーターの設定をいじりたく無いが、そのPCでのみApache でエラーを出さない用に
したいなら、route コマンド できっと経由ルートを作り、自身のPCに指定したら
多分だがエラー は出なくなると思う。

参考の route コマンド の説明URL
route - ルーティングテーブルの表示/設定を行う(@ITより)

route コマンドの使用方法 - テクニカルサポート(Cisco Systems より)


一応メモであるっ!

拍手[1回]


[PR]