見出し画像

PHP8.2とデバック環境(ログ設定、リモートデバック)

前回までの紹介でPHP8.2が動作する環境になりましたので、今回は、検証時やトラブル時のログ出力設定と、実際の業務アプリ開発時のリモートデバック環境について紹介します。
まずは、PHPのログ出力です。PHPでは、ソース上にerror_log(出力したい文字列情報);と記述することで、簡単にログを出力できます。出力先は、PHP8.2の場合、FPMモードで動作しているので、以下の環境ファイルを修正して、して場所に出力するようにします。
/etc/php-fpm.d/www.confです。
編集前に、元のファイルをコピーして保存しておきます。
cp www.conf www.conf.org
編集した内容は、

[root@webixserver01 php-fpm.d]# diff www.conf www.conf.org
423c423
< php_admin_value[error_log] = /var/log/php_error.log
---
> php_admin_value[error_log] = /var/log/php-fpm/www-error.log
425c425
< ;php_admin_value[memory_limit] = 4096M
---
> ;php_admin_value[memory_limit] = 128M

です。使用メモリの最大値も設定しました。
ログは、/var/log/php_error.logに出力される設定です。
変更後に、webサーバの再起動をします。

[root@webixserver01 php-fpm.d]# systemctl restart httpd
[root@webixserver01 php-fpm.d]# systemctl restart php-fpm.service

実際にPHPソースを実行してログが出るか確認してみます。
もし、/var/log/php_error.logが作成されない場合は、
# touch php_error.logで作成し、chmod apache:apache php_error.logで所有者を変更します。
再度、PHPを動かしてログ出力が出るか確認してみてください。
ZTEST_get_users.phpをブラウザから読みだしたときのログです。数回実行しているので、同じようなログが表示されています。

[root@webixserver01 log]# tail -f php_error.log
[18-Mar-2024 14:53:03 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php
[18-Mar-2024 14:53:30 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php
[18-Mar-2024 14:54:07 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php
[18-Mar-2024 15:30:40 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php
[18-Mar-2024 15:30:50 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php
[18-Mar-2024 15:35:10 Asia/Tokyo] userid=sunsuni, ZTEST_get_users.php: start ZTEST_get_users.php

ZTEST_get_users.phpのソースは、以下のとおりです。
ソースの途中まで記載していますが、最後の行でログ出力して上記のログとなります。

<?php
    //ZTEST_get_users.php
    $FUNC_INFO = "ZTEST";
    $VER_INFO ="V01L01";
    $myfilename = basename(__FILE__);   //自分自身のファイル名取得
    $userid = '';
    $logheader = 'userid='.$userid.', '.$myfilename.':';//ログ出力時のヘッダー情報(自ファイル名,ログインIDを付与)

    if($_SERVER["REQUEST_METHOD"] != "GET"){
      //GET以外ははじく
      header("HTTP/1.0 404 Not Found");
      return;
    }

    if(isset($_GET['userid'])){
        $userid = $_GET['userid'];
    }
    $logheader = 'userid='.$userid.', '.$myfilename.':';//ログ出力時のヘッダー情報(自ファイル名,ログインIDを付与)
    
    //
    //メインルーチン
    //
    error_log($logheader.' start ZTEST_get_users.php');
    

デバック環境では、ログを一般ユーザで参照したいケースが多く(tail -f php_error.log )、一般ユーザでも参照できるようにログファイルの権限変更をしています。

次に、パソコンからサーバに接続してリモートデバックする方法です。
サーバでは、Xdebugを動かし、パソコン上では、PHPStormを動かします。
PHPStormは有料パッケージですが、リモートデバック環境を簡単に構築するには、使い易いパッケージです。トライアル版やEAPパッケージもあるので、事前に動作確認も可能です。今回も紹介では、EAPパッケージを使っています。(EAPパッケージは、次版の検証用パッケージです。新リリース前の検証用なので、不具合もある可能性がありますが、通常は使えます。期限は、該当版数がリリースされるまでなので、いつも同じとは限りません)
本気で開発をしていくなら、リモートデバック環境を構築することで、短時間に品質の高いアプリ開発に有効です。ぜひ検討してみてください。
PHPStormインストール後にリモートデバック用の環境設定がPC側とサーバ側(/etc/php.ini)に必要です。
PC側は、ssh接続、sftp接続の設定とサーバ情報やマッピング情報設定など
接続用のポート番号は、/etc/php.iniの記載と合わせる必要があります。今回の例では、9001にしています。
また。ブラウザにもデバックモードを有効にするプログインのインストールとキーワード設定が必要です。(Xdebug helper)
参考までに、php.iniの記載内容を紹介します。IPアドレスは、実行環境に応じて変更してください。

[xdebug]
zend_extension=/usr/lib64/php/modules/xdebug.so

xdebug.remote_enable=1
xdebug.remote_host=192.168.13.22
xdebug.remote_port=9001
xdebug.client_host = 192.168.13.0
xdebug.discover_client_host=yes
xdebug.client_port = 9001
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
xdebug.max_nesting_level=1000
xdebug.idekey = "phpstorm"  ; PhpStorm 側で指定する IDE の識別子
xdebug.remote_connect_back = 1
xdebug.remote_autostart=1
xdebug.start_with_request = yes
xdebug.remote_handler=dbgp
xdebug.mode=debug
xdebug.log = "/tmp/xdebug.log"
xdebug.remote_connect_back=1
debug.start_with_request = yes
xdebug.start_with_request = trigger

実際にデバックでブレイクしたときに内部変数の情報を確認している画面です。
赤いマーク部分で中断し、そのときの変数情報を画面に表示しています。


処理途中で、ブレイクできることや、簡単に構造を持った配列の値を確認できる点が、ログ出力だけの環境より、検証しやすく、一度使い始めると必要な機能になってきます。
デバックでブレイクしても、他のユーザのリクエストは実行できるのもいいですね。
補足 ブレイクをしたままにすると、ブラウザ側でタイムアウトとなります。時間変更は、環境設定で変更可能です。

この記事が気に入ったらサポートをしてみませんか?