php.iniの設定値を自動テストするコマンドツール


`php.ini` の設定を確認するために、PHPUnitを使って自動テストできるコマンドツールを作ってみた。これで手順書+目視確認っていうアナログから脱出する。要件としては、phpunitが入っていること。

以下のファイルを `php-ini-check` という名前で `~/bin` などに保存して `chmod +x` する。

```php:php-ini-check
#!/usr/bin/env phpunit --colors --no-configuration
<?php

class PhpIniTest extends PHPUnit_Framework_TestCase
{
	public static function setUpBeforeClass()
	{
		echo sprintf('PHP Version: %s', PHP_VERSION), PHP_EOL;
	}

	/**
	 * @dataProvider dataForTestIni
	 */
	public function testIniDevelop($name, $expect, $message)
	{
		$actual = ini_get($name);

		if ( $actual === false ) {
			$this->markTestSkipped(sprintf("The configuration option doesn't exist: %s", $name));
		}

		$this->assertSame($expect, $actual, $message);
	}

	public static function dataForTestIni()
	{
		return array(
			array('expose_php', '', "Offにする。HTTPヘッダにPHPのバージョンを出す必要がない。"),
			array('display_errors', '1', "Onにする。(開発環境)"),
			array('log_errors', '1', "Onにすること。"),
			array('log_errors_max_len', '4096', "4096 = 目安"),
			array('error_log', '/var/log/php_error.log', "ログの場所を指定する。"),
			array('register_globals', '0', "Offにする。予期せぬセキュリティ的な問題や不具合の原因になる。"),
			array('register_long_arrays', '0', "Offにする。\$HTTP_GET_VARSなどは使わない。"),
			array('magic_quotes_gpc', '0', "Offにする。"),
			array('allow_url_include', '', "デフォルトでOff。必要に応じてプログラムでOnにする。"),
			array('default_charset', 'UTF-8', "UTF-8にする。"),
			array('mbstring.internal_encoding', 'UTF-8', "UTF-8にする。"),
			array('mbstring.language', 'Japanese', 'Japaneseにする。'),
			array('mbstring.substitute_character', 'none', "\"none\"にする。クォーテーションを忘れずに。"),
			array('date.timezone', 'Asia/Tokyo', "Asia/Tokyoをセットする。"),
			array('phar.readonly', '', "Offにする。(開発環境)"),
		);
	}
}
```

ところで、シェバンって `#!/usr/bin/env phpunit --colors --no-configuration` みたいな書き方できるのね。今まで `#!/usr/bin/env php` ぐらいしかやったことなかった。


インストールしたばっかりだとでるわでるわ

```
$ php-ini-check 
#!/usr/bin/env phpunit --colors --no-configuration
PHPUnit 3.6.10 by Sebastian Bergmann.

PHP Version: 5.3.10
FF.FFFFF.FFFF.F

Time: 0 seconds, Memory: 5.50Mb

There were 12 failures:

1) PhpIniTest::testIniDevelop with data set #0 ('expose_php', '', 'Offにする。HTTPヘッダにPHPのバージョンを出す必要がない。')
Offにする。HTTPヘッダにPHPのバージョンを出す必要がない。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-
+1

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

2) PhpIniTest::testIniDevelop with data set #1 ('display_errors', '1', 'Onにする。(開発環境)')
Onにする。(開発環境)
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-1
+

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

3) PhpIniTest::testIniDevelop with data set #3 ('log_errors_max_len', '4096', '4096 = 目安')
4096 = 目安
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-4096
+1024

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

4) PhpIniTest::testIniDevelop with data set #4 ('error_log', '/var/log/php_error.log', 'ログの場所を指定する。')
ログの場所を指定する。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-/var/log/php_error.log
+

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

5) PhpIniTest::testIniDevelop with data set #5 ('register_globals', '0', 'Offにする。予期せぬセキュリティ的な問題や不具合の原因になる。')
Offにする。予期せぬセキュリティ的な問題や不具合の原因になる。
Failed asserting that two strings are identical.

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

6) PhpIniTest::testIniDevelop with data set #6 ('register_long_arrays', '0', 'Offにする。$HTTP_GET_VARSなどは使わない。')
Offにする。$HTTP_GET_VARSなどは使わない。
Failed asserting that two strings are identical.

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

7) PhpIniTest::testIniDevelop with data set #7 ('magic_quotes_gpc', '0', 'Offにする。')
Offにする。
Failed asserting that two strings are identical.

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

8) PhpIniTest::testIniDevelop with data set #9 ('default_charset', 'UTF-8', 'UTF-8にする。')
UTF-8にする。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-UTF-8
+

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

9) PhpIniTest::testIniDevelop with data set #10 ('mbstring.internal_encoding', 'UTF-8', 'UTF-8にする。')
UTF-8にする。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-UTF-8
+

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

10) PhpIniTest::testIniDevelop with data set #11 ('mbstring.language', 'Japanese', 'Japaneseにする。')
Japaneseにする。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-Japanese
+neutral

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

11) PhpIniTest::testIniDevelop with data set #12 ('mbstring.substitute_character', 'none', '"none"にする。クォーテーションを忘れずに。')
"none"にする。クォーテーションを忘れずに。
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-none
+

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

12) PhpIniTest::testIniDevelop with data set #14 ('phar.readonly', '', 'Offにする。(開発環境)')
Offにする。(開発環境)
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-
+1

/Users/suin/Dropbox/Suin/Projects/Private/cli-tools/php-ini-check.php:22
/Users/suin/local/php/versions/5.3.10/bin/phpunit:46

FAILURES!
Tests: 15, Assertions: 15, Failures: 12.
```