Windows7でPHP5のIntl拡張を有効にする方法


## 概要

PHPで[Unicode正規化]などを行うには、[国際化用拡張モジュール（Intl）][Intl]が必要です。
このモジュールを有効にするには、[ICUライブラリ]をインストールしなくてはなりません。

しかし、Windowsでこれをインストールし、且つ、PHPで使えるよう有効化するのに一手間かかりました。
<del>調べても調べても、出てくるのはLinuxやMacやXAMPPでの方法ばかり。
`yum`だの`brew`だの`php-config`だの… Windows版Apache & PHP使いの私にどうしろというのだ‼‼</del>

日本語記事が見つからず、この方法にたどり着くまで一手間かかったため、
備忘録も兼ねて、WindowsでIntlを有効化する方法について投稿することにします。


## 注意

* 「ディレクトリ」を「フォルダ」と表記していますが、仕様です
* 無駄に画像が多いです
* 初心者向けのと見せかけて、実はそうじゃなかったりするかも
* ここに書かれている内容は2016年7月20日時点のものです。情報が古くなり、参考にならなくなるかもしれません。その場合、コメントでお知らせください。生きていたら、そして気が向いたら修正します。
* この手順に従った結果、環境が壊れたりしても責任は取れません。参考にする場合は**自己責任**でお願いします。


## 私の環境

### OS

Windows 7 Home Premium SP1 64bit

ノートPCのOSまんまです。仮想環境なんて使っていません。
<del>おかげで、ググッてヒットするLinuxやMacでの方法がまるで参考になりませんでした。同じ思いをしている方の助けになると良いな…</del>


### Webサーバ

Apache 2.4.16 VC11 Win64

[Apache Lounge]からzip形式でダウンロードし、インストールしたものです。OSが64bitなので、Win64を選択しています。
ダウンロードしたファイル名は「`httpd-2.4.16-win64-VC11.zip`」でした。

私は[独習PHP 第2版]でPHPを学んでいたため、XAMPPなんてものは使っていません。ApacheやPHPも、直接ダウンロード&インストールしていました。
<del>おかげで、ググッてヒットするXAMPPでの方法がまるで参考に<a href="http://dic.nicovideo.jp/a/(ry">(ry</a></del>


### PHP

PHP 5.6.22 VC11 x64 Thread Safe

[PHP For Windows]からzip形式でダウンロードし、インストールしたものです。OSが64bitなので、x64を選択しています。また、Thread Safe版を選択しました。
ダウンロードしたファイル名は「`php-5.6.22-Win32-VC11-x64.zip`」でした。
Apacheでは、モジュール版として動作させています。

[上述][#Webサーバ]の通り、XAMPPなんてイカしたものは使っていなかったため、直接ダウンロードし、Cドライブ直下で展開しました。
<del>おかげで<a href="http://dic.nicovideo.jp/a/(ry">(ry</a></del>


## 手順

<blockquote class="twitter-tweet" data-cards="hidden" data-lang="ja"><p lang="ja" dir="ltr">Windows7でPHP5のIntl拡張を有効にする方法 by <a href="https://twitter.com/sounisi5011Prog">@sounisi5011Prog</a> on <a href="https://twitter.com/Qiita">@Qiita</a> <a href="https://t.co/5Tz69iXgOs">https://t.co/5Tz69iXgOs</a><br>Windows PHPerだ！崇めよう。</p>&mdash; エフィ開発チーム (@effy_staffs) <a href="https://twitter.com/effy_staffs/status/755658304945258496">2016年7月20日</a></blockquote>

WindowsでWebサーバやPHPを直接インストールしている、崇められてしまうような私の環境。
そんな私の環境に合う方法は以下のやり方でした。順に説明していきます。


### 事前準備

この投稿で解説している方法を試すなら、その前に、以下の準備が整っているか確認してください。

* 「メモ帳」以外のテキストエディタをインストール済みで、使用できる

    そもそもPHPを始める段階でインストール済みだと思いますが一応のため。
    Windows標準の「メモ帳」を使うつもりなら、絶対に止めてください。
    代わりに、[Atom](https://atom.io/)とか[Notepad++](http://forest.watch.impress.co.jp/library/software/notepadplus/)とかを使いましょう。

* Windows版のApache、及び、モジュール版PHPを導入済み。

    つまり、PHPが使える。
    PHPも使えないような環境は流石に想定できませんし、面倒見きれません。
    最低限、[Hello World](http://php.net/manual/ja/tutorial.firstpage.php)が実行される状態を整えてください。

    また、私の環境がモジュール版PHPのため、CGI版PHPは対象外です。

* zipファイルを展開（解凍）できる。

    エクスプローラーの機能とかでzipファイルを展開できるか確認してください。
    できない、あるいは分からない場合、zipファイルを展開（解凍）するソフト[^zipファイルを展開するソフト]をインストールしてください。

[^zipファイルを展開するソフト]: [7-Zip]、[Lhaplus]など。なお、私は[Lhaplus]を使っています。

* Apacheのインストールディレクトリ（フォルダ）の場所（パス）を把握できている。

    私の場合は、「`C:\Apache24`」がインストールディレクトリになります。
    「`httpd.conf`」ファイルの場所で例示するなら、「`C:\Apache24\conf\httpd.conf`」となります。

    どうしても分からない場合、もしかしたら「`phpinfo.php`」ファイルの「Server Root」という箇所に表示されているかもしれないので、確認してみてください。

    ![](https://qiita-image-store.s3.amazonaws.com/0/35948/dce4729b-98b1-c346-7869-e16566b45f34.png)

    「そんなファイルなんて知らない」という場合は、「[`phpinfo.php`ファイルを作っておく][#`phpinfo.php`ファイルを作っておく]」を参考に作ってみてください。

なお、XAMPPとかでPHPを導入している場合は、この方法のせいでかえって壊れるかもしれません。
私はこれで成功しましたが、自分の環境で試す場合は自己責任でお願いします。


### `phpinfo.php`ファイルを作っておく

Intlが有効化したかどうか確かめる場合や、「`php.ini`」ファイルの場所が分からない場合などに備えて、`phpinfo()`関数を実行するだけのファイルを作っておきましょう。
既にあるなら、作らなくても大丈夫です。

以下のPHPファイルを書いてください。ここではファイル名を「`phpinfo.php`」としていますが、別に他のファイル名でも構いません。

```php:phpinfo.php
<?php
phpinfo();
```

そしてこのファイルを、PHPが実行されるフォルダに保存してください。
保存したら、このファイルをWebブラウザで開いてみましょう。

![青紫か群青っぽい色が背景色の、「PHP Version 5.6.22」と書かれた見出しが一番上にあるページが表示されると思います。見出しの中の右端には、PHPのロゴもあります。その下に、PHPの実行環境に関する情報がテーブル形式でずらりと並んでいます。](https://qiita-image-store.s3.amazonaws.com/0/35948/8b66fc06-e7ac-519f-780b-4207c1ca7157.png)

こんな感じのページが表示されればOKです。

この中に、「intl」と書かれた項目が**無い**ことを確認してください。
この項目がある場合、Intlは既に導入済みです。つまり、この投稿に書かれている事を真似る必要はありません。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/b6acbf5c-d466-87b2-1707-269c451217e9.png)

この項目があるにも関わらず、Intlが使えない場合は…
すみませんが、この投稿、及び、私の知識では対処できそうにありません。

[スタック・オーバーフロー](http://ja.stackoverflow.com/)や[テラテイル](https://teratail.com/)、[Yahoo!知恵袋](http://chiebukuro.yahoo.co.jp/)なんかで質問すれば、解決するかもしれません。


### ICUライブラリをダウンロードする

<ins>この手順は省略できるかもしれません。詳細は<a href="#comment-674785e633a343380c04">コメント</a>を参照してください</ins>

まずは、ICUライブラリをダウンロードします。[公式サイト][ICUライブラリ]に行き、「Navigation」という部分の中にある「[Download ICU](http://site.icu-project.org/download)」というリンクを開きます。

公式サイト：http://site.icu-project.org/

![](https://qiita-image-store.s3.amazonaws.com/0/35948/afc55924-83dd-5b1f-5ec4-1c00e710cfd6.png)

その中に、ダウンロードページヘのリンクがずらりと並んでいます。その中で、「ICU4C」という列の一番上に書かれてるバージョン（最新版）のリンクを開きます。
これを書いている時点のダウンロードページではICU 57が最新版なので、「57.1」と書かれているリンクがこれにあたります。

※将来的にこの「ICU4C」という名前が「ICU5C」とか「ICU6C」に変わるかもしれません。その場合は、以降の説明をうまい具合に読み替えてください。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/6e6763ce-c3eb-26b2-ae4f-248463ad5306.png)

上手く移動すると、「ICU4C Download」という見出しに移動しているはずです。
この中の「ICU4C Binary Download」から、
「Windows (x86 32-bit) Visual Studio 10」とか「Windows (x86 64-bit) Visual Studio 10」とかって
書いてある部分の左隣にあるzipファイルのリンクを開いてダウンロードしましょう。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/2185054f-69e4-4ae5-9a18-b29f4d0a9631.png)

私のOSは64bitなので、「Windows (x86 64-bit) Visual Studio 10」の部分にある「`icu4c-57_1-Win64-msvc10.zip`」をダウンロードしました。
32bitの場合は、「Windows (x86 32-bit) Visual Studio 10」の項目にあるzipファイルをダウンロードしてください。

ダウンロードしたzipファイルの保存場所はどこでも良いです。例えばデスクトップとか、「ダウンロード」フォルダの中とかでも構いません。
ただし、後述の問題があるため、保存する場所に「`icu`」というフォルダが無いことを確認しましょう。
Windowsは大文字小文字を区別しないため、「`ICU`」や「`Icu`」、「`iCU`」、「`IcU`」などのフォルダでも駄目です。

不安な場合は、新しくフォルダを作り、その中にzipファイルをダウンロードしてしまいましょう。
ちなみに私は、「`ダウンロード`」フォルダの中に「`ICU`」フォルダを作り、その中にzipファイルをダウンロードしました[^ICUフォルダの中にダウンロード]。

[^ICUフォルダの中にダウンロード]: 新しいフォルダの「中」には何も無いため、『保存する場所に「`icu`」というフォルダは無い』状態にできます。『「`ダウンロード`」フォルダの中に作った「`ICU`」フォルダの中』も同じです。


### ICUライブラリをインストールする

#### zipファイルを展開する

<ins>この手順は省略できるかもしれません。詳細は<a href="#comment-674785e633a343380c04">コメント</a>を参照してください</ins>

ダウンロードしたICUライブラリのzipファイルを展開します。展開方法は展開ソフトによるので、ここでは割愛します。

展開するとき、「`icu`」というフォルダが作られ、その中にファイルが展開されてしまう事があります。また、既に「`icu`」フォルダがある場合は、その中に展開されたファイルが追加されてしまいます。
このため、zipファイルを展開する前に、zipファイルのあるフォルダに「`icu`」フォルダが無いか確認してください。上述したとおり、Windowsは大文字小文字を区別しないため、「`ICU`」や「`Icu`」、「`iCU`」、「`IcU`」などのフォルダでも駄目です。
ダウンロードするときに確認済みなら問題ありません。

展開すると、「`icu`」というフォルダが作られると思います。そのフォルダを開きましょう[^展開後、フォルダを開く]。
「`icu`」フォルダの中には、32bit版のzipなら「`bin`」、64bit版のzipなら「`bin64`」というフォルダがあるはずです。
私の場合は64bit版をダウンロードしたので、「`bin64`」になります。

[^展開後、フォルダを開く]: zipの展開ソフトによっては、「`icu`」フォルダを新しいウィンドウで勝手に開くものもあります。その場合は、わざわざ開かなくても大丈夫です。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/5a89bf20-fc8f-a434-f483-55c33163b1da.png)

以降は、このフォルダ名「`bin64`」で説明を続けることにします。

#### 「`icu*.dll`」を「`bin`」フォルダにコピーする

この「`bin64`」フォルダを開きます。
するとズラッとファイルが並んでいるハズ。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/347f087a-18f2-e8d7-6481-5f68e38aeb96.png)

この中のうち、「`icu*.dll`」というファイルを探します[^icu*.dllを探す]。
私の場合、以下のファイルがこれに該当していました。

[^icu*.dllを探す]: 探すときは、エクスプローラーの検索窓（右上の「bin64の検索」と書いてある入力欄）に「`icu*.dll`」と入力すると、30秒くらい待たされてから（場合によっては数秒で）該当するファイルだけが表示されます。これで探すと楽です。

* `icudt57.dll`
* `icuin57.dll`
* `icuio57.dll`
* `icule57.dll`
* `iculx57.dll`
* `icutu57.dll`
* `icuuc57.dll`

これらのファイルを、全て、Apacheのインストールディレクトリにある「`bin`」フォルダの中にコピーします[^複数のファイルをコピー]。
私の場合、「`C:\Apache24`」がApacheのインストールディレクトリになります。なので、「`C:\Apache24\bin`」フォルダの中にコピーします。

[^複数のファイルをコピー]: 複数のファイルをコピーする時は、Ctrlキーを押下しながらファイルをクリックすると、複数選択できます。またShiftキーで範囲内の一括選択ができますし、何も無い部分からマウスでドラッグして四角形を描くことでも選択できます。複数選択してからコピーすると移動が楽です。

以上でインストールは終了です。


### `php.ini`を編集する

ここまでくれば、Intlの有効化まであと少しです。
まずは、「`php.ini`」ファイルをテキストエディタで開きます。

「`php.ini`」ファイルの場所が分からない場合は、「[`phpinfo.php`ファイルを作っておく][#`phpinfo.php`ファイルを作っておく]」で作った（もしくは、既に作成済みの）「`phpinfo.php`」ファイルをWebブラウザで開き、「Loaded Configuration File」という項目を確認してみましょう。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/e4db55ce-6e67-fff5-cfdb-2ffa4387254c.png)

私の場合、「`C:\php-5.6.22-Win32-VC11-x64\php.ini`」が「`php.ini`」ファイルの場所になります。

このファイルをテキストエディタで開き、以下の行を探してください。
（もしあれば、）テキストエディタの検索機能で「extension」とか「intl」とか検索してみると簡単に見つかるかもしれません。

```ini:php.ini
;extension=php_intl.dll
```

この行の先頭にあるセミコロン（`;`）を取り、以下のように修正します。

```ini:php.ini
extension=php_intl.dll
```

修正したら、「`php.ini`」ファイルを上書き保存しましょう。


### Apacheを再起動し、Intlが有効化したか確認する

「`php.ini`」ファイルを保存したら、Apacheを再起動してください。
再起動後、「`phpinfo.php`」をWebブラウザで開き、「intl」と書かれた項目がある事を確認してください。

![](https://qiita-image-store.s3.amazonaws.com/0/35948/b6acbf5c-d466-87b2-1707-269c451217e9.png)

もしあれば、導入成功です。お疲れ様でした！


## 参考

* [php - intl extension: installing php_intl.dll - Stack Overflow](http://stackoverflow.com/questions/1451468/intl-extension-installing-php-intl-dll)

    * http://stackoverflow.com/a/33937031/4907315
    * http://stackoverflow.com/a/37341251/4907315
    * http://stackoverflow.com/a/33937031/4907315

* [php.iniのパス指定と現在指定されているphp.iniの場所を知る方法 - Qiita](http://qiita.com/ug23/items/ab76a7104a0d073f1712)


## あとがき

この方法を見つけるまで、私は徹夜して調べました。
次の日は学校だったのですが、徹夜による眠気に耐え切れず、講義中に寝てしまうという失態を犯してしまいました。

私と同じ轍を踏む犠牲者が現れないことを切に願います。
どうかこれを参考に、WindowsでのIntl導入を楽に成功させられますように…

[#概要]: #%E6%A6%82%E8%A6%81
[#注意]: #%E6%B3%A8%E6%84%8F
[#私の環境]: #%E7%A7%81%E3%81%AE%E7%92%B0%E5%A2%83
[#OS]: #os
[#Webサーバ]: #web%E3%82%B5%E3%83%BC%E3%83%90
[#PHP]: #php
[#手順]: #%E6%89%8B%E9%A0%86
[#事前準備]: #%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99
[#`phpinfo.php`ファイルを作っておく]: #phpinfophp%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8F
[#ICUライブラリをダウンロードする]: #icu%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B
[#ICUライブラリをインストールする]: #icu%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B
[#zipファイルを展開する]: #zip%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B
[#「`icu*.dll`」を「`bin`」フォルダにコピーする]: #icudll%E3%82%92bin%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AB%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B
[#`php.ini`を編集する]: #phpini%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%99%E3%82%8B
[#Apacheを再起動し、Intlが有効化したか確認する]: #apache%E3%82%92%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%97intl%E3%81%8C%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%97%E3%81%9F%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B
[#参考]: #%E5%8F%82%E8%80%83
[#あとがき]: #%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D

[Apache Lounge]: https://www.apachelounge.com/
[PHP For Windows]: http://windows.php.net/
[ICUライブラリ]: http://site.icu-project.org/
[Intl]: http://php.net/manual/ja/book.intl.php
[7-Zip]: https://sevenzip.osdn.jp/
[Lhaplus]: http://hoehoe.com/
[Unicode正規化]: https://ja.wikipedia.org/wiki/Unicode%E6%AD%A3%E8%A6%8F%E5%8C%96
[独習PHP 第2版]: https://www.amazon.co.jp/dp/4798121517