概要
PHPプログラムで利用している特定設定ファイルに定義した変数をシェルスクリプトで参照するため、
シェルスクリプトからPHPファイルをパーシング処理を作成してみます。
事前準備
cshをインストールとPHP設定ファイルを用意します。
・cshインストールコマンド
sudo apt-get install csh
・PHP用設定ファイル
<?
$GLOBAL_BASE_DATE = "20230124"; // TEST : YYYYMMDD, TODAY : date("Ymd");
?>
シェルスクリプト
以下のスクリプトからconf.phpファイルに定義されている内容を取得するコードです。
■ソース
#!/bin/csh -f
set BASE_DATE = `cat conf.php|grep GLOBAL_BASE_DATE`
set DATE = `echo $BASE_DATE | awk 'BEGIN{FS=";"}{print $1}'|awk 'BEGIN{FS="="}{print $2}' | sed 's/\"//g'`
echo $DATE
■実行結果
# PHP設定ファイルの内容
pi@raspberrypi:~/work/php $ cat conf.php
<?
$GLOBAL_BASE_DATE = "20230124"; // TEST : YYYYMMDD, TODAY : date("Ymd");
?>
# シェルスクリプトの実行結果
pi@raspberrypi:~/work/php $ csh print.sh
20230124
■ソースコードの説明
①set BASE_DATE = `cat conf.php|grep GLOBAL_BASE_DATE`
→conf.phpファイルから指定した文字列をgrepした結果が取得されます。
取得結果:$GLOBAL_BASE_DATE = "20230124"; // TEST : YYYYMMDD, TODAY : date("Ymd");
②set DATE = `echo $BASE_DATE | awk 'BEGIN{FS=";"}{print $1}'`
→ここまで書いたソースの場合は、「;」区切り文字の前部分が取得されます。
取得結果:$GLOBAL_BASE_DATE = "20230124"
③awk 'BEGIN{FS="="}{print $2}
→②番の結果から「=」区切り文字の後の部分が取得されます。
取得結果:"20230124"
④sed 's/\"//g'`
→③番の結果から「"」文字列を削除した結果が取得されます。
取得結果:20230124
■参照サイト
sedでダブルクォーテーション・シングルクォーテーションの置換・削除を行う
https://orebibou.com/ja/home/201607/20160712_003/
終わりに
PHP設定ファイルに定義されている変数内容をシェル側で取得する方法を工夫してみました。
もっと楽な方法があるかもしれないですが、私の中ではこの処理で取得できました。
作成することになった理由としてはPHP側で定義した内容をシェル側にまた定義するのが、
問題でしたので、作成しました。
PHP言語だけではなくテキストファイルであればこの方法で出来ると思います。