2016年4月5日 星期二

PHP+Cronjob 刪除過期檔案

同事離職後,經常都有善後工作。今天用家匯報後台出了問題,上傳不到路線資料,於是我進入系統的 phpMyAdmin 查看數據。不論我怎樣登入都不成功。直覺話我知服務器的空間用盡了,於是把一些相片壓縮檔刪除。選它是因為大,以及這些都是臨時檔案,可殺。處理完後,登入成功。用戶也能繼續使用。

作為一個負責任的編程人員,是要為自己程序所新增的臨時檔案做刪除處理。最簡單的就是檔案滿月便把它刪除。這樣的程序其實不難寫,用 PHP + Cronjob 就能自動解決。不需要每次人手處理。本來以為交給同事會懂得自行處理,然而他們有時間看 Facebook、有時間玩 Line 吹水、有時間抽煙、有時間看新聞網頁、有時間聽收音機...,都不會想想自己開發的系統有甚麼地方可以改善的地方。
<?php
//========================================================================================
//  ZIP File Cleaner
//----------------------------------------------------------------------------------------
//  Written by Pacess HO
//  Copyright 2016 Pacess Studio.  All rights reserved.
//========================================================================================

//  This application will looking for ZIP file in specified path, check if file
//  have been created more than 1 month.  If yes then remove it.

//----------------------------------------------------------------------------------------
function getDirectoryArray($directory)  {
    $resultArray = array(); 
    $fileArray = scandir($directory); 
    foreach ($fileArray as $key => $value)  {

        //  Skip . & ..
        if (in_array($value, array(".", "..")))  {continue;}

        $filePath = $value;
        if (is_dir($filePath) == false)  {$resultArray[] = $filePath;}
    } 
    return $resultArray; 
} 

//=========================================================================================
//  Main program
$zipFolder = "/home/www/merchandising/file/zip";
$cutOffTimeStamp = intval(date("Ymd", strtotime("-30 days")));

//----------------------------------------------------------------------------------------
$fileCount = 0;
$deleteCount = 0;
$fileArray = getDirectoryArray($zipFolder);
foreach ($fileArray as $key => $filename)  {

    $tail = strtolower(substr($filename, -4));
    if ($tail != ".zip")  {continue;}

    $fileCount++;
    $filePath = $zipFolder.DIRECTORY_SEPARATOR.$filename;

    $timeStamp = intval(substr($filename, 0, 8));
    if ($timeStamp >= $cutOffTimeStamp)  {
        print("Keep [$filePath].\n");
        continue;
    }

    $deleteCount++;

    print("Deleting [$filePath]...\n");
    unlink($filePath);
}

print("\nSummary:\n");
print("cutOffTimeStamp=$cutOffTimeStamp\n");
print("fileCount=$fileCount\n");
print("deleteCount=$deleteCount\n\n");

?>

沒有留言: