PHPの開発環境を作るためのリンク集と実施例


Wordpress とか CakePHP とか動かした事があるけど、恥ずかしながら、PHPでアプリを書いた事がない。 ちょっと、簡単なアプリを作ってみようと思ったのですが、開発環境ってどうやって作るのかなぁ〜、何が良いのかなとグーグルで検索したら、出るわ出るわ。。。　いろんな情報が沢山ありすぎて、選択に困ったので、自分の観点で分類して、整理したメモです。


## PHPスクリプト言語の情報

* PHP Home page http://jp2.php.net/
* 日本PHPユーザー会 http://www.php.gr.jp/
* PHPドキュメント http://php.net/docs.php


## PHPリポジトリ

* PEARとは https://ja.wikipedia.org/wiki/PEAR
* PEAR入門 http://www.phpbook.jp/pear/
* PEARホームページ http://pear.php.net/

* PECL とは https://ja.wikipedia.org/wiki/PECL
* PECLホームページ http://pecl.php.net/

* Packagist https://packagist.org/ Composer が利用するリポジトリで、現在は主流の様です。


## PHP実行環境 バージョン管理ツール

* phpenv PHP multi-version installation and management for humans https://github.com/phpenv/phpenv
* PHPBrew https://github.com/phpbrew/phpbrew/blob/master/README.ja.md


## PHP依存管理ツール

node の npm や ruby の bundler にインスパイヤーされて作られたツール

* Composer https://getcomposer.org/

Composer は、PHPのパッケージ・リポジトリ https://packagist.org/explore/popular に登録されたパッケージを導入することができます。


## PHPを扱えるエディタ

* 学習をはじめた人へ！PHPに適したテキストエディタ13選 https://eng-entrance.com/php-editor
* Emacs Wiki Php Mode https://www.emacswiki.org/emacs/PhpMode
* PHP開発で追加しておきたいEmacs Lisp 8選 http://blog.asial.co.jp/190


## PHPのフレームワーク
世界的に人気のPHPフレームワークは、Laravel の様です。

* Laravel https://laravel.com/
* CodeIgniter https://www.codeigniter.com/
* Symfony http://symfony.com/
* Zend Framework https://framework.zend.com/
* CakePHP https://cakephp.org/


![スクリーンショット 2017-07-17 20.53.08.png](https://qiita-image-store.s3.amazonaws.com/0/42829/a8b57340-add1-3f3e-9dc4-3d044dee1032.png "スクリーンショット 2017-07-17 20.53.08.png")


## PHP REST フレームワーク

[PHP API Framework: 10 BEST for REST API Development in PHP](http://noeticforce.com/php-rest-api-frameworks-best-for-web-services)のトップ３は以下の様である。

* Slim https://www.slimframework.com/
* Silex https://silex.symfony.com/
* Lumen https://lumen.laravel.com/


## MacOSのPHP開発環境を整備してみた

### phpenvとPHP5.6系最新版インストール
https://github.com/phpenv/phpenv のREADME.md の手順に従って、次の様にインストールしたが、問題発生！

~~~
imac:~ maho$ cd
imac:~ maho$ git clone git://github.com/phpenv/phpenv.git .phpenv
Cloning into '.phpenv'...
remote: Counting objects: 1070, done.
remote: Total 1070 (delta 0), reused 0 (delta 0), pack-reused 1070
Receiving objects: 100% (1070/1070), 200.93 KiB | 0 bytes/s, done.
Resolving deltas: 100% (664/664), done.
imac:~ maho$ echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bash_profile
imac:~ maho$ echo 'eval "$(phpenv init -)"' >> ~/.bash_profile
~~~


https://github.com/phpenv/phpenv は phpenv install --releases を実行しても、インストール可能なPHPリストが表示されず、動作しなかった。 問題の状況は、次のリンクの通りであった。 https://github.com/phpenv/phpenv/issues/43


そこで、上記のissues/43 の ワークアラウンドに従って、以下でやり直し

~~~
$ git clone git://github.com/madumlao/phpenv.git ~/.phpenv
~~~

~~~
$ git clone git://github.com/CHH/php-build.git $HOME/.phpenv/plugins/php-build
~~~

この結果、以下の様にリストが出る様になった。

~~~
imac:~ maho$ phpenv install -l
Available versions:
  5.2.17
  5.3.10
  5.3.11
  5.3.12
<省略>
~~~

PHP5.6 の最新版をインストールしようとしたら、また失敗

~~~
imac:~ maho$ phpenv install 5.6.30
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.30 into /Users/maho/.phpenv/versions/5.6.30
[Downloading]: https://secure.php.net/distributions/php-5.6.30.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.30

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: 3.0).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: jpeglib.h not found.
-----------------------------------------

The full Log is available at '/tmp/php-build.5.6.30.20170717214447.log'.
[Warn]: Aborting build.
imac:~ maho$ less /tmp/php-build.5.6.30.20170717214447.log
~~~

とりあえず、bisonのバージョンを上げてみる。

~~~
imac:~ maho$ bison --version
bison (GNU Bison) 2.3
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
imac:~ maho$ 
imac:~ maho$ brew install bison
==> Downloading https://homebrew.bintray.com/bottles/bison-3.0.4.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring bison-3.0.4.sierra.bottle.tar.gz
==> Using the sandbox
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local,
because some formulae require a newer version of bison.

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/bison/lib

==> Summary
🍺  /usr/local/Cellar/bison/3.0.4: 51 files, 2.1MB
~~~

~~~
imac:~ maho$ echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
~~~


それから、次のブログの内容を参考に、次の３つのライブラリを追加インストール
http://hamuhamu.hatenablog.jp/entry/2015/05/08/011241

~~~
imac:~ maho$ brew install libjpeg
~~~

~~~
imac:~ maho$ brew install libpng
~~~

~~~
imac:~ maho$ brew install libmcrypt
~~~

再度、以下のコマンドで、PHP 5.6.30 のインストールを実施

~~~
imac:~ maho$ phpenv install 5.6.30
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.30 into /Users/maho/.phpenv/versions/5.6.30
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-5.6.30.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.30
[Compiling]: /var/tmp/php-build/source/5.6.30
[xdebug]: Installing version 2.5.5
[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-2.5.5
[xdebug]: Installing xdebug configuration in /Users/maho/.phpenv/versions/5.6.30/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.6.30.20170717215820.log
[Success]: Built 5.6.30 successfully.
~~~
コンパイル成功


バージョン確認

~~~
imac:~ maho$ php -v
PHP 5.6.30 (cli) (built: Feb  7 2017 16:18:37) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
~~~

### 拡張モジュールの追加

phpenv install で phpのバージョンをインストールしたら、/var/tmp/php-build/source/ にそれぞれのバージョン毎に、フォルダーが作成されます。

~~~
imac:source maho$ ls
5.6.30		7.1.5		7.1.7		xdebug-2.5.5
~~~

それぞれのバージョンの下に、/var/tmp/php-build/source/7.1.7/ext に拡張モジュールのソースが置かれています。

例えば、mysql のモジュールをインストールする場合、phpize を使って configure を作成する。

~~~
imac:pdo_mysql maho$ phpize 
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
~~~

> phpize 拡張モジュールをビルドする低レベルなビルドツール。autoconfやautomake m4等ビルドツールが別途必要になる。これを使用することにより、PHPをソースから再コンパイルすることなく拡張モジュールをビルドすることができる。

次に configure を使ってモジュールを確認して、Makefile 生成する 

~~~
imac:pdo_mysql maho$ ./configure
~~~

コンパイル、インストールを実行します。

~~~
imac:pdo_mysql maho$ make
~~~
インストール先は、phpenv で呼び出される php のそれぞれのバージョンの拡張モジュールの場所になります。

~~~
imac:pdo_mysql maho$ make install
Installing shared extensions:     /Users/maho/.phpenv/versions/7.1.7/lib/php/extensions/no-debug-non-zts-20160303/
~~~



### PEARのインストール

後述のComposerを利用してpear ( https://packagist.org/packages/pear/pear )をインストールできる様ですが、ここでは、[Coolest Guides On The Planet Installing PEAR on OSX 10.11 El Capitan](https://coolestguidesontheplanet.com/installing-pear-on-osx-10-11-el-capitan/)を参考にインストールします。

後で解り易い様に、PHP関係のコマンドは、.phpenvインストールします。

~~~
$ curl -O  http://pear.php.net/go-pear.phar
~~~

~~~
$ php -d detect_unicode=0 go-pear.phar
~~~

~~~
1-12, 'all' or Enter to continue: 1
(Use $prefix as a shortcut for '/Users/maho/pear', etc.)
Installation base ($prefix) [/Users/maho/pear] : /Users/maho/.phpenv/pear
~~~


~~~
1-12, 'all' or Enter to continue: 
Beginning install...
Configuration written to /Users/maho/.pearrc...
<中略>
** The 'pear' command is not currently in your PATH, so you need to
** use '/Users/maho/.phpenv/pear/bin/pear' until you have added
** '/Users/maho/.phpenv/pear/bin' to your PATH environment variable.

Run it without parameters to see the available actions, try 'pear list'
to see what packages are installed, or 'pear help' for help.

For more information about PEAR, see:

  http://pear.php.net/faq.php
  http://pear.php.net/manual/

Thanks for using go-pear!
~~~

ログイン・シェルにパスを追加

~~~
export PATH="$HOME/.phpenv/pear/bin:$PATH"
~~~

PEAR動作確認

~~~
$ pear version
PEAR Version: 1.10.5
PHP Version: 5.6.30
Zend Engine Version: 2.6.0
Running on: Darwin imac.local 16.6.0 Darwin Kernel Version 16.6.0: Fri Apr 14 16:21:16 PDT 2017; root:xnu-3789.60.24~6/RELEASE_X86_64 x86_64
~~~

パッケージのリストを表示してみる。

~~~
imac:~ maho$ pear list-all
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
ALL PACKAGES [CHANNEL PEAR.PHP.NET]:
====================================
PACKAGE                                        LATEST     LOCAL
pear/Archive_Tar                               1.4.3      1.4.3  Tar file management class
pear/Archive_Zip                               0.1.2             Zip file archiving management class
pear/Auth                                      1.6.4             Creating an authentication system.
pear/Auth_HTTP                                 2.1.8             HTTP authentication
pear/Auth_PrefManager                          1.2.2             Preferences management class
pear/Auth_PrefManager2                         2.0.0dev1         Preferences management class
pear/Auth_RADIUS                               1.1.0             Wrapper Classes for the RADIUS PECL.
~~~


### Composer のインストール
PEARと同様に、後で解り易い様に、PHP関係のコマンドは、.phpenvインストールします。

~~~
imac:php maho$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.4.2) successfully installed to: /Users/maho/PHP/composer.phar
Use it: php composer.phar
~~~

~~~
$ mv composer.phar ~/.phpenv/bin/composer
~~~
動作確認します。

~~~
imac:~ maho$ composer -V
Composer version 1.4.2 2017-05-17 08:17:52
~~~

### Emacs の php-mode 設定

.emacs に、次のPHP-Modeが入っているリポジトリを追加します。

~~~file:.emacs
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)
~~~

emacs上で

~~~
M-x package-list-packages
~~~

php-mode を選択して、i, x でインストールします。



# Composer で Slim のアプリのテンプレート作成
簡単なSlimフレームワークのアプリのテンプレートを動かしてみます。 

~~~
$ composer create-project slim/slim-skeleton php-app
~~~

~~~
$ cd php-app
$ composer start
> php -S 0.0.0.0:8080 -t public public/index.php
~~~

これでブラウザからアクセスすると、次の様な画面が表示されます。

![スクリーンショット 2017-07-18 0.39.37.png](https://qiita-image-store.s3.amazonaws.com/0/42829/31e86046-0116-ccf5-61a7-92173989718a.png "スクリーンショット 2017-07-18 0.39.37.png")

# 感想
pyenv の設定に手間取りましたが、最も良く利用されているサーバー・サイドの言語だけあって、情報が豊富で素晴らしいですね。それに、composer はとっても便利です。 次は Bluemix にデプロイしたいと思います。