忍者ブログ

カウンター

プロモーション

カレンダー

12 2025/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-5.3.0 から php-5.3.2 に行こう!(移行)

PHP の調べ物

※この文面は、中途半端だったので載せたphp.ini の違いの内容などは全て一旦消しました※

どうせだしバージョン移行を体験してみようと
php-5.3.0 から php-5.3.2 のphp.iniの違いを調べてみた。

  私の場合php.ini の元雛形は php.ini-development であったので
php.ini-development の違いについて調べてみた。

比較ソフトにはDF というWindows で動くフリーソフトを用いましたが
他にもソフトは有る様です。




ちょっと見直します・・・・orz

拍手[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

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のインストール関連のURL と 疑問 (4/6) ~php.ini の内容をしらべてみる~

PHP の調べ物

 先にお断りをしておきます。
今回は修正を重ねた為にとても長くブログじゃない!です読み物ですw
ひたすら長くて読みにくかったり、部分的に雰囲気が違うのは、
修正をした日の気分が入っているからです。
宜しくです<_ _>


前回(~インストール後の設定を模索~)で
ファイルを展開後にPHP を動かすまでに何が必要か
調べたのだが、やり方は幾種かあり、その中で
php.ini と aphche の設定で指定する設定方法を選んだ。

そこで今回はphp.ini の設定を
ある程度調べてみた。

まず最終結論から、リファレンスとも言うべきサイト
PHP: コア php.ini ディレクティブに関する説明 - Manual
に、全て設定は載っているのを見つけたのだが、
初心者が単純明快にただひとつPHP を動かすだけの設定をしたいのだが、
沢山ありすぎると手に負えないので、他のサイトや持っている本から比較したりして
単純にまず動かすとしたら何をどうしているのかを模索してみる。

 まず、私がPHP をインストールと設定をする上で
案外気に入ったサイト である、php.iniの設定 - PHPインストールと初期設定 から調べてみた。
すると以下の設定について述べている。

extension_dir (拡張モジュールのディレクトリ)
include_path (インクルードパスの設定)
mbstring (日本語などマルチバイト文字を利用の為の設定)
magic_quotes (マジッククオートでエスケープするかの設定)

あと最後にPHP のApache モジュールとしての動作確認

でした。
ここで マジックオート(magic_quotes)のエスケープするかの設定とか
全くなんの意味なのかさっぱり判らなかったので調べました。

まずPHP公式 の日本語化マニュアルのサイトに、
マジッククオート についての説明があり、驚くことに、いきなり目立つ様に

      警告
この機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除されます。
この機能を使用しないことを強く推奨します。


とありました。

 とりあえずこの先に削除されることが決まっているのならば、
単純に使わない設定で良い気もしますが、
知識として今後も必要そうな話なので、
マジックオート と、エスケープ文字は何かについて、
調べてみました。
 


<マジッククオート(magic quote)、エスケープ文字について>


 たとえばマジッククオートを思い浮かべたときの話なので、
判りにくいかもしれませんが、
例えば、ブラウザが解釈するHTMLの記述に
なんらかの文字を表示させる為以外の制御をさせる為の文字があります。
 制御文字は、文字なので、文字として使いたい場合なのに
制御文字として動いてしまったりすることもあるでしょうし、
どうしてもブラウザを見ている人の為に、制御文字を表示させたい、
つまり見た目は制御文字でも、ブラウザは制御しない文字を書きたい場合が
あります。
 そんな意味だと思いますが、その役割を放棄させる、
エスケープさえる、つまり、
「エスケープ」は、英語で 「escape」 と書くでしょうから、
意味は「抜け出る」とか「逃げる」と言う意味になるので、
 この場合には、スクリプトなどの類の動いてしまう、
特殊な文字は機能させない様に、抜け出させておく事だと思います。
まどろっこしいのでカット^^;
英語でquotation marks というのがあるので、こっちの意味を参考にしたりした方が
理解に早かったのかもしれません、英語得意じゃないんで済みません゜w゜;
 (ちょっと下の方になりますが、参考サイトを載せてあります。)

 ですのでマジッククオートの話に戻りますが、
quoteとは、ことばを引用符で囲むなどの意味があり、
やはりエスケープ文字の様な意味合いで、制御させたくない文字列が
入力に含まれている場合に自動で動かさなくする様な意味だと思います。

上記を踏まえてこんな話の意味を考えると、
「自動で制御文字を機能させない特殊な文字に置き換える」
と言う解釈で考えていましたが、しかし、
 PHP 日本公式には、magic_quotes_gpc の説明に、

「GPC(Get/Post/Cookie) 処理に関する magic_quotes の設定を行います。 magic_quotes が on の場合、'(シングルクオート)、" (ダブルクオート)、\(バックスラッシュ) 、NULL には全て自動的に バックスラッシュでエスケープ処理が行われます。magic_quotes_sybase も on の場合、シングルクオートは、バックスラッシュではなく シングルクオートでエスケープされます。 」


とあるので、
「サイトへの入力などに使われている制御文字を、自動で機能させない引用符で囲む。」
みたいな感じが妥当かなと思いました。

 ユーザーの入力した文字列にPHPの制御文字が含まれている場合には、
PHP の記述でコメントが「 \ (バックスラッシュ)」をつけて、
制御文字ではなくて、文字扱いにしたい様です。
 いきなり初心者が立ち入ってややこしくなりそうですが、
PHP公式 の、バックスラッシュ で全ての謎は解決しそうです。
 また、PHP で使用できる正規表現演算子(mb_ereg) でも何か役に立ちそうです。

 私が見る限りですが、// はPHP ではコメントアウトで
/ +? の?部分が'(シングルクオート)、" (ダブルクオート)、\(バックスラッシュ) 、NULL
になったらエスケープ されますとあるけれど、
調べてると/e もエスケープ とあって、エスケープだけさせる制御って
どんな物なのとか考えるとややこしそうなので、
実際にやってみないと判らない部分もありそうなので
初心者はこれぐらいにしておきます^^;
そのうち/e とかもやってみたいと思います。



同様にPHP のエスケープ文字について、触れているサイトを載せてみます。
<PHP エスケープ文字に触れているサイト>
ホームページ作成の第一歩【PHP 覚書 予期しないエスケープ文字】・・・文字化けの例、下のサイトと同様

バックスラッシュと円マーク・・・上のサイトと同様、シフトJIS の文字にはエスケープ文字を含む文字がある

PHP:エスケープ文字:\(バックスラッシュ)・・・言語による制御文字、エスケープ文字の違い


 また、ActiveScript (Windows上でOSの制御すらできるスクリプト、
JScriptVBScript、OS 上でコマンドや、スクリプトが書かれたファイルが
実行できる自分でインストールした言語(Ruby やPHP)が動く環境)、
SQL、VB 、C#、C、C++ などなど
色々な言語でも文字を扱うのに必要な場合、同様に
エスケープ文字と呼ばれている言葉で、色々な制御している様です。
他言語においてはつき詰めると話が大きくズレるので
勿論割愛させて頂きます。
(何かの都合で、何時か何処かで説明がでるかもしれません。)


 結論から述べてしまった訳ですが、
調べたサイトを載せておきます。

<ちょっと意味が離れているかもしれないけど、他の言語でのエスケープ文字関連URL>
正規表現サンプル(エスケープが必要な文字) ・・・Perl に使っているとは書いてあるが、エスケープ文字が、  
                                どんなプログラミング言語や、パーサー(処理)に対しての
                                エスケープ文字なのかが分かりにくかったのですが、
                                表がある説明なので参考にしました。

ActionScript 2.0 の学習 > エスケープ文字について ・・・ActionScript2.0 のエスケープ文字です。

文字列(String) ・・・JavaScript のエスケープ文字です。


エスケープ文字 ・・・AWKやperl, rubyに代表されるスクリプト言語らしいで@@;
        perl, やruby とかPython は多少なりとも
        他の事を調べると関連で出てきた事があったのですが、
        AWK って言うのを一部でも調べたのは始めてです。
        これは AWK スクリプト のエスケープ文字の例でした。
        

PHPスクリプト講座:文字列のエスケープ ・・・ PHP の言語を覚えようとしていて、
                             PHP のエスケープ文字を考えるならば
                             このサイトが一番理解しやすいかもしれません。



<PHP マジックオートに関係しているURL>
PHP 実験室 【覚書 予期しないエスケープ文字】 ・・・これはPHP の初心者が入門したばかりで
                                 php.ini の設定すら出来ない人が参考にするのは
                                 説明でphp プログラミング をしているので早いですが、
                                 今後の為のメモを含め、そのうち当たり前になる
                                 内容でしょうが載せておきました。

 マジッククオートを無効にする ・・・ このサイトでもphp.ini で設定をするのではなく、
                      プログラミング内部で設定をしている。
                      なので初心者向きではない気がするが、
                      レンタルサーバなどで設定が変えられない場合には
                      このやり方を参考にすると良いと思ったので載せておきます。

 

余話(すご~く雑談ですが、調べてる最中に思うことを書いてみました。宜しければどうぞ)


 また、このマジッククオートは、入力する者があえて制御文字を送った場合に
PHP が解釈してその送られた情報で何か処理をしない様にする為の物でもあります。
 しかし次期バージョンでは、この項目は無くなる様ですし、変わりの方法があるのかなどは、
私はまだ入門前というか、入門したばかりなので判りません。
 そのうち見つけたら、このページにリンクでも貼っておこうと思います。

追伸:(かなり長い時間がたってから)

 まぁ色々飲み込めなくてマジッククオート (magic Quote)について悩んでいたのですが、
単純に文字列をエスケープ(のがれる⇒無効化)する様な事で良いのだと思います。

 そして、公式マニュアル にもある程度意味が書かれています、
やっとですが、今読めば意味が理解できる段階にきました。



<根本的にphp.ini の内部で何をしたら良いか?>

 

 結局ですが漏れがなくphp.ini の内部を編集して設定したいだけなのです。

 私が色々なサイトにある違いをしっかり把握し様としているのは、
万全な状態で毎回何かに突き当たる度に困らなくて良い状態にしたいからです。

 今度は内部の変更項目や、追加項目を全ての設定を調べ出してみようと思っていましたが、
php.ini-production と、php.ini-development  が元のファイルの雛形ですが、
php-5.3.0 のphp.ini-production で1895行、php.ini-development  で1887行ありました。
 そうすると私の様な初心者が全て調べ様と思った場合に、
見知らぬ用語が出てきて、それについても知るために調べなくてはいけなかったり
翻訳しないといけない事になるので、それを考えると、今はまず動いてほしい気持があるので
そのうちにでも、「php.ini の翻訳と2種の雛型比較と、それぞれの設定の意味」とでも題して
把握してみようと思います。

 さてそうすると万全な状態とかでは無くなりますが、
とりあえず出来るだけ多くのサンプルをサイトから探して、
それぞれ何をしてるのかを展開しようと思います。

 話はまた戻っている部分がありますが、
戻ったのも経緯があり、その手順で進んだ方が良いと
理解があってからこそも戻ったので、長すぎたのと
覚える量が多かったと理解して進めたいと思います。

 とか! 思っていましたが、意気込みは裏腹に、
時間を置いてみたり、ネットで再検索をしていると
色々なことが判ったので、php.ini の設定を2種類に分けて
模索する方向へと変えました。
 これはやる気がなくなったとかではなくて、
色々身に付けた証拠だと思っています。(当たって砕けすぎでも負けません!w
また、やはりphp.ini に書いてあることを自分なりに翻訳してみたいと思っています。
(ちょっとだけ翻訳しましたが、php.ini には目次みたいな物は無い様です^^;)
(追伸:またまたちょっと調べたのですが、php.ini 内部に『Quick Reference』という部分があって、
;   Development Value: Off
;   Production Value: Off
とかそうやって各項目の Development  と Production の初期設定について
簡易的に違いが載せてあるので、
ぶっちゃけ私が調べなくても『Quick Reference』ココを見ればわかるかもしれません。
ただ、片方のini にあって片方にない行についてまでや、書かれていない設定まで
書いてあるのかまではまだ見ていません。これもそのうち確認したいです。



<php.ini の設定サイト をもう1度 探してみた>

 結局、php.ini で設定を出来る訳ですが、
調べていると、どんどん色々出てきてしまったので、
この際【インストール時に必須なことが書いてあるサイト】
【詳細設定が書いてあるサイト】に分類して、
サイトをまとめて、その上でインストール時の設定を
出してみる方向性に修正した。

【インストール時に必須なことが書いてあるサイト】
  基本的に必須事項なのは、各視点での文字コード、php 自身のインクルードパス、
 拡張モジュールパス、そしてマジックオートの設定の様です。

  ○Windowsへphp5をインストールする(かなり見た目や探し易さに優れてると思ったサイトです)
    └php.iniの文字コードの設定(同サイトの文字コード関連、このサイトだけで十分かもしれません)

  ○PHPのインストール、各種設定(php.ini)
   (要点だけを述べて触ったサイト、1つ1つに説明が少なく、「~様にして下さい」といった雰囲気
    初心者は本来それで良いのかもしれません。やらないと意味がなく、言われた通りやっただけでは
    きっと触っただけで、進展するときの要素にならないので、迷ってみたりしている私には、
    どうしてなのかが知りたいですが、やはり説明を少なくまとめるとこういった形になるのでしょう)


【詳細設定が書いてあるサイト】 
  動かすだけでは便利ではなかったり、する部分があります。
 そんな事をしっかり自身で感じ取って書いた感じのするとても共感できる設定が書いてったので
 そんな所を載せておきたいと思います。

  ○こりゃまたPHP!~PHP概説めにー : こりゃまたphp.iniの設定(ちゃんと迷って訳してみたりしていて手順踏んでて好きです)

【詳細設定が書いてあるだろうが知っている人向けサイト】
  なんか大切なことが書いてありそうなんですが、どう思ったとかが良く分からなかったり、
 用語が説明の中にあるので、初心者向けじゃないけど、メモとして載せておこうかなと思ったサイトです。
  これは多分個人的なメモを、また私がメモった形になるのでしょう^^;

  ○php.iniでよくやる設定まとめ(ディレクティブ名、説明、推奨値 でまとめたちょっとした表がある)

  ○PHP/tips/推奨php.ini設定(「説明は省略しています。」とあるサイトでした)



 結局3つの【】項目になってしまいました。
この先思いつきで項目の中のリンクは修正で増えるかもしれません。悪しからず



 さてこんな所ですが、次回で本格的にこれらのサイトなどから
調べ出した項目について主に設定ファイルのphp.ini の修正箇所を調べていこうと
おもいます。

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

拍手[0回]


No Image

PHPのインストール関連のURL と 疑問 (3/6) ~インストール後の設定を模索~

PHP の調べ物

さて前回(~ダウンロードとインストール~)の続きで、
ファイルやらフォルダを展開するところで出た
複数のインストールの仕方を書きましたが、
今度はその続きで、PHP やApache の挙動を設定する
ファイルについてメモします。

多くのサイトでは、
php.ini の設定の雛型は、

php.ini-recommended
php.ini-dist

がzip展開後にあると書いていますが、
私のダウンロードした、
php-5.3.0-Win32-VC9-x86.zip もしくは、php-5.3.0-Win32-VC9-x86.zip
には、その両者はなく、

php.ini-production
php.ini-development

というファイルしかありませんでした。

 なので中を開き[production]や[development] で
文字列の検索をしてみると、始めの方に
;;;;;;;;;;;;;;;;;;;
; About this file ;
;;;;;;;;;;;;;;;;;;;


という所が見つかり、そこに

; php.ini-production contains settings which hold security, performance and
; best practices at its core. But please be aware, these settings may break
; compatibility with older or less security conscience applications. We
; recommending using the production ini in production and testing environments.

; php.ini-development is very similar to its production variant, except it's
; much more verbose when it comes to errors. We recommending using the
; development version only in development environments as errors shown to
; application users can inadvertently leak otherwise secure information.


という説明が書いてありました。

これによるとどうも、

php.ini-production は、パフォーマンスが良いが、連携する他の事柄、状況までは把握しない設定

php.ini-development は、説明が多いが、エラーの確認がしやすい設定

の様です。


追伸ですが、
PHP マニュアル翻訳プロジェクト に、INIファイル の扱いに関する変更 という記述を見つけました。
それによると、
 標準の php.ini ファイルは再び整理され、名前が変更されました。
php.ini-development ファイルには開発環境で推奨される設定があります。
php.ini-production は本番環境向けに設定されています。

だそうです。

次回(PHPのインストール関連のURL と 疑問 (4/6) ~php.ini の内容をしらべてみる~)に続く

拍手[0回]


[PR]