PHP の設定が不明な時に叩いたコマンドたち

Homestead で導入された UbuntuPHP の設定がわからない時に叩いたコマンドなど。

はじめに

phpunit が失敗する。

$ phpunit --colors=always --coverage-html 
PHPUnit 5.7.23 by Sebastian Bergmann and contributors.

Error:         No code coverage driver is available

環境

Homestead v6.5.0

PHP のバージョン

$ php --version
PHP 7.0.24-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 28 2017 16:20:59) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.24-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
    with blackfire v1.18.0~linux-x64-non_zts70, https://blackfire.io, by SensioLabs

PHP の場所

$ which php
/usr/bin/php

複数のバージョンが入っていそうだったので本当にそれか確認

$ ls -al /usr/bin | grep php
lrwxrwxrwx  1 root   root          21 Oct 16 12:39 php -> /etc/alternatives/php
-rwxr-xr-x  1 root   root     4488224 Sep 28 19:33 php5.6
-rwxr-xr-x  1 root   root     4434992 Sep 28 17:01 php7.0
-rwxr-xr-x  1 root   root     4571168 Sep 29 17:48 php7.1
-rwxr-xr-x  1 root   root     4859104 Sep 28 17:19 php7.2

/etc/alternatives の先にいるらしい。

$ ls -al /etc/alternatives | grep php
lrwxrwxrwx   1 root root    15 Nov 26 13:36 php -> /usr/bin/php7.0

やっと/usr/bin/php7.0が参照されていることがわかった。

alternatives で参照される PHP を切り替える

ググってみると、alternativesという仕組みを使うと、複数のバージョン(PHPとかRuby)を切り替えて使えるそうな。

で、phpコマンドで呼ばれるPHPを切り替えるには、次のコマンドを実行する。

$ sudo update-alternatives --config php
There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
* 2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode

Press <enter> to keep the current choice[*], or type selection number:

よしなに選択。執筆時点(2017/11/26)では Homestead で指定される PHP は 7.1 だった。 たまたま 7.0 で動かしたかったので、ここで切り替えた(上記結果は切り替えた後)。

php.ini の場所

$ php --ini
Configuration File (php.ini) Path: /etc/php/7.0/cli
Loaded Configuration File:         /etc/php/7.0/cli/php.ini
Scan for additional .ini files in: /etc/php/7.0/cli/conf.d
Additional .ini files parsed:      /etc/php/7.0/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.0/cli/conf.d/10-opcache.ini,
/etc/php/7.0/cli/conf.d/10-pdo.ini,
/etc/php/7.0/cli/conf.d/15-xml.ini,
/etc/php/7.0/cli/conf.d/20-bcmath.ini,
/etc/php/7.0/cli/conf.d/20-calendar.ini,
/etc/php/7.0/cli/conf.d/20-ctype.ini,
/etc/php/7.0/cli/conf.d/20-curl.ini,
/etc/php/7.0/cli/conf.d/20-dom.ini,
/etc/php/7.0/cli/conf.d/20-exif.ini,
/etc/php/7.0/cli/conf.d/20-fileinfo.ini,
/etc/php/7.0/cli/conf.d/20-ftp.ini,
/etc/php/7.0/cli/conf.d/20-gd.ini,
/etc/php/7.0/cli/conf.d/20-gettext.ini,
/etc/php/7.0/cli/conf.d/20-iconv.ini,
/etc/php/7.0/cli/conf.d/20-igbinary.ini,
/etc/php/7.0/cli/conf.d/20-imap.ini,
/etc/php/7.0/cli/conf.d/20-intl.ini,
/etc/php/7.0/cli/conf.d/20-json.ini,
/etc/php/7.0/cli/conf.d/20-mbstring.ini,
/etc/php/7.0/cli/conf.d/20-msgpack.ini,
/etc/php/7.0/cli/conf.d/20-mysqli.ini,
/etc/php/7.0/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.0/cli/conf.d/20-pdo_pgsql.ini,
/etc/php/7.0/cli/conf.d/20-pdo_sqlite.ini,
/etc/php/7.0/cli/conf.d/20-pgsql.ini,
/etc/php/7.0/cli/conf.d/20-phar.ini,
/etc/php/7.0/cli/conf.d/20-posix.ini,
/etc/php/7.0/cli/conf.d/20-readline.ini,
/etc/php/7.0/cli/conf.d/20-shmop.ini,
/etc/php/7.0/cli/conf.d/20-simplexml.ini,
/etc/php/7.0/cli/conf.d/20-soap.ini,
/etc/php/7.0/cli/conf.d/20-sockets.ini,
/etc/php/7.0/cli/conf.d/20-sqlite3.ini,
/etc/php/7.0/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.0/cli/conf.d/20-sysvsem.ini,
/etc/php/7.0/cli/conf.d/20-sysvshm.ini,
/etc/php/7.0/cli/conf.d/20-tokenizer.ini,
/etc/php/7.0/cli/conf.d/20-wddx.ini,
/etc/php/7.0/cli/conf.d/20-xdebug.ini,
/etc/php/7.0/cli/conf.d/20-xmlreader.ini,
/etc/php/7.0/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.0/cli/conf.d/20-xsl.ini,
/etc/php/7.0/cli/conf.d/20-zip.ini,
/etc/php/7.0/cli/conf.d/25-memcached.ini,
/etc/php/7.0/cli/conf.d/90-blackfire.ini

xdebug を使いたい

上の php --inixdebug.ini が呼ばれていなくてどうやら使えなかったのだけど、fpmにはいたので、 コピーしてきた(正しいかどうかはよくわからないけど・・・)

sudo cp /etc/php/7.0/fpm/conf.d/20-xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini

おわりに

無事に phpunit が実行できた。