본문 바로가기

카테고리 없음

PHP - 파일저장, 불러오기, 날짜별저장, 최근10개 제외 삭제, 100일 이후 데이터 삭제

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
반응형