忍者ブログ

カウンター

プロモーション

カレンダー

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

ConvertINetMultiByteToUnicode

Window API 関連メモ

VB 6.0 でConvertINetMultiByteToUnicode の引数に65001 が使われていて、
意味不明だった為、VC のinclude フォルダを調べてみたメモ。

WINNLS.H にページコードの定数があった、
これがConvertINetMultiByteToUnicode の第2引数の様だ。
VB 6.0 は内部的にUNICODE で動いているのでUNICODE に直すのは普通なのかもしれないが、
文字コードは変数に格納する時に、文字列として格納するかとか、バイトの配列として格納するとか、
微妙に仕様言語や、ぷラットフォームが使っている文字エンコードの扱いによって違うので鵜呑みに出来ない、
その上ブラウザなどから得た情報は、ブラウザが文字種別を解釈してそれを渡しているのか、
それとも解釈せずに渡しているのかとかも考えた方がいい様だし、特に、
RegisterClipboardFormat とかのAPI を使うときはWindows の当たり前的な仕様も考えないと
いけない、なので今度はRegisterClipboardFormat のフォーマットの種類や、
ブラウザで用いられるOLE というかドラッグアンドドロップで操作出来る情報をを調べないといけないかな、
自身の都合上(かなり独り言)。

//
//  Code Page Default Values.
//
#define CP_ACP                    0           // default to ANSI code page
#define CP_OEMCP                  1           // default to OEM  code page
#define CP_MACCP                  2           // default to MAC  code page
#define CP_THREAD_ACP             3           // current thread's ANSI code page
#define CP_SYMBOL                 42          // SYMBOL translations

#define CP_UTF7                   65000       // UTF-7 translation
#define CP_UTF8                   65001       // UTF-8 translation


ついでに国も同じくWINNLS.H にあった。

//
//  Country Codes.
//
#define CTRY_DEFAULT              0

#define CTRY_ALBANIA              355         // Albania
#define CTRY_ALGERIA              213         // Algeria
#define CTRY_ARGENTINA            54          // Argentina
#define CTRY_AUSTRALIA            61          // Australia
#define CTRY_AUSTRIA              43          // Austria
#define CTRY_BAHRAIN              973         // Bahrain
#define CTRY_BELARUS              375         // Belarus
#define CTRY_BELGIUM              32          // Belgium
#define CTRY_BELIZE               501         // Belize
#define CTRY_BOLIVIA              591         // Bolivia
#define CTRY_BRAZIL               55          // Brazil
#define CTRY_BRUNEI_DARUSSALAM    673         // Brunei Darussalam
#define CTRY_BULGARIA             359         // Bulgaria
#define CTRY_CANADA               2           // Canada
#define CTRY_CARIBBEAN            1           // Caribbean
#define CTRY_CHILE                56          // Chile
#define CTRY_COLOMBIA             57          // Colombia
#define CTRY_COSTA_RICA           506         // Costa Rica
#define CTRY_CROATIA              385         // Croatia
#define CTRY_CZECH                420         // Czech Republic
#define CTRY_DENMARK              45          // Denmark
#define CTRY_DOMINICAN_REPUBLIC   1           // Dominican Republic
#define CTRY_ECUADOR              593         // Ecuador
#define CTRY_EGYPT                20          // Egypt
#define CTRY_EL_SALVADOR          503         // El Salvador
#define CTRY_ESTONIA              372         // Estonia
#define CTRY_FAEROE_ISLANDS       298         // Faeroe Islands
#define CTRY_FINLAND              358         // Finland
#define CTRY_FRANCE               33          // France
#define CTRY_GERMANY              49          // Germany
#define CTRY_GREECE               30          // Greece
#define CTRY_GUATEMALA            502         // Guatemala
#define CTRY_HONDURAS             504         // Honduras
#define CTRY_HONG_KONG            852         // Hong Kong
#define CTRY_HUNGARY              36          // Hungary
#define CTRY_ICELAND              354         // Iceland
#define CTRY_INDIA                91          // India
#define CTRY_INDONESIA            62          // Indonesia
#define CTRY_IRAN                 981         // Iran
#define CTRY_IRAQ                 964         // Iraq
#define CTRY_IRELAND              353         // Ireland
#define CTRY_ISRAEL               972         // Israel
#define CTRY_ITALY                39          // Italy
#define CTRY_JAMAICA              1           // Jamaica
#define CTRY_JAPAN                81          // Japan
#define CTRY_JORDAN               962         // Jordan
#define CTRY_KENYA                254         // Kenya
#define CTRY_KUWAIT               965         // Kuwait
#define CTRY_LATVIA               371         // Latvia
#define CTRY_LEBANON              961         // Lebanon
#define CTRY_LIBYA                218         // Libya
#define CTRY_LIECHTENSTEIN        41          // Liechtenstein
#define CTRY_LITHUANIA            370         // Lithuania
#define CTRY_LUXEMBOURG           352         // Luxembourg
#define CTRY_MACAU                853         // Macau
#define CTRY_MACEDONIA            389         // Republic of Macedonia
#define CTRY_MALAYSIA             60          // Malaysia
#define CTRY_MEXICO               52          // Mexico
#define CTRY_MONACO               33          // Principality of Monaco
#define CTRY_MOROCCO              212         // Morocco
#define CTRY_NETHERLANDS          31          // Netherlands
#define CTRY_NEW_ZEALAND          64          // New Zealand
#define CTRY_NICARAGUA            505         // Nicaragua
#define CTRY_NORWAY               47          // Norway
#define CTRY_OMAN                 968         // Oman
#define CTRY_PAKISTAN             92          // Islamic Republic of Pakistan
#define CTRY_PANAMA               507         // Panama
#define CTRY_PARAGUAY             595         // Paraguay
#define CTRY_PERU                 51          // Peru
#define CTRY_PHILIPPINES          63          // Republic of the Philippines
#define CTRY_POLAND               48          // Poland
#define CTRY_PORTUGAL             351         // Portugal
#define CTRY_PRCHINA              86          // People's Republic of China
#define CTRY_PUERTO_RICO          1           // Puerto Rico
#define CTRY_QATAR                974         // Qatar
#define CTRY_ROMANIA              40          // Romania
#define CTRY_RUSSIA               7           // Russia
#define CTRY_SAUDI_ARABIA         966         // Saudi Arabia
#define CTRY_SERBIA               381         // Serbia
#define CTRY_SINGAPORE            65          // Singapore
#define CTRY_SLOVAK               421         // Slovak Republic
#define CTRY_SLOVENIA             386         // Slovenia
#define CTRY_SOUTH_AFRICA         27          // South Africa
#define CTRY_SOUTH_KOREA          82          // South Korea
#define CTRY_SPAIN                34          // Spain
#define CTRY_SWEDEN               46          // Sweden
#define CTRY_SWITZERLAND          41          // Switzerland
#define CTRY_SYRIA                963         // Syria
#define CTRY_TAIWAN               886         // Taiwan Region
#define CTRY_THAILAND             66          // Thailand
#define CTRY_TRINIDAD_Y_TOBAGO    1           // Trinidad y Tobago
#define CTRY_TUNISIA              216         // Tunisia
#define CTRY_TURKEY               90          // Turkey
#define CTRY_UAE                  971         // U.A.E.
#define CTRY_UKRAINE              380         // Ukraine
#define CTRY_UNITED_KINGDOM       44          // United Kingdom
#define CTRY_UNITED_STATES        1           // United States
#define CTRY_URUGUAY              598         // Uruguay
#define CTRY_VENEZUELA            58          // Venezuela
#define CTRY_VIET_NAM             84          // Viet Nam
#define CTRY_YEMEN                967         // Yemen
#define CTRY_ZIMBABWE             263         // Zimbabwe

 

拍手[0回]

PR

No Image

PHPのインストール関連のURL と 疑問 (6/6) ~php.ini と対応する関数の設定のまとめ~

PHP の調べ物

ごめんなさい、ちょっと長い間このネタは中止にします。
理由はまとまってないからです、申し訳ない。
また、Web上の文字コードはUTF-8 になり行く傾向があるようで、
何処やらの使えないPHP の本ではS-JIS なんて教えてくれて
それに従っていたので今更面倒な事が起こったのでこの辺りも含め、
見直さないといけないからです。


とりあえず関係がないですが、J-JIS で作ってしまったPHP のエディターや
統合開発環境 の設定をUTF-8 に見直そうと思います。



 色々迷ってきた訳ですが、php.ini がなぜ必要なのか?
という単純なことが前回判った気がしたので、その自分なりの再説明をして、
初心者の私が使いやすい設定と共に、php.ini で初心者が設定しておいた方が良い項目、
これは前回にも書きましたが、概要ではなくて、php の関数との対の表として、その値の種類も明確に
書いてみようと思います。
 

設定ファイルと対になる関数の値の表
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     


編集中
------------------------------ PHP-------------------------------------------------------------------------------------------------------
その打ち消すゴミメモ
(古いメモで現在多くでうたわれている、現在のPHP ではUTF-8 を使う事が流れであるのですが、
何かの本に書いてあったシフトJIS の設定が書かれているので注意してください。ただのメモです。)
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
default_charset = "Shift_JIS"
output_handler = "mb_output_handler"
include_path = ".;E:\PHP\php-5.3.0\includes"
doc_root =
extension_dir = "E:/PHP/php-5.3.0/ext"
extension=php_mbstring.dll
extension=php_mysql.dll
mbstring.language = Japanese
x          mbstring.internal_encoding = EUC-JP        Windows はメモ帳 やパスを含めシフトJIS だった為、文字化けしてしまった!
o         mbstring.internal_encoding = SJIS              Windows のメモ帳 をANSI で保存するならシフトJISに設定する
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = none;

short_open_tag = On         色々なサンプルなどを動かそうとすると、PHPコードの短縮タグを用いて書かれた
                 物が動かない場合があるので、初心者はOn にしておくべきだ。

docref_root = "/phpmanual/"                                                   これはPHPがインストールされている場所ではない!
                                     Web に公開されるディレクトリである。
                                      Apache ならばhtdocs がそのディレクトリになり、
                                     その中にphpmanual が置かれている事を言っている。
docref_ext = .html
date.timezone = "Asia/Tokyo"

 !?(非推奨)      allow_call_time_pass_reference = On
(推奨)              allow_call_time_pass_reference = Off      この値をONしないと、関数の引数で値渡しでなく、
                                     参照渡しすると毎回警告が出る。
                                      しかし関数の引数で参照渡しするのはPHP のマニュアルに
                                     「関数コール時に参照で引数を渡すことは、
                                     コードの明解さを損なうために 廃止されています。」とあり、
                                     時期バージョンではこの設定はサポートされない可能性があり、
                                     時期バージョンで常にOFFの可能性があるので、
                                     OFFで使う習慣をつけるべきですが、書籍などのサンプルでは
                                     この設定には触れずONであることが前提のサンプルがあるので、
                                     なぜ警告が出たかわからない場合がある初心者は
                                     気をつけたい所です。

----------------------------------- apache ----------------------------------------------------------------------------------------------

ApacheをインストールしたフォルダのconfフォルダにApacheの設定ファイル[httpd.conf]があります。
以下追加

LoadModule php5_module c:/php/php-5.3.0/php5apache2_2.dll


#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html index.htm index.html.var index.php
</IfModule>

方法1か方法2で、この場合は方法2が確実にmod_php5.c なのかどうか不明だった為、
方法1を使った。
方法1-----------------------

c:/php/php-5.3.0

ScriptAlias /php/ "e:/php/php-5.3.0/"
Action application/x-httpd-php php-cgi.exe

<IfModule mime_module> の中に
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

方法2-----------------------
#
# Configuring PHP5/Server-Module
#
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "c:/php/php-5.3.0"
</IfModule>

拍手[0回]


No Image

頭で考えることを文章に残そうとするのは遠回りか?

独り言

 ぶっちゃけ、メモ帳替わりにブログを書こうと思った訳ですが、
今ではなんか、
ブログで無いメモ帳で自分だけのメモ作ってる方がよっぽど早く進むわなぁ~w
なんて最近思っています。

 なぜって私はイライラしながら一人で自分と葛藤して
ああでもない、こうでもないってやっていると、目的だけの為に
集中できますが、ブログとなると人が見るので、自分だけが判る方法では無い事も考えて
必死に組み立てないといけないので、前後の言葉の使い方とか
おかしいとマズい!とか色々考えるわけです、まぁ実際バラバラな事は
置いておいて、そのうち修正とかしていたり、していなかったり気がつかなかったりしますが、
とりあえず結構疲れる訳です余計に!

 なのでももっと気楽にメモしてブログする方法を考えたいですが、
やはり今の調子で毎回前のブログを修正したり、タイトル変えて書きかけや
とりあえず、文面殴り書きしないと進まないので、
やっぱり読んでいる方には申し訳ないですが、お前の頭の中だけの
メモなんてブログにされても読まないよと言われても、私の中では順番があるので
やっぱり汚い状況でも残そうと思っています。

 なんでってやってる最中に、余りにもブログの事を気にしすぎて
メモとか一覧が残せないとかなり、変な力を使ってりして、
イライラする間もなく、とてつもなく疲れて眠いです~v~;

 あんまり眠いので、自分でなんで眠いのかと考えて、
「考えようとすると眠い」でググっちゃいましたw

 でもその内容がとても今の私に合っている気がして、
ココのブログアクア君の説明その物だなと、自分が思っている訳ですが、
そんなん子供の頃に経験しておけよ!みたいな事も今更ながら
思っていますが、後悔しているぐらいなら今でもやる!って思う人なので、
そしてこれも私の性格に何かが芽生えた結果なので、
仕方なくも有りがたくも、焦っても、マイペースで進めるしかないっ!って
思っているので、やぱガンバってみます。

 私は私のやり方で!

 待てよ?でもおかしいな、
思ったことを文章にしてこうやって書いている時は全く眠くない
むしろ色々なサイトをブラウザのお気に入りボタンを押して、
適当な分類フォルダの名前を作り、
そのフォルダに保存したお気に入りを頭で覚えている方
が、
後で探すのが楽で多少の眠さで済む、
そのお気に入りにしたサイトの内容までまとめようと思って、
そのサイトの名前と、サイトの内容があのサイトにはあって他のサイトには
無かったり、微妙に違ったりして、そのサイトの違いを一覧にする時の
表の仕方を迷ってそれで、適当に表にしてみようと思って

その辺からとてつもなく眠い!wwwwww 具体的すぎる
でもきっとこのブログを見ている人には判らないぐらいの文章かもしれない。

 とりあえず、その時点で私の頭の中は海馬当たりがきっと眠いw
でも脳には痛覚が無いらしいので、自分で脳のどの辺使ってるかとか
判るはずがまず無いと思うw 100年ぐらい訓練したら変わるのか?とか
考えても、その辺の頭を使う気がするとか思えても、その辺が正しいのかの
判断が付く手順が本当に、万が一でも無い限り、そんな痛覚が脳内に
生まれるハズもなく(何の話をしているんだろうか?w

 とりあえず、頭が眠いと思ったのだ!w

 それは間違えが無い、もしかしてやりたくないのか?!w とか
自分を疑ったのを含めて・・・・・
 いや多分やりたいのだろう、だけど毎回そんな所で眠くて進まない事に
嫌気がして、それが習慣となったり、なりかかっているのだろう。
 でもなかなか回避できないだろうから、きっとやっぱりメモ取るしかない
 そう思えただけで進歩だと思う、いや進歩したのだろう。

 とりあえず今度の独り言は、「したい事がなぜしたいのか?」とか
何か気がついたら忘れる前にメモってみようと思う。
 多分完結しないから宜しく^^;

                       お粗末<_ _>

拍手[0回]


No Image

PHPのインストール関連のURL と 疑問 (5/6) ~php.ini の設定をもう一度、集めてみる~

PHP の調べ物

 前のブログ(PHPのインストール関連のURL と 疑問 (5/6) ~php.ini の設定をもう一度、集めてみる~)より~
 とりあえず今回、色々、とてつもなく色々考えた、
やはり面倒だがサイトの比較から始めよた、その結果沢山ある設定オプションから、
確実に設定すべきか、もしくは触れないといけないであろう物を見つけて、
以下の表 を作ってみた・・・・ だた、できるだけ残したいことを重視したので、表のわりに説明が多く見にくいです。
 

php.ini で初期設定として必須の項目を調べてみた
(またこの一覧を作り出してから知ったサイトがとて良かったりします^^;)
分類 注意 オプション名(公式マニュアル) 他サイト 概要(注意:初心者の考えたメモ書きです)
処理文字形式 廃止決定 magic_quotes_gpc ,ロ1,ハ1,  クライアントから送られたGet,POST,Cookieなどで得られた情報の中で、特定の機能を持つ制御文字に対して、その機能をさせない様にする制御文字(エスケープ文字)を付加する。この機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除される項目だそうです。
 使う場合は<On> とするとエスケープ文字が付加されます、使わない習慣を付けた方がよさそうですし、セキュリティーを保とうとして出来たはずの設定項目ですが、ある事によってセキュリティーが逆に保てなくなる様です。
 つまり初心者であるなし関係が無く、設定を<Off>にしてこの自動エスケープ文字の付加を使わない方法を用いる事を覚えるのが良いと思われます。
 簡単に言うと、クライアントから送られたgpc(GET、POSTそしてCookie)情報で、マジッククオートをされると困る情報を自動でエスケープ文字を付加されると困るので、PHP 6.0.0 以降では無くすと解釈した方が良さそうで、現状でも使わない方が無難という事だと思います。
 しかしいずれにせよ、この機能の実態である関数(addslashes() )は存在したままになると思います。
 初心者であってもいつかはクロスサイトスクリプティング対策 は必要であり、Web上で実際に公開する場合には、その対策として自身が作ったスクリプトの中でaddslashes() 関数を使うか、自前の特殊文字を置き換える処理などが必要になるのは決して忘れてはいけない事だと思います。
処理文字形式 廃止決定 magic_quotes_runtime ロ1  データベースおよびテクストファイルを含む外部ソースから データを返す全ての関数のクオートは、バックスラッシュで エスケープされる様になる様です、magic_quotes_gpc と同様、この機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除される項目だそうです。
処理文字形式 廃止決定 magic_quotes_sybase ロ1  magic_quotes_runtime が有効なときに、この項目も on の場合、シングルクオートは、バックスラッシュの代わりに シングルクオートでエスケープされるそうです。magic_quotes_gpc , magic_quotes_runtime と同様、この機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除される項目だそうです。
処理文字形式
default_charset
(値:文字コード種別1つ)
ハ1,ハ2 ブラウザで表示する時にContent-type で文字コードを指定するかどうかの項目です。PHP がたとえブラウザで表示する為の情報を送ったとしても、厳密にソースの文字コードを設定しなければ、文字化けを起こす可能性があるので、その為のソースの文字コードを指定する項目だと思われます。勿論指定しても指定した形式で書いたソースと一致している事が重要だと思います。
 そしてまた、この設定は出力に対しての設定であるので、mbstring.http_output と同じ文字コードを選ぶべきだと思います。
処理文字形式   output_handler ハ2  出力する文字列の文字コードを入力とは違う文字コードにエンコードする必要がある場合に用います。具体的には、スクリプト処理の出力を、文字コードの変換に用いる関数に出力(渡す)するかどうかを定義します。
 きっと内部文字エンコーディング(mbstring.internal_encoding)と、HTTP出力文字エンコーディング変換(mbstring.http_output)が違う時には確実に設定が必要です。
 変換関数はバッファー内部で処理する物が多い?らしいので、出力バッファリング(output_buffering)も設定が必要になる雰囲気に、私的は感じました。
パス 廃止 output_buffering(PHP 4.3.5 以降設定が無い様です) ロ2,ハ1  このディレクティブを 'On' と設定することにより、全てのファイルに 関して出力バッファリングを有効にすることができたそうです、現在は文献だけが公式に残り、php.ini の中では言葉すら存在しない様です。
パス   include_path ロ2,ハ1  PHP のファイル操作に関わる幾種かの関数は、このパスを基点に相対的に行なわれます。複数選択する場合には、;(セミコロン)で区切ります、pearやSmartyなどを使う場合には複数選択したりパスを変更する必要があると思います。
 基本的にPHPのインストールパスにある、includes フォルダを選ぶ様ですが、PHP をインストールしたフォルダには見つからないと思いました、つまり任意で自身がインクルードするファイルが置いてあるフォルダを示せば良いので、名前も任意で構わない様です。
 ですが、まぁしかし、そのフォルダを使う事を想定して、自身がPHP をインストールしたパスにincludes を足した物が多くの書籍やWeb上で見受けられました、初心者が思いつかないならば名前はとりあえずincludes で良いのではないでしょうか。また公式ページにはインクルードのたびに毎回 PHP にカレントディレクトリをチェックさせるよりは、 明示的に include './file' を指定したほうが効率的だとも書いてあります、しかしセキュリティーを考えるとある程度以上に柔軟に指定できるのもまずい気がすると思いました。要するにPHPの一部関数が使える場所を定義する為の設定です。
パス  △ doc_root  公式1,ハ1  Apache などのWebサーバのモジュールとして動作させる場合、なんらかのエラーや不都合でPHP スクリプトが処理されず、PHP ソースや機密な情報などをそのまま表示される状況を好まない場合には、この設定が必要です。つまりそのままWeb公開可能なドキュメントと切り分けて情報の漏洩などを防ぐ方法の一つだと思います。
 単純にApache と一緒に使う場合に、Apache の公開ディレクトリである、DocumentRoot を設定する場合も見受けられますが、Apache を動かす為ではなく、phpのスクリプトが動く為や、機密情報漏洩を防ぐ事を重視して、一般論よりも自身の使い易さやルールに則って設定するべき項目だと思いました。ただし、初心者が外部に公開しない勉強用ならばDocumentRoot を指定していても良い気がしました。
 この値は空で無 い場合のみ使用されます。要するにphp のスクリプトを覗かれて困る場合に、公開できるドキュメントとは別に、この設定が必要だと思います。
パス   extension_dir 公式2,,ロ3,ハ1  動的にロード可能な拡張モジュールを置くディレクトリを 指定します。PHP は組み込まれた状態でコンパイルによって無効に出来ない「組み込みモジュール」と、指定して実行時に読み込み可能な「動的モジュール」がある様です。この設定はその動的モジュールを置くディレクトリを設定します。
 厳密にここで言う拡張モジュールとは、PHP では3種類の拡張方法、バンドルされているDLLと、バンドルされていないDLLのPECL 、DLLではなくて、phpスクリプトで書かれているライブラリのPEARがあり、この設定は、バンドルされているDLLとバンドルされていないDLLについての読み込み設定です。補足として言い換えるならば、DLLによって読み込む、コンパイルによって埋め込まれていないこの2種は、動的にロード可能な「動的モジュール」です。
パス   extension 公式3,(),ロ4,ハ1  動的にロード可能な拡張モジュールを起動時に読み込む為の設定です。スクリプト の中でdll() 関数を用いて読み込む事も可能な様です。PHP4にはextensions フォルダ、PHP5 にはext が読み込むバンドルされているモジュールが入っているフォルダになると思います。
●PHP を学習する上で、マルチバイトを用いると思うので、初心者の私は、[ extension=php_mbstring.dll ]を有効にし、マルチバイトを使える様にします。多分ですが日本人でS-JIS(シフトーJIS)を使うならば有効にしないといけない気がします、なぜならmbstring.language の説明に、日本語の文字は、マルチバイトエンコーディングを使用しないと表せませんとあり、またインストール手順 にも同様な言い回しがあるからです。また、php.ini 内の設定項目のmbstring.xxxxx はマルチバイト文字列 関数 についての設定で、この[ extension=php_mbstring.dll ] をインストールした時に必要な物がほとんどです。
●私はWAMP 環境を作り、PHP からMySQL を操作することを覚えるつもりなので、MySQL を有効にする為に、[ extension=php_mysql.dll ]を有効ににし、MySQL を使える様にします。
処理文字形式  △ mbstring.language ロ4,ハ1,ハ2  公式ページに日本語の文字は、マルチバイトエンコーディングを使用しないと表せません とある事や、 カナを("全角かな"、"半角かな"等に)変換 することに特化した関数も日本語やマルチバイトを意識したものが多く感じられました。詳細を調べると、mbstring 拡張モジュールは 日本語のほかに中国語 (簡体字)・中国語 (繁体字)・ 韓国語・ロシア語 もサポートするみたいです。mbstring.xxxxx とある設定は1つだけが正確であっても、他が環境にあっていない場合は何処かで文字化けを起こしたり、正常に処理されない可能性があります。エディタで書いたスクリプトを保存する時の文字コードや、ブラウザが解釈する文字コード、php 内部や出力時でのエンコードなどを、自分の環境や、結果をブラウザで見る場合の環境まで考慮に入れる必要があるのだと思います。また、余談ですが、ブラウザがファイルが拡張子をどう判断し処理するかのContent-type (default_charset)も結局考慮に入れることになると思います。
 UNICODE の様な、多国の言語を1つの文字エンコーディングで表現しようとした文字コードを用いない場合には、特に重要な設定となり、間違うと文字化けやエラーの原因となる予想がつきます。
処理文字形式 mbstring.internal_encoding ロ4,ハ1,ハ2,(),(),  内部エンコードの文字エンコーディングの種類を選びます。正常にphpスクリプト を動かすには、文字コード種類 の解釈は厳密に関わってます、内部エンコーディングに変換されるのは、クリエの入力(mbstring.http_input で変換するかどうか決まります)、内部処理(この設定mbstring.internal_encoding でエンコーディングを指定し、mbstring.encoding_translation で使う使わないを決めます)、出力(mbstring.http_output で出力時に変換する文字エンコーディングを指定できます) 、この3つの文字エンコーディングが存在していて、一部でも間違った文字コードを使った処理をすると文字化けが発生するのだと想定します。
 厳密には、auto 設定であると、入力のソースの文字エンコーディング と、解釈する文字エンコーディング の違いでエスケープコード なども出来てしまう事も考えられ、auto 設定はソースの保存形式が一緒であっても、確実に毎回同じ文字コード と認識しない場合もある考えすら予想できます。但しやはり、入力先が限定できない場合などは、話しが変わってくると思いますし、判定する為の関数が、出力ではなく入力に対して変換する関数があるのかは判りませんし、何度も文字コードを変換する事への弊害も考えられます、初心者なので、まず動かす為の設定を考えると単純にソースのスクリプトの文字エンコーディングであるmbstring.http_input に合わせ、同じにしておけば良いとおもいます。
 ちょっと難しい余談ですが入力、内部、出力などという表現がマルチバイト(mbstring) の説明に見受けられると思います、これはPHP が処理するときに、バイト列やバイト配列をどのエンコードを使用して文字として認識しているかのことで重要になると思います、想像がつかないかもしれませんが、文字列はエンコードをしなければ、元はただのバイト列やバイト配列なのです。
 PHP を使ってスクリプト を書いている私たちユーザー側 には、どんな規定で日本語や、中国語や韓国語などの他の国との違いを認識しているのかなどは設定以上には知る余地がなく、また知る余地がなくとも使えることが便利であるから、こういった設計になっていて、私たちユーザーにはたまに出てくる作り手側の表現、この場合は内部、外部などという事は、エンコードをして単なるバイトである数値を文字に見える状態にしている仕組みを伝えているに過ぎないことに注意する必要があると思います。
 入力されたある文字コードで書かれたただのバイトの塊を、どんな意味の文字なのか判ることなく処理することは不可能です、それを手動で指定したり、場合によってはエンコード種別を自動で見分けられたりする場合もあるでしょうし、エンコードして文字エンコードを変えるべき所をあえて変えたくない場合などもユーザーから見た場合には存在するでしょうから、PHP の文字エンコード の仕組みを作った人も、その仕組みの中で設定できる部分と出来ない部分を考えた上で、このmbstring.xxxxx の設定を設けたのだと思います。
 こういった文字エンコードについては、他の言語でもほぼ一緒の仕組みであり、もしそこまで厳密な解釈や、厳密な文字の解釈をしたいのならば、自身でエンコーダーを作ることになるのだと思います。
 そのうち自身の能力が向上してきたころに、部分的に既存な文字エンコード処理を用いていて、仕様では不満な部分は、どうかして乗り越えたくなるのは、多くの人が思うことなのかもしれません。
 ですが、一見このわかり難いほどの細やかな設定は、わかり易さはさておき、なんらかの融通や、なんらかの困りごとに手が届くことに考慮して、on、off、auto、pass、文字列で指定、などと選べるのでしょうし、その個々の組み合わせでだいたい何かが解決することが伺わせられる気がします。
処理文字形式   mbstring.http_input  ロ4,ハ1,ハ2   HTTP入力文字エンコーディングを内部エンコーディングに自動で変換するかを設定します。スクリプトではhttp_inputの設定は変更できない様です。
 ここで間違えやすいのは、mbstring.internal_encoding はPHPスクリプト を解釈するときの文字エンコーディング を指し示し、このmbstring.http_input は、クライアントから送られたGet,POST,Cookieなどで得られたクリエ情報ではないことです、クリエ情報に対しての設定は、mbstring.encoding_translation で行うことに注意が必要です。
処理文字形式   mbstring.http_output  ロ4,ハ1,ハ2,()   最終的に処理結果を何かに出力する訳ですが、その出力を保存する時の文字コードの種別を指定します。但し保存した形式を開く場合に、やはり違う形式を指定すると文字化けになると思います、例えばブラウザで見た場合にHTML が文字化けする様に、保存形式以外にブラウザがそのファイルの文字コードをどの種類で解釈するかなどや、Content-type (default_charset)などの設定も必要になるのかもしれませんが、とりあえず初心者なのでこの辺が関係するかもしれないので覚えとして記述しておきました。
処理文字形式   mbstring.encoding_translation  ロ4,ハ1,ハ2,()  この設定は、mbstring.internal_encoding の文字コードに変換するときに文字エンコーディングへの変換を有効にするかの設定です。
 クリエの要求ではなく、スクリプト自体の設定は、mbstring.http_input が受け持っている様なので注意が必要です。
 mbstring.http_input と、このmbstring.encoding_translation の違いを理解していないと、色々な面で文字化けの原因です。
 初心者は、とにかく自身の書いたスクリプトを動かす為の設定を必要とするので、この設定をon にしておき、mbstring.internal_encoding の設定が内部エンコーディングになることを意識しておけば問題がない気がします。
 公式サイトには「入力される HTTP クエリに関して、 文字エンコーディング検出および内部文字エンコーディングへの変換を行う 透過的な文字エンコーディングフィルタを有効にします。」とあり、抽象的で曖昧なのですが、検出とある訳なので、mbstring.internal_encoding に従って文字エンコードを行うことが出来ることを指していて、mbstring.internal_encoding に間違った物を指定すると検出も間違い変換も失敗するのだと思います。
処理文字形式   mbstring.detect_order  ロ4,ハ1,ハ2  文字コードを判定する時に、どの順番で文字コードであるか調べる為の設定です。文字コードを判定するときに、auto を指定するとどの順番で検査しているか判らず、コードによっては一部が同じであったりして間違う場合があるでしょうから、クセを把握して、順番を指定しておいた方が良い様です。
 私が考える分に、文字エンコードするときに文字を判断するとしても、文字コードは規格ごとにまったく違う場合と重なる場合があるので、できたら重なる場合でありえない順番を知っているなら、そのありえない順番から調べる方が良いですが、それが判らないならば、入力されるスクリプトソースや、入力されるクリエの文字エンコード形式、内部処理形式、その次に1バイトでない、比較的に長い形式の文字コード、最後に短いバイト数の文字コードといった順番で設定することが浮かびました。
処理文字形式   mbstring.substitute_character  (ロ4),ハ1,ハ2,()  無効な文字を出力するかどうかの設定です。
 入力文字エンコーディングが無効、 または出力文字エンコーディングに文字コードが存在しない場合の代替文字を指定できます、例えばnone; とすると出力しない事を選択できます、他の関数にも影響するので公式ページ をチェックすると良いかもしれません。
マルチバイト文字列 関数mb_ substitute_ character と同じ設定内容かもしれません。
エラー表示   docref_root    エラーが発生したときに、エラーやエラーの原因となった関数に関するマニュアル のページの情報をエラー情報に載せる。
 はじめ初心者の私はPHP がインストールされているディレクトリ かと一瞬考えましたがやはり違う様です、つまりこの場合にはWeb サーバーが動いているディレクトリ、私の場合はApache であったので、Apache の設定ファイルhttpd.conf 内の[DocumentRoot] が指し示す場所にマニュアルがある事を意味しています。
エラー表示   docref_ext    docref_root のマニュアルの拡張子を表します。docref_extの値はドット "." で始まる必要があります。
エラー表示  〇 allow_call_time_pass_reference   関数の引数に値渡しではなく参照渡しをした場合に警告を出すかの設定です。この設定がONであると、関数がONであると関数の引数に参照渡しを用いると警告が表示されます。今後のバージョンではこの設定はなくなり、OFFで固定される様です、コードの明解さを損なうためとあります。初心者は書籍などのサンプルコードを実行中に何か警告が出る場合があり、「you can set allow_call_time_pass_reference to true in your INI file in ... 」などと出た場合はこの設定がONであるからです。
 ※()で書かれている他サイトは、一般的でない例であったり参考にならない場合がありますが、PHP を学ぶ上で参考になったり、セオリーではないかもしれないですが、
 自身で解決策を考えている点で載せていたりします。


<表作成後談> (何時まで経っても途中だけど)
 表を作っている最中にあまりにも深く知らないと行けないもし、
実際にプログラミングをしないと始まらない部分を多く感じました。
とりあえず作ってみて、PHP は環境設定が段取り8部だ!と思えています。
 もちろんプログラミングは必要ですし、プログラミングがしたいが為にPHP をしようと思ったのですが、
文字コードについては疎い言語ではなくて、文字コードについて出来るだけ緻密に取り扱える様にしているが為に、
文字コードについて正確に知らないといけないと強く伝わってきました。
 
 具体的には、全般的に言えることは、設定項目はお互いに干渉しあったり、順番があったりするので、
一つを設定するだけで良い訳ではなく、他の部分も変更する必要がある。
 また、自動の設定や、無しの設定、書かない場合の設定やデフォルトの設定、
使用で実際はなんらかの挙動を見せるケースなど、色々なケースが存在する様です。
 特に文字コードについてはとてつもなく注意と文字コードの理解が必要だと思いました。

 それよりもPHP 公式に設定オプションの種類が書いてないのが難点で、PHP公式は役に立たない?のか、
それとも私が調べそこねているのかちょっと不思議なところです。
例えば、値が空なのか、none という意思表示した値のみなのか、他の文字列が入るのかとか、
off,on,auto,他に指定があるのかとか、そういった例を含むことが全通り把握出来る様に書かれていない気がします。
 また、関数としてPHP.ini の項目に良く似ていたり、同等と予想される設定はある様なので、
その辺の関係を纏めた表を別に作るべきかとも考えてしまいます。



追加メモ1
 Apache をWeb サーバとしているときに、Apache の設定ファイル、.htaccessファイルにPHP の設定を書く事も可能みたいなので、自身で全てを把握できないレンタルサーバなどは、
.htaccessファイルに記述して設定を変える方法などがあるんだろうと思った。

 サイトが無くなるとどう設定して良いのか判らなくなるので例を載せてみる。

●php.ini の設定をON やOFF で表す場合に.htaccess 内でそれを書く場合は、
  php.ini の
   mbstring.encoding_translation off
            は
  .htaccess で書くと
   php_flag mbstring.encoding_translation off

  の様に「php_flag」と書く様だ。
●php.ini の設定を文字列で表す場合に.htaccess 内でそれを書く場合は、
  php.ini の
   mbstring.http_input "pass"
            は
  .htaccess で書くと
   php_value mbstring.http_input "pass"
         
  の様に「php_value」と書く様だ。

一応忘れる前にメモしたが、厳密に調べることはまたにします。
とりあえず判ったことは、.htaccess 内で
ON やOFF などは「php_flag」と書き、
文字列などは「php_value」と書くみたいです。

また、同様にmbstring.encoding_translationは PHPのスクリプト内でセットできない さんのサイトでは、.htaccess 内でPHP スクリプトに関する設定の前後に

<IfModule mod_php5.c>
<Location "/url_path">
 ・・・・・・・・・・ 設定内容 ・・・・・・・・・・・
</Location>
</IfModule>

の様に開始や指定をしている事を伝えている様な記述もあったので、一応メモしておきます。
また、PHP5.0/3.php.iniの編集 の .htaccessによるディレクティブの設定 にも説明がありました。



追加メモ2
 PHP やブラウザの機能でも文字コードを自動で判断するという設定があると思うのですが、
これは果たして万能なのかどうかを考えましたが、やはり時と場合により万能ではないと思います。
mbstring.encoding_translation の設定においてもその例外ではないと思います。

>関連して述べているサイトをメモしておこうと思います。
  ・mbstring.encoding_translationはOnにしていいことあるのか(google キャッシュ)
     このブログは、各設定がどう干渉しているかについて多少述べているので参考になりました。

>文字化けについて、簡単に述べているサイトもメモしておきます。
  ・日本語の文字コードは3種類以上
     日本語に使われている文字コードはJIS、シフトJIS、EUC、unicodeのUTF-8 について多少書かれています。

  ・文字化けメールはなぜ起こる?
     このサイトのページはメールで文字化けする原因について書いてあります。
    得に、普段多く使っているエディタや、メールソフトが扱う文字がシフトJIS (8bit)であり、
    メールで使うJIS(7bit) の変換する際に起こる事が簡単に書かれていました。

  ・ホームページの文字化けは?
     ブラウザでの文字化けは、EUCとシフトJISは一部コードが重なっているので、たまにブラウザも文字コードを判定ミスをするや、
    
  ・文字化けしないようにするには
     ここのサイトは結構有名だと思います。一応メモです。

  ・漢字コードについて
     ここも上記サイトの別ページです。漢字コードについて纏められていてとても良いと思ったのでメモしました。


追加メモ3
 ApacheからPHPを使う場合の設定
 
 自宅サーバー(Windows+Apache)へのPHPインストール

 PHP のインストール(Apache2.0 Windows編)

 さて! なんだかだんだんphp.ini にこだわっていたけど、php.ini の設定値は、phpの関数の一部がphp.ini で設定できるに過ぎなくて、
結局レンタルサーバーなどで制限がついている場合などはphp.ini や.htaccess などで設定しなければいけないが、
そうでなければ、元々の関数の取り扱いが判れば、こんな所でひっかかっている必要がないじゃないかという結論に達しました!(やっとかwwwwwww)


なので次回(PHPのインストール関連のURL と 疑問 (6/6) ~php.ini と対応する関数の設定のまとめ~)は
本当に関数とphp.ini の設定値のまとめで終わりたいかなと思います。

それからはMySQL のインストールと、Apache の設定かなと思います。

拍手[0回]


No Image

PHP 公式からのコピーのマニュアルのサイト が多い^^;

独り言

 PHP の調べ物をしていると、ふと気がついた事があります。
マニュアルのサイトがあるのですが、中身が全く同じなのです!!!
 
  PHP: PHP マニュアル - Manual

  PHP マニュアル [ PHP日本語マニュアル ] PHP

  PHP マニュアル

 結局の所、簡単に3つも全く同じサイトを見つけました!
探せばもっとあるのかもしれませんが、嫌気がさしたので、あえて探しませんorz

 調べる側の立場からすると、調べることも労力が必要なので、
3つそっくりなサイトがあると、何が違うのか?とか、常にどれも最新なのか?とか、
出所は何処なの?とか考えて、余計な労力を使ってしまいます。

 それでやっぱり私は考えちゃいました^^;

 とりあえずどれが出所なの?
調べてみました・・・・・

 文面は全くそっくりなのです、なので著作権の項目もしっかりある訳で、
全く同じならば改ざんしてないならば、著者も同じであろうと思って中を
見てみました。

  PHP: PHP マニュアル - Manual の著作権

  PHP マニュアル [ PHP日本語マニュアル ] PHP の著作権

  PHP マニュアル の著作権

 すると・・・・・
>>>内容>>>>>>>>>>>>>>>>>>
  修正の有無に関わらず本文書の全体または一部を再配布または再出版したい場合や、
 質問がある場合には、» =_=(伏せました) @ =_=.php.net  宛で著作権者まで連絡をしてください

  このアドレスは、一般にアーカイブが公開されているメーリングリストへマップされていることに 
 注意して下さい。
<<<<<<<<<<<<<<<<<<<<<<<
とあるじゃないですか@@;

 つまりphp.net が出所で、ある事が判ったので、
他は紛らわしいコピーであることが判ったのですが、コピーって書いてない気が^^;
 それもそうなんですが、良く考えると連絡をしてくださいとあるんですが、
連絡したらコピー増えちゃうのは紛らわしいのでちょっと考えてとか思ってしまいました。

 それとコピーサイトなんて1つで十分だと思うので、沢山許可しないでほしいとも思ってしまった訳ですw

 この後でもうちょっと気がついた事があったのですが、
このアドレスは、一般にアーカイブが公開されているメーリングリストへマップされていること
と言う文脈は、コピーである事を改変して載せられないのならば、
コピーサイトを運営している人ではなくて、コピーサイトを見ている人に
最終的に注意を促しているにすぎない って思いました^^;

 つまり私みたいに拘ってみている人に対して
書いているだけで、他の人は潜在的に何か疑問を感じても
気がつかずに毎回同じ事を考えてしまっているのではないか?
それは余計な労力なのではないか?
とか思いつつ、私のやっている事は、一見無駄の様でも
無駄では無いかも!しれないと思った(自己満足?!orz)訳です >w<;

 さて文面としてはここまで書きましたが、
実際にはもっと調べています、やはり便利なのであれば、
コピーサイトを使うべきですが、本当に便利なのか
もっと探ってみました。

その前に結果です。
---------------------------------------------------------------------------------------------------------
  PHP: PHP マニュアル - Manual  < 本家!

  PHP マニュアル [ PHP日本語マニュアル ] PHP   <コピーサイト

  PHP マニュアル   <コピーサイト

                                         と言う結果でした。
---------------------------------------------------------------------------------------------------------

 さぁさてコピーサイト をもっと探った訳なのですが、
コピーサイトはPHP のマニュアルだけを扱っているのではなくて、
マニュアルはコンテンツの一部として扱っている様でした。
 でもどちらもメインコンテンツのごとく、マニュアルが載っているので
始めてみた人は、このサイトが作ったマニュアルなのかと錯覚を起こしても
おかしくないなぁと感じました。

 さておき、私の批評での悪い所は他にも金銭的なバナーを張っていて
自身の労力で作り上げたコンテンツじゃないのに
載っていて、そこまでするのかな?とか思えるサイトもありますが、
サイトの管理の都合とかもあるのかなぁ?とかは感じますが、
まぁそんな飽くなきダメ出しな事は置いておき、サイトの良い所使える所を上げて
終わりにしようと思います。

 コピーサイト:PHP - tech-manual.org (メインページ)
私が説明しなくとも、HTMLソースの<meta name="description" ・・・ タグに
「tech-manual.org は、様々なプログラミング言語やライブラリの、
APIドキュメント、リファレンスマニュアル、ヘルプ等を提供することを目的としています。」
とありました。

 また同サイトPHP のページ(マニュアルもコピー紛らわしいのでリンクはなし)には
「PHPに関する、APIドキュメント、リファレンスマニュアル、ヘルプ等を提供しています。
現在、PHP言語、PEAR、Smartyの各日本語マニュアルが利用可能です。」
らしいです。でもやっぱりこれはオリジナルコンテンツじゃない!!!
 同様にRuby のページ、
「Rubyに関する、APIドキュメント、リファレンスマニュアル、ヘルプ等を提供しています。
現在、Ruby言語の日本語マニュアルが利用可能です。」
らしいです。
 普通、各ジャンルの公式へのリンクなどで済みそうなので、
なんらかの都合でメインサイトでマニュアルが見られなくなった時ぐらいには
使えるかもしれないですね・・・・(調べてて良い所が無くて、書いててイヤになってきた)

コピーも置いてあるサイト:PHPスクリプト無料配布所 :: PHP.TO
このサイトは名前のとおり、無料のスクリプトが置いてあり参考には
なる部分があります。

 この余談、書き始めには内容が深いかと思いました。

 しかし、案外そうでもないと思いました。

 ですがまた、調べるって事は毎回ぐるぐる頭を巡らし、
同じ事を何度か繰り返して覚えていくのですが、
その覚え方すら、短く覚える術があるとしたら
1000回考えたかのごとく、恥ずかしくても思った事を残しておくこと
だと思いますから、あえてこの文章を残しておこうと思います。

 検索中に情報に埋もれ無い様に・・・ ( ..)φメモメモ


 最後まで目を通した人の何かヒントになった事を願い
話を終わらせたいと思います。

                                             お粗末<_ _>

拍手[0回]


[PR]