それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pythonでphpの設定ファイルを読み取る

pythonで自動化スクリプトwordpressをなんとかしたい。

nextcloudやwordpressとかphpでできたアプリの設定ファイルを読み取って、データベースをバックアップしたい。

でも、データベースのユーザを増やすのは管理が手間。データベースのパスワードを直接記述は避けたい。でも、phpの設定ファイルにはデータベースが記述されているんですよね。

だったら、phpを実行して無理やり読んじゃえばいい。

pythonphpを起動する

subprocessでphpを実行できるような関数を作っておく

import subprocess

def run_php(source_string: str, php_path=None) -> str:
    if php_path is None:
        ret = subprocess.check_output(['which', 'php'])
        php_path = str(ret, 'utf-8').strip()

    php_path = php_path.split()

    if source_string[0:5] != '<?php':
        source_string = f"<?php {source_string}"

    p1 = subprocess.Popen(php_path, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    php_source = bytes(source_string, 'utf-8')
    p1.stdin.write(php_source)
    p1.stdin.close()
    p1.wait()
    ret = p1.stdout.read()
    return str(ret, 'utf-8')

configを出力させる。

要は、ssh経由ログインしphpを実行して、結果を実行すればいいわけで。

def wordpress_config(wp_path):
source = f"""
    include '{wp_path}/www-data/wpconfig.php';
    echo json_encode($CONFIG);
    """
    # ret = run_php(source, 'ssh server php')
    ret = run_php(source)
    ret = json.loads(ret)
    return ret

読み込みたいファイルを読み込んで、json返却させてpythonで読み取れば、mysql のソース・コードを書かずに ssh秘密鍵をセキュリティレベルにすることができるんだね。