パーフェクトPHPで環境構築

[パーフェクトPHP](https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88PHP-PERFECT-3-%E5%B0%8F%E5%B7%9D-%E9%9B%84%E5%A4%A7/dp/4774144371)のPart1の環境構築で, いろいろ情報が古いため, 引っかかったので, まとめた.

パーフェクトPHPは, 初版 第7刷発行を参照している.

# 自分の環境

edition: windows 10 pro
version: 1709
OS build: 16299.492

WSLを使って, Ubuntuを立ち上げてました.

VERSION="18.04 LTS (Bionic Beaver)" 

# 環境構築

## インストール

本には, 

> DebianやUbuntuなどではaptitudeコマンドからインストールします.

と書いてあります. 

しかし, 新しめのUbuntuでは, `aptitude` はデフォルトで入っておらず, パッケージ管理には, `apt`が最も推奨されていますと, Debian管理者ハンドブックにも書かれています.

[Debian 管理者ハンドブック 6.2](https://debian-handbook.info/browse/ja-JP/stable/sect.apt-get.html)

なので, `aptitude`コマンドではなく, `apt`コマンドを使いましょう.

本では,

> $ sudo aptitude install php5 php-pear php5-dev php5-mysql

> $ sudo aptitude install mysql-server-5.1

と書いてありますが, Ubuntu16.04以降では, `php5` は入れられません.

askUbuntuのスレッドで, 

> If you want to stay with php5, you will need to stay at Ubuntu 14.04 LTS

php5を使いたいならば, Ubuntu14.04を使わなければいけないと書いてあります.

[Can't install php5 on Ubuntu 16.04](https://askubuntu.com/questions/756879/cant-install-php5-on-ubuntu-16-04)参照(英語情報)

mysql-serverのバージョンも 5.1ではなく5.7が最新です(記事執筆時).

なので, 本の代わりに, 以下のコマンドでインストールしましょう.

```
$ sudo apt install php7.0 php-pear php-dev php-mysql
$ sudo apt apt install mysql-server-5.7
```


その都度, 最新版をインストールすればいいと思います.

本では, このインストールが終わると, `apache2`と`mysql`を起動する話になります.

しかし, WSLのubuntuには, defaultで `apache2`が入っていないので, それもインストールしておきましょう.

```
$ sudo apt install apache2
```

## apache2とmysqlを起動

本では,

> $ sudo /etc/init.d/apache2 start

> $ sudo /etc/init.d/mysql start

と書かれています.

起動する際は, `/etc/init.d`を使ってもいいが, 

今は, そのラッパーである`service`コマンドを使ったほうが良いとされる.

```
$ sudo service apache2 start
$ sudo service mysql start
```

`[Wed Jun 27 10:49:42.446481 2018] [core:warn] [pid 23737:tid 140369359735744] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT `

というエラーっぽいのが, 出力されますが, 一応, apache2は起動しているので無視して大丈夫かと思います.

```
$ service apache2 status
```

で起動しているか, 確認できます.

またwindows側のブラウザで, `127.0.0.1`にアクセスすれば, apacheの以下のサイトが表示されます.

![image.png](https://qiita-image-store.s3.amazonaws.com/0/265970/56e2de19-c89a-2e12-c397-3ed6674e5476.png)

mysqlもきちんと起動しているか, 確認してみると,

```
$ sudo service mysql status
 * /usr/bin/mysqladmin  Ver 8.42 Distrib 5.7.22, for Linux on x86_64
 * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 * Oracle is a registered trademark of Oracle Corporation and/or its
 * affiliates. Other names may be trademarks of their respective
 * owners.
 * Server version          5.7.22-0ubuntu18.04.1 
 * Protocol version        10
 * Connection              Localhost via UNIX socket
 * UNIX socket             /var/run/mysqld/mysqld.sock
 * Uptime:                 2 min 18 sec
 * Threads: 1  Questions: 8  Slow queries: 0  Opens: 107  Flush tables: 1  Open tables: 26
 * Queries per second avg: 0.057
```

きちんと動いていることが確認できます.

## ドキュメントルートの設定

まず, ドキュメントルートのためのディレクトリを作ります.

本に倣って, `/var/www/study.localhost`のディレクトリを作りましょう.

```
sudo mkdir /var/www/study.localhost
sudo chown $USER:$USER /var/www/study.localhost
```

Linux環境では, `$USER`にユーザー名が入っているので, 上のように作れば大丈夫です.

## バーチャルホストの設定

Apache側で, バーチャルホストの設定をします.

本では,

> `/etc/apache2/sites-available/study.localhost`を作成し, 次の設定を記述してください. 

と書いてあります.

この通りにやると, このあと叩く`a2ensite`コマンドでエラーが起こります.

```
$ sudo a2ensite study.localhost
ERROR: Site study.localhost does not exist!`
```

これは, `/etc/apache2/sites-available/study.localhost`名に`.conf`をつけないといけません.

つまり, `/etc/apache2/sites-available/study.localhost.conf`としなければいけません.

`a2ensite`コマンドは, perlスクリプトで書かれているので, なぜかは読めばわかると思います.

`type a2ensite`で, ファイル名の場所を探せば読めます.

名前を変えて, 以下の内容を書けば, okです.

```
<VirtualHost *:80>
    ServerName study.localhsot
    DocumentRoot /var/www/study.localhsot
    DirectoryIndex index.php index.html
    <Directory "/var/www/study.localhost">
        AllowOverride All
        Allow from All
    </Directory> 
</VirtualHost>   
```

次に, この設定ファイルを適用するのですが, 本で葉, 以下のように書かれています.

```
>$ sudo a2ensite study.localhost
>$ sudo a2dissite default
```

しかし, `sudo a2sisite default` は動きません.

tab補完で`000-default.conf`をdisableにすればいいと思います.

```
$ sudo a2dissite 000-default.conf
```

最後に, mysqlとapacheを再起動します.

ここでも`init.d`を使っているので, 代わりに, `service`を使いましょう.

```
$ sudo service apache2 reload
$ sudo service mysql reload
```

これで完了です.