[PHP] 11 日付取得とglob関数

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

MySQL検索結果のCSVファイル名に日付と通し番号を付けました。

タイポしてしまったスクリプトが停止せずに動いたことには驚きました。PHPは変数宣言が不要なので、式の右辺に突然未宣言の変数を書いてもエラーになりません。

PythonやVBAよりも文法がゆるい言語があるとは知りませんでした。

# 正しいスクリプト
$csv_counts = $csv_counts + 1;

# タイポしたスクリプト(エラーにならない)
$csv_counts = $csv_unts + 1;
# 今日の日付取得
$objDateTime = new DateTime();
$date = $objDateTime->format('ymd');
// echo nl2br($date."\n");

# 今日作成csvファイルをカウント
$num_file;
foreach (glob("/projects/_csv/*.csv") as $filename) {
    // echo nl2br($filename."\n");
    if (strpos($filename,$date) == true){
        $num_file +=1;
    }
}
// echo nl2br($num_file."\n");
$new_num = $num_file + 1;

# csvファイルパス作成
$prefix_csv = '/projects/_csv/';
$file_csv = $prefix_csv.$date."_mysql_".$new_num.".csv";
// echo nl2br($file_csv."\n");

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

# MySQL検索
$tbls_num = 1;
$counts = 0;
$csv_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件以下)
    for($i = 0, $size = count($rows); $i < $size; ++$i){
        if ($csv_counts < 1000){
            $row_str = $rows[$i];
            fputcsv($fp_csv, $row_str);

            $csv_counts = $csv_counts + 1;
        } 
    }
    $tbls_num = $tbls_num + 1;
}
fclose($fp_csv);

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