第1回WordPressお茶会 – WordBench香川 – WordPressのインストール

ローカル環境が整ったのでWordPressをインストールしていきます。
今回はドキュメントルートの確認(Windows7 64bit環境 / Mac OS X 64bit環境)の項で作成した wbkagawa フォルダにWordPressをインストールしたいと思います。

WordPress本体の準備

WordPress | 日本語 サイトの「WordPress 3.2.1 をダウンロード .zip — 4.2 MB」(2011/11/15現在)よりWordPressをダウンロードして解凍してください。

展開された wordpress フォルダを wbkagawa フォルダへ移動させておいてください。

データベースの準備

WordPressはMySQLデータベースを必要とします。
XAMPP、MAMPは共にMySQL管理ツールphpMyAdminがインストールされているのでこちらを使用してデータベースを作成していきます。
phpMyAdminの場所は以下を参照ください。
(なおphpMyAdminのキャプチャ画面はXAMPPのphpMyAdmin3.4.5の為、MAMP環境では多少仕様が異なります。)

Windows7 64bit環境
Mac OS X 64bit環境

phpMyAdminのログイン画面が表示されるのでXAMPPのセキュリティで設定したMySQL rootパスワードを入力してください。
(Mac OS Xではログイン画面は表示されません。(ハンズオン時に説明予定))

phpMyAdminのホーム画面です。「データベース」よりデータベースを作成していきます。

「新規データベースを作成する」のテキストボックスにデータベース名(今回はwbkagawa)を入力して「作成」をクリック。

wbkagawaデータベースが作成されました。

WordPressのインストール

WordPress本体、データベースの準備が完了したのでWordPressをインストールしていきます。
http://localhost/wbkagawa/wordpress/ へアクセスして「設定ファイルを作成する」をクリック。

データベース関連の説明を一通り読んで「次に進みましょう!」をクリック。

「データベース名」は先程作成した”wbkagawa”。
「ユーザ名」はXAMPPの場合”root”、「パスワード」はセキュリティの項で設定したパスワード、MAMPの場合は「ユーザ名」「パスワード」共に”root”(MAMPのデフォルト設定です)。
(今回はローカル環境なのでroot権限にしていますが、本番環境では別途ユーザを作成、パスワードも推測し難いものを設定してください。)
「データベースのホスト名」と「テーブル接頭辞」はデフォルトのまま。

設定に間違えがあったりMySQLを起動してない場合以下のようなエラーが表示されるので再度設定を確認してください。

問題なければインストール準備完了となるので、「インストール実行」をクリック。

「ユーザ名」はデフォルトの”admin”以外の任意のユーザ名を入力。
「メールアドレス」に登録したアドレスに本来ならログインURL、ユーザ名、パスワードが届きますが今回はローカルでのメール送信設定を行なっていないため届きません。パスワードは後程必要となるので控えておいてください。
その他入力が完了したら「WordPressをインストール」をクリック。

以上でWordPressインストール完了です。「ログイン」をクリックしてログイン画面へ。

登録したユーザ名・パスワードを入力して「ログイン」。

第1回WordPressお茶会 – WordBench香川 – PHP環境設定

日本語などマルチバイト文字列関数設定の為にPHPの設定ファイルphp.iniを編集します。
各環境のphp.iniの場所及びPHPの設定一覧のURLは以下の通りです。

Windows7 64bit環境
c:¥xampp¥php¥php.ini
http://localhost/xampp/phpinfo.php
Mac OS X 64bit環境
/Applications/MAMP/bin/php/php5.3.6/conf/php.ini
(MAMP2.0.5にはPHP5.2.17とPHP5.3.6がインストールされていますが今回は5.3.6を使用します)
http://localhost/mamp/phpinfo.php

Windows用拡張モジュールについて

Windows7 64bit環境ではWindows用のマルチバイト文字列関数の拡張モジュールを必要としますのでphp.iniで “extension=php_mbstring.dll” を検索してコメントアウトされている場合はアンコメントしてください。(XAMPP1.7.7では既にアンコメントされていると思います。)
PHP: Windows 用 PHP 拡張モジュール – Manual

[php.ini](変更前)

;extension=php_mbstring.dll

[php.ini](変更後)

extension=php_mbstring.dll

マルチバイト文字列関数設定

では、マルチバイト文字列関数の設定を行なっていきます。
php.iniで [mbstring] を検索してください。

[php.ini]

	[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 = EUC-JP
	
	; http input encoding.
	; http://php.net/mbstring.http-input
	;mbstring.http_input = auto
	
	; http output encoding. mb_output_handler must be
	; registered as output buffer to function
	; http://php.net/mbstring.http-output
	;mbstring.http_output = SJIS
	
	; 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 means
	; 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.
	;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=
	
	; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte
	; Default: ""
	;mbstring.script_encoding=
	

上記がXAMPP環境でのマルチバイト文字列関数の設定箇所となります。MAMP環境でも表記の違い等はありますが設定する項目は同様ですのでこちらをもとに設定を行なっていきます。
ハイライトされている行が設定する項目となります。各項目の詳細に関してはPHPマニュアル、参考サイトを御覧ください。

なお、デフォルトでのmbstringの設定を http://localhost/xampp/phpinfo.php より確認すると以下の通りとなっています。

ではphp.iniのmbstringの設定を編集していきます。

デフォルト言語を日本語に設定します。mbstring_languageをアンコメントします。

	;mbstring_language = Japanese
	

	mbstring_language = Japanese
	

内部文字エンコーディングのデフォルト値を”UTF-8″にします。

	;mbstring.internal_encoding = EUC-JP
	

	mbstring.internal_encoding = UTF-8
	

HTTP入出力文字エンコードのデフォルト値を”pass”にします。

	;mbstring.http_input = auto
	;mbstring.http_output = auto
	

	mbstring.http_input = pass
	mbstring.http_output = pass
	

HTTP入力エンコーディング変換を無効にします。

	;mbstring.encoding_translation = Off
	

	mbstring.encoding_translation = Off
	

文字コード検出順序のデフォルト値を定義します。”auto”だとASCII, JIS, UTF-8, EUC-JP, SJISの順序となるので指定しておきます。

	;mbstring.detect_order = auto
	

	mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
	

無効な文字列があった場合の代替文字のデフォルト値を設定します。今回は”none”を指定します。

	;mbstring.substitute_character = none;
	

	mbstring.substitute_character = none;
	

シングルバイト対応の関数をマルチバイト対応関数でオーバーライド(置換)すると不具合が発生する可能性があるのでオフにします。
PHP: 関数のオーバーロード機能 – Manual

	;mbstring.func_overload = 0
	

	mbstring.func_overload = 0
	

文字コードの自動判別を厳密に行うかどうかの設定でメリット・デメリットがあるようですが今回は”Off”にします。

	;mbstring.strict_detection = Off
	

	mbstring.strict_detection = Off
	

以下2つに関しては今回は必要無いのでコメントのままとしておきます。

	;mbstring.http_output_conv_mimetype=
	;mbstring.script_encoding=
	

php.iniを上書きした後、Apacheを再起動して変更を反映させてください。
再度PHPの設定一覧よりmbstringの項目を見ると設定内容が反映されているのが確認できると思います。

第1回WordPressお茶会 – WordBench香川 – MAMPの環境設定(外部からのアクセス制限設定)

今回はローカル環境構築が目的なのでローカル以外からのアクセスを拒否するように設定します。

httpd.conf(Apacheの設定ファイル)編集

/Applications/MAMP/conf/apache/httpd.confを編集します。
(Windows7 64bit環境ではXAMPPの環境設定(セキュリティ設定)で外部からのアクセス制限設定を行なっていますが本記事を参考にhttpd.confを編集することで同様にアクセス制限設定を行うことができます。)

ソースの以下の箇所を変更します。

[httpd.conf](変更前)

	<Directory "/Applications/MAMP/htdocs">

		中略

		Order allow,deny
		Allow from all

</Directory>

[httpd.conf](変更後)

<Directory "/Applications/MAMP/htdocs">

    中略

    # Order allow,deny
    # Allow from all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from localhost
    Allow from 192.168

</Directory>

Order,Allow,Denyディレクティブについて

処理の流れの説明の前にOrder,Allow,Denyディレクティブについて簡単に解説。

Order ディレクティブ

Order ディレクティブはデフォルトのアクセスの状態Allow ディレクティブと Deny ディレクティブが評価される順番を制御します。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order

Allow ディレクティブ

Allow ディレクティブはどのホストがサーバのある領域をアクセスできるかに影響を与えます。
アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数として取得された、その他のクライアントのリクエストの 特徴によって制御することができます。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow

Deny ディレクティブ

Deny ディレクティブはホスト名、IP アドレス、環境変数に基づいてサーバへのアクセスを制限します。
Deny ディレクティブの引数は Allow ディレクティブとまったく同じです。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#deny

デフォルトでの処理

デフォルトでは以下のような流れで処理が行われています。

<Directory "/Applications/MAMP/htdocs">

ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。

		Order allow,deny
		

デフォルトでは全てのアクセス拒否するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、allow,denyの順番で評価されます。

		Allow from all
		

全てのホストからのアクセスを許可します。

	</Directory>
	

対象ディレクトリを閉じます。

ローカル環境からのみアクセス許可の処理

デフォルトの設定ではドキュメントルートへ全てのホストからアクセス出来てしまうのでローカル環境からのみアクセスできるようにしたのが以下の流れとなります。

	<Directory "/Applications/MAMP/htdocs">
	

ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。

	# Order allow,deny
	# Allow from all
	

とりあえずデフォルトの設定はコメントアウト。

	Order Deny,Allow
	

デフォルトでは全てのアクセス許可するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、deny,allowの順番で評価されます。

	Deny from all
	

まず全てのホストからのアクセスを拒否します。

	Allow from 127.0.0.1
	Allow from localhost
	Allow from 192.168
	

Allowディレクティブの設定により以下からのアクセスに対して許可を与えます。

  • 127.0.0.1(ループバックアドレス:ネットワーク上における自分自身の仮想的なアドレス)
  • localhost(127.0.0.1の通常用いられているホスト名)
  • 192.168(一般的に用いられているプライベートIPアドレス:192.168.n.n)
	</Directory>
	

対象ディレクトリを閉じます。

以上の設定で外部からのアクセスを制限することは出来たのですが問題が一つ発生してしまっています。
ドキュメントルートの確認の際に作成した sample.php を表示しようと http://127.0.0.1/sample.php へアクセスすると問題なく表示されるのですが、 http://localhost/sample.php へアクセスするとその表示に非常に時間が掛かるようになってしまいました。

原因はMac OS X v10.3以降ではデフォルトでIPv6が有効になっている事です。(Windows環境もVistaからIPv6が有効になっているようです)結果 http://localhost/ にアクセスした際に以下の段階でページが表示されるため表示まで時間が掛かってしまいます。

  1. http://localhost/ にアクセスするとまずIPv6で繋ごうとする
  2. タイムアウト発生
  3. IPv4でのアクセスに切り替えてアクセス
  4. ページが表示される

そこでlocalhostでのアクセスがIPv4で行われるよう変更します。

localhostからのアクセスをIPv4にする

まず /Applications/Utilities/Terminal.app からターミナルを起動します。
hostsファイル(ホスト名とIPアドレスの対応を定義するためのテキストファイル)を編集するために開く。viエディタが有名なようですが私は使い方が分からないのでnanoエディタで編集

	sudo nano /etc/hosts
	

上記入力後root権限パスワードを求められるので入力するとエディタが起動します。

::1 localhost をコメントアウトします。

control+xでエディタを終了します。
“Save modified buffer (ANSERING “No” WILL DESTROY CHANGES) ? ” と聞かれるので “y”

“File Name to Write: /etc/hosts” と上書きするか聞かれるので “enter”

ターミナルで以下を入力してDNSキャッシュを削除。

	sudo dscacheutil -flushcache
	

これで http://localhost/ でアクセスしても問題なく表示されるようになりました。

[2011/11/16追加] Mac OS X のファイアウォールについて

Mac OS X にはファイアウォールが搭載されていますがデフォルトでは無効になっているので有効にしておきます。
システム環境設定 > セキュリティとプライバシー > ファイアウォール

次はPHP環境設定を行なっていきます。