[PHP] 10 homeディレクトリの取得

[M1 Mac, Big Sur 11.7.2, PHP 8.2.1, MySQL 8.0.31, noFW]

プログラムからクライアント側のローカルファイルを読み込むことは当然厳禁ですが、ファイル出力は可能です。

MySQLの検索結果CSVファイルをhomeディレクトリに出力させてみました。UTF-8であればPythonに比べてCSVファイルの作成は簡単です。

今更ですがPHPでは文字列をピリオドで結合するんですね。当たり前のようにプラスでつないで気付くまでエラーに見舞われていました。この結合方式はPerl由来なのでしょうか。

$db2 = $_COOKIE["db"];
$field2 = $_COOKIE["field"];
$key2 = $_COOKIE["key"];

# MySQLにログイン
$conn = new mysqli('localhost', 'root', 'root');
if (!$conn){
    die("MySQL接続に失敗しました");
} else {
    // print 'MySQL接続に成功しました';
}

# データベース選択
$select_db = sprintf("use %s", $db2);
$select = $conn->query($select_db);

# 全テーブル取得
$tbls_query = $conn->query('show tables;');
$tbls = $tbls_query->fetch_all(MYSQLI_ASSOC);

$tbls_count = count($tbls);

# homeディレクトリ取得
ob_start();
echo posix_getpwuid(posix_geteuid())['dir'];
$home_dir = ob_get_clean();
$home_dir = strtolower($home_dir);

# csvファイルパス作成
$suffix_csv = '/MySQL/test.csv';
$file_csv = $home_dir.$suffix_csv;

# csvファイル作成
$fp_csv = fopen($file_csv, 'a');

$tbls_num = 1;
$counts = 0;
foreach ($tbls as $tbl) {
    $query = sprintf("SELECT * FROM `%s` WHERE `%s` LIKE '%%%s%%'", implode($tbl), $field2, $key2);
    $result = $conn->query($query);
    $rows = $result->fetch_all(MYSQLI_ASSOC);

    # 件数カウント
    $count = count($rows);
    $counts = $counts + $count;

    # csv化(1000件以下)
    if ($counts <= 1000){
        for($i = 0, $size = count($rows); $i < $size; ++$i){
            $row_str = $rows[$i];
            fputcsv($fp_csv, $row_str);
        }
    }
    
    $tbls_num = $tbls_num + 1;
}
fclose($fp_csv);

$conn->close();
exec('mysql.server stop');