朝活LINE Botを実装していたとき、DBへインサートできない不具合発生しました。このエラー内容を表示し、解決した方法をご説明します。
LINE Botはエラー等の出力がされないので、こういった方法を参考に開発を進めてみると良いと思います!
#開発環境
言語:PHP7.4
フレームワーク:Laravel5.5
データベース管理システム:MySQL8.0
サーバー:ConoHa VPS
#変数の中身を確認
たくさんの変数を用いてコードを書くと思いますが、デバッグ時には変数の中身が意図したものになっていることを確認することが重要です。
ここでは、変数の中身をテキストファイルへ出力する方法を説明します。
####①ログを書き込むファイルを作成
以下のコマンドで新規ファイルを作成します。
touch ファイル名
または
vi ファイル名
:wq
としてファイルを作成します。
ファイルはテキストファイルになるので、拡張子は「.txt」にしておきます。
このとき、
#####ファイルの絶対パス
をメモしておいてください。後々使用します。
####②作成したファイルのパーミッションを変更
ログを書き込むことができるように、以下のコマンドでパーミッションを変更してください。
chmod 777 ファイル名
####③変数を出力するコードを追記
以下のコードをLINE Botの処理を行っているコントローラ等に追記してください。
error_log(print_r($result, true) . "\n", 3, 'ログファイルへの絶対パス');
//$resultのところには、表示したい変数名を入れる
これによって$resultの中身がファイルへ出力されます。
LINE Botを動かしてみてください。
error_logやprint_rに関する説明は以下をご覧ください。
PHP : error_log - Manual
PHP : print_r - Manual
####④ファイルへの出力結果確認
コンソール画面で以下のコマンドを実行すると、リアルタイムでファイルへの出力が確認できます。
別タブを開いてやってみるといいかもしれません。
tail -f ファイル名
control + c で処理を停止します。
この方法を使って変数の中身が想定通りになっているかを調べることができます。
想定と異なる部分があれば、その周辺にエラー発生要因が存在している可能性が高いです。
エラー発生部位が特定できたら、次の方法でエラー内容を表示させます。
#try-catch文を用いて例外(エラー)の表示
try-catchに関する詳細は以下の記事をご覧ください。
PHP : 例外(exceptions) - Manual
【PHP】try-catch解説
先程の方法で特定した部分をtry-catchで囲み、例外表示処理を追記します。
try {
エラーが発生したと思われる部分
} catch(\Exception $e) {
error_log(print_r($e, true) . "\n", 3, 'ログファイルへの絶対パス');
exit;
}
LINE Botを動かして、④ファイルへの出力結果確認でエラー内容を確認します。
以上となります。この方法を参考にLINE Bot開発してみてください!