「ま、とりあえず」と書き始めたPHPスクリプトがそのまま本番投入されてしまうことは少なくありません。。。後から、「環境変数とかログ出力とかちゃんとしとけば良かった」と後悔することが多いので、最低限のセットアップ方法をメモ。
##前提
どちらもcomposer使ってインストールするのでcomposerはインストールしておいて下さい。
##インストール?
###.env
composer require vlucas/phpdotenv
###monolog
composer require monolog/monolog
##利用
少しめんどくさいが、後の手間を考えると我慢できる範囲。
<?php
//require
require_once __DIR__.'/vendor/autoload.php';
//for .env
use Dotenv\Dotenv;
$dotenv = new Dotenv(__DIR__);
$dotenv->load(); //.envが無いとエラーになる
//for monolog
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
//ログにつくprefixを与えてインスタンス作成
$log = new Logger('MONOLOG_TEST');
//ログレベルをDEBUG(最も低い)に設定
$handler = new StreamHandler('./app.log',Logger::DEBUG);
$log->pushHandler($handler);
//利用 ///////////////////////////////////
//.env
//変数名が他の環境変数と被らないように注意
$name = getenv('TEST_NAME');
echo $name;
//monolog
$log->addDebug('でばっぐ');
$log->addInfo('いんふぉ');
$log->addWarning('わーにんぐ');
$log->addError('えらー');
$dotenv = new Dotenv(__DIR__);
としているので、PHPファイルと同じディレクトリに.evnを作成し、
TEST_NAME=hoge
等としておく。
##その他
###.envを.gitignoreに書いておく
通常.envはリモートに上がると良くないのでgitを使う場合は.envを.gitignoreに書いておく。
###オレオレClassもautoloadできるようにしておく
せっかくツール類をautoloadしているのに自作のクラスは別途requireなんてダサいことはしたくありません。
ここでは、カレントディレクトリにClassesというクラスを保持用のフォルダを作成し、Sampleというnamespaceをマップしてみます。
composer.jsonにautoloadの記述を追加する。
{
"require": {
"vlucas/phpdotenv": "^2.2",
"monolog/monolog": "^1.19"
},
"autoload": {
"psr-4": {
"Sample\\" : "Classes/"
}
}
}
autoloadを追加したら、ターミナルでcomposerを更新する
$ composer dump-autoload
###サンプルのクラスを作成し、namespaceを記述する
<?php
namespace Sample;
class sampleClass{
public function Hello()
{
echo "Hello Sample\n";
}
}
###メインファイルから利用する
<?php
//require
require_once __DIR__.'/vendor/autoload.php';
//他のコード割愛
//use
use Sample\sampleClass;
$sc = new sampleClass;
$sc->Hello();