
↑からの続きです。
前編までで、XAMPPを起動して自分のパソコン内にApache(Webサーバー)が稼働するようになりました。(なったはずです。)
これだけでWebページをテストしながら作っていけます。
動的なWebページも JavaScript でスクリプトを組み込むことにより、複雑な処理ができるようになります。
「動的」とは、「静的」に対しての言葉です。
単に文章や画像などが表示するだけで動作を伴わないコンテンツを「静的」なコンテンツといいます。
一方、表示したページの中で文章や画像が動いたり、メールのように文字などをやり取りするようなコンテンツを「動的」といいます。
ちなみに、「コンテンツ」は内容ですね。Webページとして表示されるものが、Webページに書かれた内容です。
動的なコンテンツは、HTML5 になってから HTML+CSS だけでもかなりのことができるようになりました。
さらに JavaScript を使うことでもっと複雑なことが可能となります。
しかし、これらで作ったコンテンツはどのように作られているのか見ることができます。
ブラウザからWebサイトをリクエストすると、WebサーバーからWebページのコード(プログラム)が送られてきます。
そして、それをブラウザが解釈して画面に表示していますが、そのコードを見ることができるのです。
Yahooのページでも何のページでもいいので表示して、右クリックメニューの「ページのソースを表示」を選ぶと、そのページのコードが表示されます。
つまり、Webページがどのように作られているかを見ることができるわけです。
これでは、見せたくない人に見られてしまいますし、セキュリティ面でもイヤな部分です。
また、大量のデータ(住所録など)を扱う場合などにも HTML と JavaScript では無理があります。
以上のことを解決してくれるのが「PHP」という言語です。
以下、XAMPPで組み込んだ PHP の設定と使い方を説明していきます。
ただ、PHP を使ったスクリプト(プログラム)の作成方法は、それだけで1冊の本ができますので別の機会にということにします。
PHPとは?
PHPとは、JavaScript と同様に動的にWebページを作るためのプログラミング言語です。
簡単に言うとWEB上で動く掲示板やチャットなど を作成するのに便利なプログラム言語ということです。
JavaScript はサーバーから送られてきたコードをブラウザが解釈して動作しますので、クライアント側で動作する言語です。
対して、PHP はサーバー側で動作する言語です。
PHP で作られた処理はサーバー側で実行し、その結果だけがクライアントに送られます。
クライアント側では、コードが見えないのでどのように処理しているか分かりません。
また、大量のデータを扱う場合、PHP でデータベースを扱うことにより簡単に処理することができます。
今回書いている一連の記事は最終的にデータベースを取り扱えるようになることを目的にしています。
データベースに関しては、PHP の説明の後に別記事で説明します。
PHPを実行するには、PHPがインストールされたWebサーバーが必要ですが、XAMPPをインストールすれば PHP もインストールされています。
PHPでできること
上に書いたことをまとめると、PHPを使うと、ひとつのページに様々な情報を反映して動的なページを作ることができます。
基本的に次のことができるようになります。
- HTMLソースコードを生成する
PHPを使うと、HTMLソースコードを作成することができます。
すべての文章をPHPで書く必要はなく、HTMLの一部分のみPHPで生成することができます。 - データベースと連携する
PHPを使うとMySqlやPostgerSQLなどさまざまなデータベースと連携したWebサイトを作成することができます。
ブログや掲示板などのサイトは、記事をデータベースに記録し、サイトへのアクセスがあるとPHPでその記事のデータをデータベースから読み込んで表示させています。 - クライアントから送信された情報を受け取る
HTMLのフォームでユーザーが入力した情報をPHPを使って受け取ることができます。
HTMLで作成したフォームから送信された情報を受け取って、HTMLソースに表示したり、データベースに保存したりすることができます。
PHP を使うと、Webコンテンツの応用が広くなるわけです。
PHPの設定
ここから、XAMPPをインストールした時にインストールされたPHPの設定です。
設定内容の確認
PHPでは設定内容を確認するためのphpinfo関数がありますが、XAMPPではphpinfo関数を使って現在の設定内容を確認するためのページが用意されています。
Apacheが起動された状態でブラウザから
「http://localhost/」
へアクセスします。
画面上部のメニューの中にある「PHPInfo」と書かれたリンクをクリックします。
PHPに関して現在の設定内容が表示されます。
PHPの設定ファイル php.ini の設定を変更した後で、この画面を見ることで変更内容を確認することができます。
かなり縦に長いページで、多くの設定項目があることが分かります。
設定ファイル php.ini
PHPスクリプトが含まれるHTMLファイルをApacheに置き公開する場合、Apacheは起動時にphp.iniファイルと呼ばれる設定ファイルを読み込みPHPに関する設定を行います。
上の PHPInfo 画面で、
「Loaded Configuration File」の項目に C:\xampp\php\php.ini とあります。
この「Loaded Configuration File」の行にある php.ini ファイルが現在読み込まれている設定ファイルとなります。
前回の記事までに「XAMPPをインストールしたディレクトリ」は、C:\xampp ですので C:\xampp\php\php.ini が読み込まれた php.iniファイルです。
Apacheが読み込む php.iniファイルの場所の指定は、
C:\xampp \apache\conf\extra\httpd-xampp.conf に書かれており、下のように記述されています。
<IfModule php7_module>
PHPINIDir “C:/xampp/php”
</IfModule>
ここを変更することにより、どのディレクトリにある php.iniファイルを読み込むかを指定できます。
変更することはないと思いますが。
php.ini を修正する
上で説明しましたように、PHPに関する設定は php.ini ファイルに書き込まれています。
以下に必要な修正を説明していきます。
修正前に元ファイルのバックアップを取っておき、C:/xampp/php にある php.ini をエディタで開いてください。
インクルードパス
インクルードパスとは、PHPが記述されたファイルから外部のファイルをインクルードする時、インクルードするファイルを置くディレクトリを設定しています。
ここに設定されたディレクトリを基点として外部ファイルを検索し、インクルードします。
include_path で検索すると、
; UNIX: “/path1:/path2”
include_path=C:\xampp\php\PEAR
;
; Windows: “\path1;\path2”
;include_path = “.;c:\php\includes”
;
; PHP’s default setting for include_path is “.;/path/to/php/pear”
; http://php.net/include-path
インクルードパスには複数のパスを記述でき、セミコロン(;)で区切って続けて記述できます。
デフォルトの設定では「C:\xampp\php\PEAR」が設定されています。
Windowsの場合でも、この設定のままでよろしいです。
拡張モジュール
PHPの起動時に読み込まれる拡張モジュールを置くディレクトリを設定します。
デフォルトの設定ではXAMPPをインストールしたディレクトリに合わせて「C:\xampp\php\ext」となっています。
extension_dir を検索します。
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = “./”
; On windows:
extension_dir=”C:\xampp\php\ext”
実際にどのモジュールをPHPに読み込むのかについて「extension」で指定します。
下記は php.ini ファイルに記述されている「extension」の部分です。
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
extension=mbstring
extension=exif ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=shmop
読み込むモジュールを「extension=モジュール名」と記述します。
行頭に「;」が付いている行はコメントとして扱われますので「;」が付いているものは現在無効なものです。
モジュールファイル名は、php_~.dll ですが、この設定では ~ 部分だけが記されています。
以前は下のように書いていましたが、省略して書けるようになったようです。
extension=php_bz2.dll
extension=php_curl.dll
extension=php_fileinfo.dll
;extension=php_ftp.dll
…
通常使うモジュールはデフォルトで有効になっているので、一応このままでいいでしょう。
必要なモジュールに「;」が付いている時には「;」を外して有効にしてください。
mbstring
日本語などのマルチバイト文字を扱うにはmbstringの設定が必要です。
まずはmbstring用の拡張モジュールが有効になっているか確認してください。
extension=mbstring
このように、デフォルトでmbstring拡張モジュールを読み込むようになっています。
もし先頭に「;」が付いていた場合は削除して有効にして下さい。
以下、それぞれを設定変更します。
[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language
;mbstring.language = Japanese
; Use of this INI entry is deprecated, use global internal_encoding instead.
; internal/script encoding.
; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.
; The precedence is: default_charset < internal_encoding < iconv.internal_encoding
;mbstring.internal_encoding =
; Use of this INI entry is deprecated, use global input_encoding instead.
; http input encoding.
; mbstring.encoding_traslation = On is needed to use this setting.
; If empty, default_charset or input_encoding or mbstring.input is used.
; The precedence is: default_charset < intput_encoding < mbsting.http_input
; http://php.net/mbstring.http-input
;mbstring.http_input =
; Use of this INI entry is deprecated, use global output_encoding instead.
; http output encoding.
; mb_output_handler must be registered as output buffer to function.
; If empty, default_charset or output_encoding or mbstring.http_output is used.
; The precedence is: default_charset < output_encoding < mbstring.http_output
; To use an output encoding conversion, mbstring’s output handler must be set
; otherwise output encoding conversion cannot be performed.
; http://php.net/mbstring.http-output
;mbstring.http_output =
; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
; http://php.net/mbstring.encoding-translation
;mbstring.encoding_translation = Off
; automatic encoding detection order.
; “auto” detect order is changed according to mbstring.language
; http://php.net/mbstring.detect-order
;mbstring.detect_order = auto
; substitute_character used when character cannot be converted
; one from another
; http://php.net/mbstring.substitute-character
;mbstring.substitute_character = none
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
;mbstring.func_overload = 0
; enable strict encoding detection.
; Default: Off
;mbstring.strict_detection = On
; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype=
黄色の mbstring ~ = ~ となっている行ですが、最初は全てコメント行になっています。
必要とする各項目の先頭の「;」を削除した上で順に設定を変更していきます。
設定方法は環境によって変わりますのでうまく動作しなければ後で見直す必要も出てきます。
以下、設定例ですが、ほぼこの設定で正常に動作すると思います。
上から順に
; language for internal character representation.
; http://php.net/mbstring.language
mbstring.language = Japanese ← 日本語を使いますので行頭の「;」を外す。
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
; http://php.net/mbstring.internal-encoding
mbstring.internal_encoding = UTF-8 ←行頭の「;」を外して「UTF-8」を書き加える。
「mbstring.internal_encoding」はマルチバイト文字列関数(mbstring)のデフォルトエンコードとなります。
変換元の文字コードが指定されなかった場合、ここで指定した文字コードが使用されます。
基本的には文字コードを指定しますので設定は不要ですが、ここでは基本の文字コードとして使用予定のUTF-8を指定しておきます。
; http input encoding.
; http://php.net/mbstring.http-input
mbstring.http_input = pass ←行頭の「;」を外して「pass」を書き加える。
; http output encoding. mb_output_handler must be
; registered as output buffer to function
; http://php.net/mbstring.http-output
mbstring.http_output = pass ←行頭の「;」を外して「pass」を書き加える。
「mbstring.http_input」と「mbstring.http_output」はHTTP通信の時のインプットとアウトプットの文字コード変換に関するパラメータです。
; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
; http://php.net/mbstring.encoding-translation
mbstring.encoding_translation = Off ←行頭の「;」を外す。
自動で変換しないように「mbstring.encoding_translation」は「Off」を指定しています。
; automatic encoding detection order.
; auto means
; http://php.net/mbstring.detect-order
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII ←行頭の「;」を外して、「auto」を「UTF-8,SJIS,EUC-JP,JIS,ASCII」に変更する。
「mbstring.detect_order」は文字コードの自動判別を行う時にどの文字コードから順に確認していくのかを指定します。
「auto」に設定するとどの文字コードから判別するか分かりませんので明示的に指定してあります。
; substitute_character used when character cannot be converted
; one from another
; http://php.net/mbstring.substitute-character
mbstring.substitute_character = none ←行頭の「;」を外す。
「mbstring.substitute_character」は無効な文字があった場合に代わりに表示する文字を指定します。
デフォルトの値のまま無効な文字は何も表示しない設定の「none」としておきます。
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
mbstring.func_overload = 0 ←行頭の「;」を外す。
「mbstring.func_overload」はシングルバイト対応の関数をマルチバイト対応の関数でオーバーロードするどうかの設定です。
自動でオーバーロードされると予期せぬ不具合が発生することもありますのでオーバーロードしない「0」としておきます。
; enable strict encoding detect
mbstring.strict_detection = Off ←行頭の「;」を外して「On」を「Off」に変更します。
「mbstring.strict_detection」は文字コードの自動判別を厳密に行うかどうかの設定です。
それぞれメリットデメリットがあるのでOffにします。
; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype= ← そのまま変更しない
「mbstring.http_output_conv_mimetype」についてはよく分からないのでそのままです。
php.iniの変更内容を反映させる
php.ini の必要最小限の設定変更は以上です。
さらにPHPからMySQLなどのデータベースを使用する場合はMySQLに関するモジュールの読み込みや設定などが必要となります。
変更したphp.ini の内容を反映させるにはApacheを再起動する必要があります。
再起動後にphpinfo関数で出力される内容を確認して下さい。
「mbstring」のブロックを見て、設定した内容が反映されていれば設定変更は完了です。
PHPに関するApacheの設定
PHPを利用するにはWebサーバであるApacheでの設定も必要となります。
XAMPPを使ってインストールした場合にはPHPを利用するために必要となる設定も自動で行われています。
ですので、確認だけしておいてください。
Apacheの設定ファイル
Apacheの設定ファイルは httpd.conf ですが、PHPに関する設定は httpd-xampp.conf に書かれています。
このファイルを httpd.conf 内から読み込んでいます。
httpd-xampp.conf は「C:\xampp\apache\conf\extra\」にあります。
PHPINIDir
PHPINIDirにはPHPの設定ファイルである php.ini ファイルが設置されているディレクトリを指定します。
XAMPPをインストールしたディレクトリに合わせて「C:/xampp/php」が自動的に設定されています。
<IfModule php7_module>
PHPINIDir “C:/xampp/php”
</IfModule>
PHP側で設定を変更した場合には、Apache側の設定も忘れずに変更しておいて下さい。
LoadModule
LoadModuleについては http.conf ファイルでも記載されていますが、PHPに関するモジュールについては httpd-xampp.conf ファイルに書かれています。
LoadFile “C:/xampp/php/php7ts.dll”
LoadFile “C:/xampp/php/libpq.dll”
LoadModule php7_module “C:/xampp/php/php7apache2_4.dll”
Apache用のPHPモジュールを読み込んでいます。
設定されているファイルが指定されたディレクトリに存在していることも確認しておいて下さい。
拡張子に関する設定
拡張子が「.php」及び「.phps」に対するMIMEタイプを「text/html」に設定します。
次のような記述があるかどうか確認して下さい。
<IfModule mime_module>
AddType text/html .php .phps
</IfModule>
そして「.php」の拡張子を持つファイルはPHPファイルとして処理するように、また「.phps」の拡張子を持つファイルはPHPファイルのソースファイルとして処理するように設定します。
こちらも最初から設定されていますので、確認しておいて下さい。
<FilesMatch “\.php$”>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch “\.phps$”>
SetHandler application/x-httpd-php-source
</FilesMatch>
PHPを利用する上で必要となるApache側の設定は以上です。
PHPの動作確認
下の PHP サンプルコードで書かれたWebページにアクセスして、正常にPHPが動作するか確認します。
上のコードを「test_php.php」という名前でApacheのドキュメントルートに配置します。
test_php.php に上のコードを保存する時、文字コードはUTF-8にして保存してください。
でないと、文字化けして表示しますので。
Apacheが起動していることを確認した上で、ブラウザから http://localhost/test_php.php へアクセスして下さい。
上の画面のように、正常にアクセスした日付が表示されればPHPは利用できるようになっています。
以上で、PHP の設定は完了です。
最後にデータベースMySQLに関する設定となります。
次の記事にまとめます。
コメント