PHP7の上で Zend Framework 2.5 を動かす

#結論が先#
ZendFramwork2.5をインストールしたら、`./zf2/vendor/`をまるっと
ZF2skeltonをインストールした`./ZendSkeletonApplication/`直下に配置（コピーか移動）`/public`直上これ大事。
http.conf の公開ポイントを
`DocumentRoot "/var/www/ZendSkeletonApplication/public"`の様に書き換え。
これだけでいける（はず。時間が無い人はこれでやってみて）。

…でも後日、もっとスマートにできることを知ったので「[PHP7の上で Zend Framework 2.5 を動かす②](http://qiita.com/mighty5/items/0737034e216a76c40195)」書きました。

#コトの顛末#
「ほぼすべてのPHPアプリを爆速にしてしまう」と噂のPHP7がリリース。それを機に、だったら最初からその上で動くアプリを開発したらすてきじゃないかなと思い立ちまして作業を開始。
で、『きっとこのリソースを有効活用できるフレームワークは"Zend Framework 2.5"に違いない』という思い込みでこの基盤を選択し環境を整え始めました。「グーグル先生を頼りに何とかなるっしょ！」なんて高をくくったのは甘い考えでした。

ググってもググっても有効な解が見つからず、苛立ちと挫けそうな自分との闘いの日々。
モチベーションは「いまどこにもドキュメント無いってことは僕が初アップじゃね？ムフッ」との色気から。とりあえずココを見に来てくれることになるだろうから。

でもさらに多くの日々を過ごし、ようやく「え？あ！こういうことだったのか〜 __orz__<(動くぞ...)」というところまでたどり着きました。

やっぱりコードはちゃんと読まなきゃ。`index.php`とか`init_autoloader.php`あたりじっくり読めばわかること。でもココに来られた方々はそんな暇なんてないから、ここにたどり着いたと思うのです。

それでこの記事はとりあえず動かすまでが目標。そしてのちの開発のヒントになればいいなって淡い期待を抱きながら、
目指すはココ！これを表示させるところまで。
<img width="1267" alt="ZendFramework2.5のオープニング" src="https://qiita-image-store.s3.amazonaws.com/0/38983/dc61db1f-e14e-5311-a85c-3e7cc4625773.png">
#インストール環境の準備#
__これらの環境の上に構築しました。__
MacOS X EI Capitan
Vagrant
VirtualBox
CentOS6.5
PHP7

「PHP7」ってところが気になるかもしれませんが、ZF2.5を動かすまではサポート範囲内のPHP5.xバージョンなら同じだと思います。またマシンはMacですが、VirtualBox上にCentOS6.5を載せて…なので、これらの記事は『CentOS6にZF2.5を載せて動かす記事』と読み替えていただいてよいと思います。

VagrantはVirtualBox拡張用の出し入れ自在でインテリジェントなカラーボックスみたいなもんですね。
[vagrant で centosを使ってみる](http://qiita.com/FSMS/items/115378b2fd160e52e4ce) を参考にしてください。

続いてPHP7。この上で動かせるなら爆速アプリに生まれ変われるっていわれているPHP7、これがリリースされるのを心待ちにしておりました。親切な方のこんな記事を参考にインストル。

[簡単！CentOS 7.1にPHP7.0をさくっとyum installする方法](http://dqn.sakusakutto.jp/2015/12/centos7_yum_install_php70.html)
 ←わたしの環境では、ApacheでPHPが動いてくれませんでした（構成も深い階層に入っている）。
なので、確実に動いてくれてPHPの構成もこれまでと同じようになってくれる、[VagrantにCentOS7&PHP7のLAMP環境を構築する](https://www.unionnet.jp/blog/php7/) がいいでしょうね。MySQLとPHPMyAdmin入りです。


composerでのインストールで必須なエクステンションを入れましょう

```apache:PHPExtension
sudo yum --enablerepo=epel,remi,remi-php70 install php70-php-xml php70-php-xmlrpc
```
xmlrpcはいらないか。

もし既にPHP5.xが入っていて入れ替えたいならPHP5.xの諸々を全部アンインストールしないと動かないかも。
このあたり参考に頑張ってみてください。 [CentOS6のPHP5.3をPHP5.4に入れ替える](http://qiita.com/pakiln/items/e3351ade2bb5aeb198dc)

#Zend Framework 2.5 を入れる前準備#
英語ドキュメントしかありませんが、頑張って読んでみると『2.5以降は_composer_でインストールしてね。downloadファイル一式は用意しないからね』というのが読み取れます。いよいよcomposerをPHP管理のスタンダードにするとZend社は決めたみたいですね。

##Composer必須##
ということで、ZF2.5以降を使用したければComposerを使えなきゃダメってことになりました。
[composerインストール](https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/01-basic-usage.html)

##Gitは入れておいた方がいいよ##
composer.jsonと周辺環境がGitHubで提供されています。既にZF2から動作ポイントの構造一式はスケルトンとして提供されていますから馴染み深いと思います。
ダウンロードしてファイルを展開するのでも良いと思います（が、パーミッションにハマらないでね）。
ようやくGit使い慣れた僕はせっかくなのでgitをインストールしてこれを経由させることにしました。
[Gitのインストール](https://git-scm.com/book/ja/v1/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB#Linuxにインストール)

#さぁZend Framework 2.5 を入れよう#
ZF2.5はcomposer経由でインストールすることになってました。
そのためには、comopser.jsonファイルを作成しなければならないのですが、正しい作り方はまた別の記事に譲るとして、確実に手っ取り早くやるにはやはりZend社のGitHubリポジトリでしょってことで探したらありました。
[ZF2リポジトリ](https://github.com/zendframework/zf2)
ザッと中身を確認すると、フレームワークの本体はやはり無いみたいで、composerを実行するといけるように環境を整えたもの用意しましたという感じです。

では、それぞれのお好みの方法でファイルを展開しましょう。この記事ではGitを使って整えます。
ある人は`Download ZIP`からファイルを取得してアップロードという方もいらっしゃることでしょう。でもGit、超便利。[いまさら聞けないgitの使い方](http://qiita.com/mountcedar/items/682743c95fd3b8fc274b#http-https%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88)
これに従ってやるなら、zf2のリポジトリ画面の中央辺りにhttpsでクリップボードにコピーしてくれそうなボタンがあるのでクリック。そしてコマンドラインに

```apache:
git clone https://github.com/zendframework/zf2.git
```
と打ち込んで実行。しばらくすると実行したディレクトリに`/zf2`ディレクトリが追加されます。作業ディレクトリ`zf2`に移しましょう。

```apache:
cd zf2
```


続いて、先ほどインストールしておいたコンポーザーを実行してインストールしますが、たぶんpathが通っていないところに入れてしまっていると思うので、展開した`zf2`ディレクトリ直下にコピーしましょう。

```apache:./zf2/直下で実行
sudo cp /(インストールしたディレクトリpath)/composer.phar composer.phar
```
さぁいよいよですよ。

```apache:zendframework2.5インストール
sudo php composer.phar install
```
これでZendFramework2.5がインストールできました。
中身を確認すると以前と構成がぜんぜん違うことに気づかれると思います。どうも`vendor`の中に集約したみたいですね。
この`vendor`あとで使います。

##公開ディレクトリを用意##

続いて、ZF2スケルトンを入れて公開ポイントを用意しましょう。

それぞれのお好みの環境があると思いますが、今回はCentOS6.5ではデフォルトでApach2.2が動きますので、そこの公開ディレクトリの近くに配置します（理由は後述するhttpd.confの書き換えとか他の設定が面倒だったから）。

[ZF2スケルトン](https://github.com/zendframework/ZendSkeletonApplication)

```apache:/var/www/直下に移動しzf2スケルトンをインストール
cd /var/www
git clone https://github.com/zendframework/ZendSkeletonApplication.git
```
これでスケルトンがインストールできました。
これを動くようにします。

##ZF2.5を動かす##
ZendFramework2.5の本体から`vendor`ディレクトリをまるっとコピーしてきます。
まず作業ディレクトリを公開ポイントとなる`public`**直上**に移動。デフォルトでは`ZendSkeletonApplication`内にインストールされているので、作業ディレクトリをその中に移動させましょう。

```apache:
cp /var/www/ZendSkeletonApplication
ls -l
```
`public`ありますか？パーミッションは適切ですか？では今いるこの階層にZF2.5本体が一式入っている`vendor`をコピーして持ってきましょう。

```apache:
sudo cp -r /(ZF2.5をインストールしたディレクトリまでのpath)/zf2/vendor vendor
```
え？若干荒業ですか？他にいい方法があったら是非コメントでご指摘下さいm(__)m
ただこうすれば、`index.php`も`init_autoloader.php`も無傷で動かせるはず。

これで環境は整いました。最後は`httpd.conf`をZF2スケルトンの`public`を公開ディレクトリになるように調整しましょう。

```apache:httpd.conf
sudo vi /etc/httpd/conf/httpd.conf
```
ここに以下の行を追加。前のをコメントアウト忘れずに。

```apache:vi
DocumentRoot "/var/www/ZendSkeletonApplication/public"
```
保存したら`httpd`の再起動。

```apache:httpd再起動
sudo service httpd restart
```

ではブラウザでアクセスしてみましょう。IPアドレスはそれぞれ設定した環境に合わせて入力。
いかがですか？見られましたか？
こういう感じでとりあえずは動かせました。

この記事はZendFramework2.5系の最初の記事みたいなので、これを皮切りに色々と他の皆さんの知識がわーっと上がってきてもっと良い感じになってくれればと願っております。
そういうわけで、色々とご意見あると思いますので、コメントくだされば幸いです。