Composer で Monolog のインストール
公開日:2019-07-05
更新日:2020-07-21
更新日:2020-07-21
1. 概要
PHP用ロギングライブラリの Monolog を Composer で インストールします。
Composer でインストールできるライブラリは、https://packagist.org/ で検索できます。
Composer でインストールできるライブラリは、https://packagist.org/ で検索できます。
2. インストール
以下を実行します。
composer の使い方に慣れたら、root 以外で実行するようにしてください。
インストールが完了すると、以下のフォルダ構成となります。
Composer でインストールしたパッケージを使う場合、 最初に vendor/autoload.php を読み込みます。
あとは使いたいクラスを use を使って指定するだけです。
autoload.php により自動的に読み込まれるため、require などで読み込む必要はありません。
補足1. パッケージのアップデート
補足2. 他の環境に同じパッケージのインストール
composer.json をコピーして以下を実行すると、composer.json で指定されたパッケージがインストールされます。
cd /var/www/html
mkdir test_app
cd test_app
composer require monolog/monolog
composer を使う場合は、root ユーザ以外で実行することが推奨されています。composer の使い方に慣れたら、root 以外で実行するようにしてください。
インストールが完了すると、以下のフォルダ構成となります。
/var/www/html/test_app
├─ composer.json
├─ composer.lock
└ vendor
├─ composer
├─ monolog
├─ psr
└─ autoload.php
Composer でインストールしたパッケージを使う場合、 最初に vendor/autoload.php を読み込みます。
あとは使いたいクラスを use を使って指定するだけです。
autoload.php により自動的に読み込まれるため、require などで読み込む必要はありません。
補足1. パッケージのアップデート
全体
composer update
個別
composer update monolog/monolog
補足2. 他の環境に同じパッケージのインストール
composer.json をコピーして以下を実行すると、composer.json で指定されたパッケージがインストールされます。
composer install
3. テストプログラムの作成と実行
vi test.php
http://192.168.233.100/test_app/test.php にアクセスします。
以下のエラーが発生します。
上の階層に戻ってファイル一覧を表示します。
test_app ディレクトリは、
これは、root ユーザはフルアクセス、root グループとその他ユーザーは、書き込み不可を意味します。
PHP を動かす httpd は、apache ユーザで動いています。
そのため、現在の設定では、書き込み不可でエラーとなります。
/var/www/html 配下の所有者を、全て apache ユーザに変更して、フルアクセスできるようにします。
再度 http://192.168.233.100/test_app/test.php にアクセスします。
まだエラーが出ます。
これは SELinux によるもので、httpd で書き込みできるようにするには、書き込み可能にするラベルを付ける必要があります。
ラベルを付けます。
以下でラベルを確認できます。
再度 http://192.168.233.100/test_app/test.php にアクセスすると、
test_app 配下に test.log が出力されます。
<?php
require_once 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('test');
$stream = new StreamHandler('test.log');
$logger->pushHandler($stream);
$logger->debug('debug');
?>
OK
http://192.168.233.100/test_app/test.php にアクセスします。
以下のエラーが発生します。
Fatal error: Uncaught UnexpectedValueException: The stream or file "test.log" could not be opened:
failed to open stream: Permission denied
in /var/www/html/test_app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
Stack trace: #0 /var/www/html/test_app/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(39):
Monolog\Handler\StreamHandler->write(Array) #1 /var/www/html/test_app/vendor/monolog/monolog/src/Monolog/Logger.php(344):
Monolog\Handler\AbstractProcessingHandler->handle(Array) #2 /var/www/html/test_app/vendor/monolog/monolog/src/Monolog/Logger.php(623):
Monolog\Logger->addRecord(100, 'debug', Array) #3 /var/www/html/test_app/test.php(10):
Monolog\Logger->debug('debug') #4 {main} thrown in /var/www/html/test_app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107
上の階層に戻ってファイル一覧を表示します。
cd /var/www/html
ll
test_app ディレクトリは、
drwxr-xr-x. 3 root root
となっています。これは、root ユーザはフルアクセス、root グループとその他ユーザーは、書き込み不可を意味します。
PHP を動かす httpd は、apache ユーザで動いています。
そのため、現在の設定では、書き込み不可でエラーとなります。
/var/www/html 配下の所有者を、全て apache ユーザに変更して、フルアクセスできるようにします。
chown -R apache:apache /var/www/html
再度 http://192.168.233.100/test_app/test.php にアクセスします。
まだエラーが出ます。
これは SELinux によるもので、httpd で書き込みできるようにするには、書き込み可能にするラベルを付ける必要があります。
ラベルを付けます。
chcon -R -t httpd_sys_rw_content_t /var/www/html
以下でラベルを確認できます。
ls -alZ /var/www/html
再度 http://192.168.233.100/test_app/test.php にアクセスすると、
test_app 配下に test.log が出力されます。
4. 補足
4.1 書き込み権限の付与
上記ではファイルの所有者を apache ユーザーに変更して書き込めるようにしていますが、
その他ユーザをフルアクセスしたり、root グループに apache ユーザーを追加して root グループをフルアクセスにしても書き込めるようになります。
但し、どちらも apache 以外のユーザーでフルアクセスできてしまうため、セキュリティー的には良くありません。
その他ユーザをフルアクセスにする
root グループに apache ユーザーを追加して、root グループをフルアクセスにする
また、グループにユーザーの追加・削除を行った場合、念のため再起動してください。
但し、どちらも apache 以外のユーザーでフルアクセスできてしまうため、セキュリティー的には良くありません。
その他ユーザをフルアクセスにする
chmod -R 757 /var/www/html
r:4:読み込み
w:2:書き込み
x:1:実行
権限(上記の 757 の部分)は、所有者、グループ、その他ユーザーの順で指定します。
root グループに apache ユーザーを追加して、root グループをフルアクセスにする
root グループに apache ユーザーを追加
usermod -aG root apache
root グループをフルアクセスにする
chmod -R 775 /var/www/html
グループの確認
cat /etc/group
root グループから apache ユーザーを削除
gpasswd -d apache root
apache ユーザー が root グループに入っている場合、
その他ユーザーを書き込み可にしても、apache ユーザーでは書き込み不可となります。また、グループにユーザーの追加・削除を行った場合、念のため再起動してください。
4.2 PHP を動かすユーザーについて
PHP を動かす httpd は、root ではなく、apache ユーザで動いています。
以下でプロセス毎のユーザーを確認できます。
以下でプロセス毎のユーザーを確認できます。
ps -aux | grep apache

