PHP

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

More than 1 year has passed since last update.

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

PHPスクリプト言語の情報

PHPリポジトリ

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

PHP依存管理ツール

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

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

PHPを扱えるエディタ

PHPのフレームワーク

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

スクリーンショット 2017-07-17 20.53.08.png

PHP REST フレームワーク

PHP API Framework: 10 BEST for REST API Development in PHPのトップ3は以下の様である。

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



-----------------
|  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

それから、次のブログの内容を参考に、次の3つのライブラリを追加インストール
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


[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]: 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を参考にインストールします。

後で解り易い様に、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が入っているリポジトリを追加します。

.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

感想

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