আমি গুগলে এই পোস্টটি দ্বিতীয় শীর্ষ ফলাফল হিসাবে পেয়েছি, প্রথমে এক্সিকিউটিভ ব্যবহার করছিলাম :(
যাইহোক, যদিও এটি আমার প্রয়োজনগুলি যথাযথভাবে স্যুট করে না .. আমি আমার এই দ্রুত কিন্তু বর্ধিত সংস্করণ সহ অন্যদের জন্য একটি উত্তর পোস্ট করার সিদ্ধান্ত নিয়েছি।
স্ক্রিপ্ট বৈশিষ্ট্য
- দিনে দিনে ব্যাকআপ ফাইলের নামকরণ, প্রিফিক্স-ওয়াইওয়াই-এমএম-ডিডি-পোষ্টফিক্স.অ্যাক্টেনশন
- ফাইল প্রতিবেদন / নিখোঁজ
- পূর্ববর্তী ব্যাকআপ তালিকা
- পূর্ববর্তী ব্যাকআপগুলিকে জিপ / অন্তর্ভুক্ত করে না;)
- উইন্ডোজ / লিনাক্সে কাজ করে
যাইহোক, স্ক্রিপ্টের উপরে .. যদিও এটি দেখতে অনেকটা দেখাচ্ছে .. মনে রাখবেন এখানে আরও কিছু আছে .. সুতরাং প্রয়োজন অনুসারে রিপোর্টিং বিভাগগুলি মুছতে দ্বিধা বোধ করবেন ...
এছাড়াও এটি অগোছালো দেখাচ্ছে এবং কিছু জিনিস সহজেই পরিষ্কার করা যেতে পারে ... সুতরাং এটি সম্পর্কে মন্তব্য করবেন না, এটি কেবলমাত্র একটি প্রাথমিক স্ক্রিপ্ট যা বেসিক মন্তব্যগুলিতে ফেলেছে .. লাইভ ব্যবহারের জন্য নয় .. তবে লাইভ ব্যবহারের জন্য পরিষ্কার করা সহজ !
এই উদাহরণস্বরূপ, এটি রুট www / public_html ফোল্ডারের অভ্যন্তরে থাকা ডিরেক্টরি থেকে চালিত হয় .. সুতরাং রুটে যাওয়ার জন্য কেবল একটি ফোল্ডার ভ্রমণ করতে হবে।
<?php
// DIRECTORY WE WANT TO BACKUP
$pathBase = '../'; // Relate Path
// ZIP FILE NAMING ... This currently is equal to = sitename_www_YYYY_MM_DD_backup.zip
$zipPREFIX = "sitename_www";
$zipDATING = '_' . date('Y_m_d') . '_';
$zipPOSTFIX = "backup";
$zipEXTENSION = ".zip";
// SHOW PHP ERRORS... REMOVE/CHANGE FOR LIVE USE
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
// ############################################################################################################################
// NO CHANGES NEEDED FROM THIS POINT
// ############################################################################################################################
// SOME BASE VARIABLES WE MIGHT NEED
$iBaseLen = strlen($pathBase);
$iPreLen = strlen($zipPREFIX);
$iPostLen = strlen($zipPOSTFIX);
$sFileZip = $pathBase . $zipPREFIX . $zipDATING . $zipPOSTFIX . $zipEXTENSION;
$oFiles = array();
$oFiles_Error = array();
$oFiles_Previous = array();
// SIMPLE HEADER ;)
echo '<center><h2>PHP Example: ZipArchive - Mayhem</h2></center>';
// CHECK IF BACKUP ALREADY DONE
if (file_exists($sFileZip)) {
// IF BACKUP EXISTS... SHOW MESSAGE AND THATS IT
echo "<h3 style='margin-bottom:0px;'>Backup Already Exists</h3><div style='width:800px; border:1px solid #000;'>";
echo '<b>File Name: </b>',$sFileZip,'<br />';
echo '<b>File Size: </b>',$sFileZip,'<br />';
echo "</div>";
exit; // No point loading our function below ;)
} else {
// NO BACKUP FOR TODAY.. SO START IT AND SHOW SCRIPT SETTINGS
echo "<h3 style='margin-bottom:0px;'>Script Settings</h3><div style='width:800px; border:1px solid #000;'>";
echo '<b>Backup Directory: </b>',$pathBase,'<br /> ';
echo '<b>Backup Save File: </b>',$sFileZip,'<br />';
echo "</div>";
// CREATE ZIPPER AND LOOP DIRECTORY FOR SUB STUFF
$oZip = new ZipArchive;
$oZip->open($sFileZip, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$oFilesWrk = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathBase),RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($oFilesWrk as $oKey => $eFileWrk) {
// VARIOUS NAMING FORMATS OF THE CURRENT FILE / DIRECTORY.. RELATE & ABSOLUTE
$sFilePath = substr($eFileWrk->getPathname(),$iBaseLen, strlen($eFileWrk->getPathname())- $iBaseLen);
$sFileReal = $eFileWrk->getRealPath();
$sFile = $eFileWrk->getBasename();
// WINDOWS CORRECT SLASHES
$sMyFP = str_replace('\\', '/', $sFileReal);
if (file_exists($sMyFP)) { // CHECK IF THE FILE WE ARE LOOPING EXISTS
if ($sFile!="." && $sFile!="..") { // MAKE SURE NOT DIRECTORY / . || ..
// CHECK IF FILE HAS BACKUP NAME PREFIX/POSTFIX... If So, Dont Add It,, List It
if (substr($sFile,0, $iPreLen)!=$zipPREFIX && substr($sFile,-1, $iPostLen + 4)!= $zipPOSTFIX.$zipEXTENSION) {
$oFiles[] = $sMyFP; // LIST FILE AS DONE
$oZip->addFile($sMyFP, $sFilePath); // APPEND TO THE ZIP FILE
} else {
$oFiles_Previous[] = $sMyFP; // LIST PREVIOUS BACKUP
}
}
} else {
$oFiles_Error[] = $sMyFP; // LIST FILE THAT DOES NOT EXIST
}
}
$sZipStatus = $oZip->getStatusString(); // GET ZIP STATUS
$oZip->close(); // WARNING: Close Required to append files, dont delete any files before this.
// SHOW BACKUP STATUS / FILE INFO
echo "<h3 style='margin-bottom:0px;'>Backup Stats</h3><div style='width:800px; height:120px; border:1px solid #000;'>";
echo "<b>Zipper Status: </b>" . $sZipStatus . "<br />";
echo "<b>Finished Zip Script: </b>",$sFileZip,"<br />";
echo "<b>Zip Size: </b>",human_filesize($sFileZip),"<br />";
echo "</div>";
// SHOW ANY PREVIOUS BACKUP FILES
echo "<h3 style='margin-bottom:0px;'>Previous Backups Count(" . count($oFiles_Previous) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
foreach ($oFiles_Previous as $eFile) {
echo basename($eFile) . ", Size: " . human_filesize($eFile) . "<br />";
}
echo "</div>";
// SHOW ANY FILES THAT DID NOT EXIST??
if (count($oFiles_Error)>0) {
echo "<h3 style='margin-bottom:0px;'>Error Files, Count(" . count($oFiles_Error) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
foreach ($oFiles_Error as $eFile) {
echo $eFile . "<br />";
}
echo "</div>";
}
// SHOW ANY FILES THAT HAVE BEEN ADDED TO THE ZIP
echo "<h3 style='margin-bottom:0px;'>Added Files, Count(" . count($oFiles) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
foreach ($oFiles as $eFile) {
echo $eFile . "<br />";
}
echo "</div>";
}
// CONVERT FILENAME INTO A FILESIZE AS Bytes/Kilobytes/Megabytes,Giga,Tera,Peta
function human_filesize($sFile, $decimals = 2) {
$bytes = filesize($sFile);
$sz = 'BKMGTP';
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}
?>
এটার কাজ কি??
এটি কেবলমাত্র ভেরিয়েবল - পাথবেসের সম্পূর্ণ সামগ্রী জিপ করে এবং একই ফোল্ডারে জিপটি সংরক্ষণ করবে। এটি পূর্ববর্তী ব্যাকআপগুলির জন্য একটি সাধারণ সনাক্তকরণ করে এবং এগুলি এড়িয়ে যায়।
ক্রোন ব্যাকআপ
এই স্ক্রিপ্টটি আমি সবেমাত্র লিনাক্সে পরীক্ষা করেছি এবং পাথবেসের জন্য একটি পরম ইউআরএল ব্যবহার করে ক্রোন জব থেকে দুর্দান্ত কাজ করেছি।