728x90
반응형
PHP - 파일저장, 불러오기, 날짜별저장, 최근5개 제외 삭제, 저장
PHP - 파일저장, 불러오기, 날짜별저장, 최근10개 제외 삭제, 100일 이후 데이터 삭제 |
<form method="get">
<?
if ( $_GET['mode'] === "edit" || $_GET['mode'] === "editA" || $_GET['mode'] === "editB") {
echo '<input type="submit" name="" value="Exit">';
} else {
echo '<input type="submit" name="mode" value="editA">';
echo '<input type="submit" name="mode" value="editB">';
}
?>
</form>
<?
// mode = SAVE 이고, POST 값이 있을경우
if ($_POST['mode'] === "SAVE") {
// 파일백업
$file = $_POST['file'] .".php"; // 원본파일
$filename = pathinfo($file)['filename']; // 파일명 추출
$backupFilename = $filename ."_" .date("Ymd_His") .".php"; // 백업파일명(원본파일명_날짜.php)
copy($file, $backupFilename); // 원본백업
// 데이터 저장
$newData = $_POST['textarea_data'];
$phpCode = '<?
$data = "' . $newData . '"; // $data 라는 변수에 저장
?>';
file_put_contents($file, $phpCode);
// 백업파일 패턴검색
$backupPattern = $filename. "_*";
$backupFiles = glob($backupPattern);
// 백업파일 삭제 ( 10개 이상이면 오래된 파일부터 삭제 )
if (count($backupFiles) > 10) {
usort($backupFiles, function ($a, $b) {
return filemtime($a) - filemtime($b); // Sort in ascending order
});
// Iterate through the files starting from the 0 index (oldest files)
for ($i = 0; $i < count($backupFiles) - 10; $i++) {
unlink($backupFiles[$i]); // Delete the oldest files
}
}
// 백업파일 삭제 ( 지정날짜 경과 시 삭제 )
$timestampAgo = time() - (100 * 24 * 60 * 60); // (날짜 * 시간 * 분 * 초)
// Iterate through the files starting from the 10th file
for ($i = 10; $i < count($backupFiles); $i++) {
if (filemtime($backupFiles[$i]) < $timestampAgo) {
unlink($backupFiles[$i]);
}
}
}
// 원본파일 가져오기
if ($_GET['mode'] === "editA") $file = "dataFileA.php"; // 원본파일
if ($_GET['mode'] === "editB") $file = "dataFileB.php"; // 원본파일
if ($_GET['mode'] === "edit") $file = $_GET['file'] .".php";
// 원본파일에서 $data 변수 불러오기
if (isset($file)) include $file;
else exit;
// 백업파일 가져오기
if (stripos($file,"dataFileA") !== false) $file = "dataFileA.php";
if (stripos($file,"dataFileB") !== false) $file = "dataFileB.php";
// 백업파일 패턴검색
$filename = pathinfo($file)['filename']; // 파일명 추출
$backupPattern = $filename. "_*";
$backupFiles = glob($backupPattern);
// 백업파일 출력하기
foreach ($backupFiles as $backupFile) {
$backupFileName = pathinfo($backupFile)['filename'];
$tmpStr .= "<a href=?mode=edit&file=$backupFileName>" .$backupFileName ."</a><br>";
}
echo "<b>최근 저장목록 10개 ( 100일 이내 )</b><br>";
echo $tmpStr
?>
<form method="post">
<textarea class="form-control" placeholder="data" style="height: 400px; width: 98%;" name="textarea_data"><?=htmlspecialchars($data)?></textarea><br>
<input type="hidden" name="file" value="<?=pathinfo($file)['filename']?>">
<input type="submit" name="mode" value="SAVE">
</form>
dataFileA.php 와 dataFileB.php 각각의 파일명에 날짜를 추가하여 저장하는 방식
백업데이터는 불러오되 수정하지 않고, 최종 백업데이터로 재저장하는 방식
glob 라는 패턴검색 사용
filemtime 와 filectime 중에 'filemtime'를 비교하여 최근 데이터 10개를 남겨두고 삭제
시간을 초단위 계산하여 100일 이상된 파일 삭제
$timestampAgo = time() - (100 * 24 * 60 * 60); // (날짜 * 시간 * 분 * 초)
파일명과 확장자는 각각 아래와 같이 나눈다.
파일명 : pathinfo($file)['filename']
확장자 : pathinfo($file)['extension']
728x90
반응형