WindowsでPHPの環境構築

注釈

Vagrant環境でLinux の PHP環境を用意する場合 Vagrant を参照


Windows版バイナリーをダウンロード

zip版をダウンロード(ex. php-5.6.18-Win32-VC11-x64.zip)
Apacheと連携する場合は Thread Safe 版をダウンロードする。(対応バージョンは後述)

注釈

コンピューターに MSVCR110.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

PHP5系で、上記ダイアログが表示される(VC11 ランタイムがインストールされていない)場合、 Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ から、ダウンロードする。

警告

Visual C++ 再頒布可能パッケージ は、C:\ 直下に大量の添付ファイルが生成される場合があるので注意。

Chocolatey でVC11 ランタイムをインストールする場合

cinst -y vcredist2012

注釈

コンピューターに VCRUNTIME140.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

PHP7系で、上記ダイアログが表示される(VC14 ランタイムがインストールされていない)場合、 Visual Studio 2015 の Visual C++ 再頒布可能パッケージ から、ダウンロードする。

注釈

Apacheと連携する場合、 Thread Safe 版(ex. php-5.6.18-Win32-VC11-x64.zip)をダウンロードする。 (Non Thread Safe 版はdllが添付されない)

PHP5.4 は、 php5apache2_2.dll php5apache2_2_filter.dll php5apache2_4.dll が添付されているが、 PHP5.5 以降は、 php5apache2_4.dll のみ

LoadFile "/tools/php/5.6.18/php/php5ts.dll"
#LoadFile "/tools/php/5.6.18/php/libpq.dll"
LoadModule php5_module "/tools/php/5.6.18/php/php5apache2_4.dll"
#LoadModule php7_module "/tools/php/7.0.4/php/php7apache2_4.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

<IfModule php5_module>
    PHPINIDir "/tools/php/5.6.18"
</IfModule>

環境変数の設定

%PATH% に、PHP のパスを追加(ex. C:\tools\php\5.6.18)


php.ini の設定

最低限の設定。

php.ini-developmentphp.ini の名前でコピーして、以下の設定を有効にする。

; phpmd などの静的解析ツールを使う場合、無制限に設定
memory_limit = -1

; 拡張ディレクトリーを指定
extension_dir = "ext"

; 国際化用拡張モジュール(CakePHP3 でも必要)
extension=php_intl.dll

; マルチバイト文字列
extension=php_mbstring.dll

; OpenSSL(composer インストール時でも必要)
extension=php_openssl.dll

; libxslt(phpDocumentor インストール時でも必要)
extension=php_xsl.dll

date.timezone = Asia/Tokyo

; Xdebug を使用する場合のみ。(別途、dllを入手して拡張ディレクトリー(ext)配下に配置する必要あり)
[Xdebug]
zend_extension = "php_xdebug-2.4.0-5.6-vc11-x86_64.dll"

ビルトインウェブサーバーで、phpinfoを確認

1
2
3
echo ^<?php phpinfo(); ?^>> phpinfo.php
php -S localhost:8000
start http://localhost:8000/phpinfo.php

Composer

概要:パッケージマネージャー。PHP ライブラリーのインストール、管理。
1
2
3
cd C:\tools\php\5.6.18
php -r "readfile('https://getcomposer.org/installer');" | php
echo @php "%~dp0composer.phar" %*>composer.bat
1行目:PHPの解凍先に移動 (php.exe にパスを通している場合、 composer.phar を配置したい場所に移動)
2行目:https://getcomposer.org/ から composer.phar を取得。(この時、 php.iniphp_openssl.dll が有効になっている必要あり)
3行目:コマンドプロンプトで、 composer コマンドを有効にするための composer.bat を作成

注釈

2行目で、以下のエラーが発生する場合、 php.iniphp_openssl.dll が有効になっているかを確認する。

C:\tools\php\5.6.18>php -r "readfile('https://getcomposer.org/installer');" | php


Warning: readfile(): Unable to find the wrapper "https" - did you forget to enab
le it when you configured PHP? in Command line code on line 1

Warning: readfile(https://getcomposer.org/installer): failed to open stream: Inv
alid argument in Command line code on line 1

C:\tools\php\5.6.18>

注釈

以下のエラーが発生する場合、2行目に失敗し3行目に成功している。

C:\tools\php\5.6.18>composer --version
Could not open input file: C:\tools\php\5.6.18\composer.phar

C:\tools\php\5.6.18>

注釈

以下で成功を確認。

C:\tools\php\5.6.18>composer --version
Composer version 1.0-dev (54ebd67e50886e1d4bf62a3e98b5301eb225f5f6) 2015-11-19 11:01:21

C:\tools\php\5.6.18>

Composer 自身の設定

Composer 自身のバージョンアップ

C:\tools\php\5.6.18>composer --version
Composer version 1.0-dev (54ebd67e50886e1d4bf62a3e98b5301eb225f5f6) 2015-11-19 11:01:21

C:\tools\php\5.6.18>composer selfupdate
Updating to version 1c525b76f81123af180743d31c208c29351cf931.
    Downloading: 100%
Use composer self-update --rollback to return to version 54ebd67e50886e1d4bf62a3e98b5301eb225f5f6

C:\tools\php\5.6.18>composer --version
Composer version 1.0-dev (1c525b76f81123af180743d31c208c29351cf931) 2015-12-09 15:47:26

C:\tools\php\5.6.18>

global 環境の設定

初回インストール時

composer global require "phing/phing:2.*"
composer global require "squizlabs/php_codesniffer=*"
composer global require "phpmd/phpmd=*"
composer global require "sebastian/phpcpd=*"
composer global require "sebastian/phpdcd=*"
composer global require "halleck45/phpmetrics"
composer global require "sensiolabs/security-checker"

インストール済み一覧

composer global show -i

アップデート確認

composer global update --dry-run

アップデート実施

composer global update

プロジェクト毎 の設定

初回構築時(composer.json)

composer require "smarty/smarty:2.*"
composer require "twig/twig:~1.0"
composer require-dev "phpmd/phpmd=@stable"

設定ファイル(composer.json)作成済みで環境構築する場合

composer install

アップデート確認

composer update --dry-run

アップデート実施

composer update

Xdebug

概要:デバッガー

注釈

PHP5.6 から、 GDB: The GNU Project Debugger っぽい phpdbg | php debugger というデバッガーが同梱される。

Xdebugのダウンロードページ から、dllをダウンロード(TS がThread Safe版)(ex. php_xdebug-2.4.0-5.6-vc11-x86_64.dll)

phpが、 nts(Non Thread Safe) or ts(Thread Safe)x86(32bit) or x64(64bit) でダウンロードするdllが異なる。
よくわからない場合、 テーラードインストール手順 で、フォームに php -i の結果か、
phpinfo()のHTMLを張り付けて、 Analyse my phpinfo() output ボタンを押すと、
対象のdllと php.ini の設定が表示される。
; Xdebug を使用する場合のみ。(別途、dllを入手して拡張ディレクトリー(ext)配下に配置する必要あり)
[Xdebug]
; zend_extension for PHP5.3 or above
; zend_extension_ts for PHP5.2
zend_extension = "php_xdebug-2.4.0-5.6-vc11-x86_64.dll"

注釈

php.ini のzend_extensionの設定はしないで、バッチファイルで切り替える場合

php5.bat(xdebug無し)

@C:\tools\php\5.6.19\php.exe %*

php5d.bat(xdebug有効)

@call php5.bat -d zend_extension=php_xdebug-2.4.0-5.6-vc11-x86_64.dll %*

php7.bat(xdebug無し)

@C:\tools\php\7.0.4\php.exe %*

php7d.bat(xdebug有効)

@call php7.bat -d zend_extension=php_xdebug-2.4.0-7.0-vc14-x86_64.dll %*

php.bat(デフォルトのPHP)

@call php7.bat %*

php.ini の設定(プロファイリング)

注釈

プロファイリングツールとしては、他に XHProf, Uprofiler があり、 XHgui (Graphviz, MongoDB) と併用して使用することができる。

profiler_output_name(出力ファイルのファイル名)で使用可能なフォーマット文字列

; リクエストごとのプロファイル結果をファイルに追記するか[0:上書き 1:追記]
xdebug.profiler_append = 0
; プロファイラを有効にするか[0:無効 1:有効]
xdebug.profiler_enable = 1
;パラメータのXDEBUG_PROFILEをトリガーにして実行するか[0:無効 1:有効]
xdebug.profiler_enable_trigger = 0
; 出力ファイルの出力先のパス
xdebug.profiler_output_dir = "tmp\xdebug\profiler"
; 出力ファイルのファイル名[%t:タイムスタンプ %s:スクリプト名 その他:http://www.xdebug.org/docs/all_settings#trace_output_name]
xdebug.profiler_output_name = "cachegrind.out.%t-%s"

php.ini の設定(リモートデバッグ)

; リモートデバッグを有効にするか[0:無効 1:有効]
xdebug.remote_enable = 0
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.4.1"

; トレースの設定
xdebug.trace_output_dir = "tmp\xdebug\trace"