且相關文章教學,也是很多....
But ....
出現了一個問題,在執行 ftp 連線,會停留在輸入帳、密階段
即使已經有設定帳、密還是一樣 ....
anyway ~
練習一下,用 PHP 撰寫備份程式吧!!
<?php
// FTP 連線設定
define('FTP_HOST','ftp.host.tw') ;
define('FTP_USER','backup') ;
define('FTP_PWD','123456') ;
// === 備份相關設定 ===
// 要備份的目錄
$backup_folder = array(
'Website.tar'=>'/var/www'
,'Jerry.tar'=>'/home/jerry'
,'Sam.tar'=>'/home/sam'
);
// 備份檔案 , 所有檔案會打包成 config.tar
$backup_file = array(
'/etc/xxx.php'
,'/etc/yyy.conf'
);
// 備份壓縮檔存放位置 , 依日期為目錄 , ex : 20131022
define('BACKUP_TAR_DIR','/home/backup/' . date("Ymd", time()) . '/');
// 檢查備份目錄是否存在
if (!file_exists(BACKUP_TAR_DIR))
{
if (!mkdir(BACKUP_TAR_DIR, 0755, true))
{
die('Failed to Create Backup Dir - ' . BACKUP_TAR_DIR);
}
write_log('mkdir : ' . BACKUP_TAR_DIR);
}
// === 進行備份壓縮 ===
// 進行目錄打包
$uploadFiles = array();
foreach($backup_folder as $filename => $path)
{
$tarFile = BACKUP_TAR_DIR . $filename ;
if (!file_exists($path))
{
write_log('no folder : ' . $path);
continue;
}
write_log('tar \'' . $tarFile . '\' From : ' . $path);
try {
$PD = new PharData($tarFile);
$PD->buildFromDirectory($path);
} catch (Exception $e) {
// handle errors here
die($e->getMessage());
}
$uploadFiles[] = $tarFile;
write_log('finish tar file : ' . $tarFile);
}
// 進行檔案打包
$tarFile = BACKUP_TAR_DIR . 'config.tar' ;
$uploadFiles[] = $tarFile;
write_log('begin tar file : ' . $tarFile);
try {
$PD = new PharData($tarFile);
foreach($backup_file as $file)
{
if (!file_exists($file))
{
write_log('no file : ' . $file);
continue;
}
$PD->addFile($file);
write_log('add file : ' . $file);
}
} catch (Exception $e) {
// handle errors here
var_dump($e->getMessage());
}
write_log('finish tar file : ' . $tarFile);
// 連線,參數分別是 HOST, PORT, TIMEOUT
$conn = ftp_connect(FTP_HOST, 21, 60) or die("Connect FTP Server Fail");
ftp_login($conn, FTP_USER, FTP_PWD);
ftp_pasv($conn, true); // 使用被動模式,這個指令必須在ftp_login 後立即使用
write_log('ftp connnecting....');
// 檔案上傳至FTP則不建目錄 , 以日期為檔案字首為命名 , ex : 20131022_xxx.tar
$dt_flag = date("Ymd_", time());
foreach ($uploadFiles as $file)
{
if (!file_exists($file))
{
write_log('no file : ' . $file);
continue;
}
//上傳一個檔案,注意傳送模式為 FTP_BINARY
if (ftp_put($conn, $dt_flag . basename($file), $file, FTP_BINARY))
{
write_log('put file : ' . $file);
} else {
write_log('pub error : ' . $file);
}
}
// ftp_delete($conn, "FILENAME"); // 刪除檔案
ftp_close($conn); //關閉連結
write_log('Filish!!!!!!');
function write_log($str, $br=true)
{
echo $str;
if ($br)
{
echo "\n";
}
}
?>
檢視 home/backup
應該會有一個目錄&底下有四個tar檔案
/20131022
- Website.tar
- Jerry.tar
- Sam.tar
- config.tar
再檢視一下 ftp 的目錄
應該會有四個檔案
/
- 20131022_Website.tar
- 20131022_Jerry.tar
- 20131022_Sam.tar
- 20131022_config.tar
沒有留言:
張貼留言