UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#025 PHPで2次元配列をCSVに変換してバックアップする方法 最新5つ残す

記入日:2023-02-02 編集日:2023-02-02

SQL見るだけクエリ。以前データベースのSQLをバックアップする記事を書きましたが、 今回はテーブルの内容をCSVでバックアップする方法を考えてみようと思います。SQL文は少ししか関係しませんが、興味のある方は、参考までにご覧ください。

PHPで2次元配列をCSVに変換してバックアップする方法

// 1.ファイルを開いて書き込みモードに設定する
$fp = fopen('backup.csv', 'w');

// 2.2次元配列をループして1行ごとにCSV形式で書き込む
foreach ($data as $row) {
  fputcsv($fp, $row);
}

// 3.データベースに接続してデータを取得
$pdo = new PDO("mysql:host=localhost;dbname=test_db;charset=utf8", 'root', 'pass');
$stmt = $pdo->prepare("SELECT * FROM table_name");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 4.バックアップ用のフォルダを作成し、日時をつけてバックアップファイルを作成する
mkdir('./backup/');
$date = date('Y-m-d_H-i-s');
$fp = fopen('./backup/backup_'.$date.'.csv', 'w');

foreach ($result as $row) {
  fputcsv($fp, $row);
}

fclose($fp);

// 5.バックアップファイル 新しいもの5つを残す。
$backup_files = array_slice(scandir('./backup/'), 2);

if (count($backup_files) >= 5) {
  usort($backup_files, function($a, $b) {
    return filemtime('./backup/'.$a) - filemtime('./backup/'.$b);
  });
 
  for ($i = 0; $i < 4; $i++) {
    unlink('./backup/'.$backup_files[$i]);
  }
}

//  6.データベース切断
$pdo = null;

部分的な解説

mkdir('./backup/');

mkdir()関数は、指定したディレクトリを作成する関数です。今回の場合、「./backup/」というディレクトリを作成しています。 「./」はカレントディレクトリを表しており、今回の場合は「./backup/」というディレクトリが作成されます。 既にフォルダが存在していた場合は、無視されます。

array_slice(scandir('./backup/'), 2);

array_slice()関数は、配列の任意の位置から任意の長さを取得する関数です。 今回の場合、「./backup/」内のファイル一覧を取得し、2番目以降を取得しています。

if (count($backup_files) >= 5) {
  usort($backup_files, function($a, $b) {
    return filemtime('./backup/'.$a) - filemtime('./backup/'.$b);
  });
}

上記のコードは、バックアップファイルが5つ以上存在した場合に実行されます。 usort()関数は、指定した関数を使って配列をソートする関数です。 今回の場合、filemtime()関数を使って「./backup/」内のファイルの最終更新日時を取得し、古い順にソートするために使用しています。 $aと$bは、usort()関数で渡された配列の要素を表しており、filemtime()関数に渡しています。 filemtime()関数は、指定したファイルの最終更新日時を取得します。 return文では、取得した$aと$bの日時の差を比較して、古い順にソートしています。

for ($i = 0; $i < 4; $i++) {
  unlink('./backup/'.$backup_files[$i]);
}

上記のコードは、バックアップファイルが5つ以上ある場合に、 一番古い4つのバックアップファイルを削除するために使用しています。 $iは、0から3までループしています。 unlink()関数は、指定したファイルを削除する関数です。 ./backup/内の$backup_files[$i]のファイルを削除しています。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。