FTP 命令

FTP 命令

FTP命令是Internet使用者使用最頻繁的命令之一,熟悉並靈活應用FTP的內部命令,可以大大方便使用者,並收到事半功倍之效。如果你想學習使用進行後臺FTP下載,那麼就必須學習FTP指令。

FTP的命令列格式為:
ftp -v -d -i -n -g [主機名] ,其中

-v 顯示遠程伺服器的所有響應資訊;

-n 限制ftp的自動登錄,即不使用;.n etrc檔案;

-d 使用偵錯方式;

-g 取消全局檔案名。

FTP使用的內部命令如下(中括號表示可選項):

1.![cmd[args]]:在本地機中執行互動shell,exit回到ftp環境,如:!ls*.zip

2.$ macro-ame[args]: 執行宏定義macro-name。

3.account[password]: 提供登錄遠程系統成功後訪問系統資源所需的補充密碼。

4.append local-file[remote-file]:將本地檔案追加到遠程系統主機,若未指定遠程系統檔案名,則使用本地檔案名。

5.ascii:使用ascii類型傳輸方式。
6.bell:每個命令執行完畢後電腦響鈴一次。

7.bin:使用二進制檔案傳輸方式。
8.bye:退出ftp交談程序。

9.case:在使用mget時,將遠程主機檔案名中的大寫轉為小寫字母。

10.cd remote-dir:進入遠程主機目錄。

11.cdup:進入遠程主機目錄的父目錄。

12.chmod mode file-name:將遠程主機檔案file-name的存取方式設置為mode,如:chmod 777 a.out。

13.close:中斷與遠程伺服器的ftp交談(與open對應)。

14.cr:使用asscii方式傳輸檔案時,將回車換行轉換為回行。

15.delete remote-file:刪除遠程主機檔案。

16.debug[debug-value]:設置偵錯方式, 顯示發送至遠程主機的每條命令,如:deb up 3,若設為0,表示取消debug。

17.dir[remote-dir][local-file]:顯示遠程主機目錄,並將結果存入本地檔案
18.disconnection:同close。

19.form format:將檔案傳輸方式設置為format,內定為file方式。

20.get remote-file[local-file]: 將遠程主機的檔案remote-file傳至本地硬碟的local-file。

21.glob:設置mdelete,mget,mput的檔案名擴展,內定時不擴展檔案名,同命令列的-g參數。

22.hash:每傳輸1024位元組,顯示一個hash符號(#)。

23.help[cmd]:顯示ftp內部命令cmd的幫助資訊,如:help get。
24.idle[seconds]:將遠程伺服器的休眠計時器設為[seconds]秒。

25.image:設置二進制傳輸方式(同binary)。

26.lcd[dir]:將本地工作目錄切換至dir。

27.ls[remote-dir][local-file]:顯示遠程目錄remote-dir, 並存入本地檔案local-file。

28.macdef macro-name:定義一個宏,遇到macdef下的空行時,宏定義結束。
29.mdelete[remote-file]:刪除遠程主機檔案。
30.mdir remote-files local-file:與dir類似,但可指定多個遠程檔案,如 :mdir *.o.*.zipoutfile 。

31.mget remote-files:傳輸多個遠程檔案。

32.mkdir dir-name:在遠程主機中建一目錄。

33.mls remote-file local-file:同nlist,但可指定多個檔案名。
34.mode[modename]:將檔案傳輸方式設置為modename, 內定為stream方式。
35.modtime file-name:顯示遠程主機檔案的最後修改時間。

36.mput local-file:將多個檔案傳輸至遠程主機。

37.newer file-name: 如果遠程機中file-name的修改時間比本地硬碟同名檔案的時間更近,則重傳該檔案。
38.nlist[remote-dir][local-file]:顯示遠程主機目錄的檔案清單,並存入本地硬碟的local-file。
39.nmap[inpattern outpattern]:設置檔案名映射機制, 使得檔案傳輸時,檔案中的某些字元相互轉換, 如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸檔案a1.a2.a3時,檔案名變為a1,a2。 該命令特別適用於遠程主機為非UNIX機的情況。
40.ntrans[inchars[outchars]]:設置檔案名字元的翻譯機制,如ntrans1R,則檔案名LLL將變為RRR。

41.open host[port]:建立指定ftp伺服器連接,可指定連接端口。

42.passive:進入被動傳輸方式。

43.prompt:設置多個檔案傳輸時的互動提示。

44.proxy ftp-cmd:在次要控制連接中,執行一條ftp命令, 該命令允許連接兩個ftp伺服器,以在兩個伺服器間傳輸檔案。第一條ftp命令必須為open,以首先建立兩個伺服器間的連接。
45.put local-file[remote-file]:將本地檔案local-file傳送至遠程主機。
46.pwd:顯示遠程主機的目前工作目錄。

47.quit:同bye,退出ftp交談。

48.quote arg1,arg2…:將參數逐字發至遠程ftp伺服器,如:quote syst.
49.recv remote-file[local-file]:同get。

50.reget remote-file[local-file]:類似於get, 但若local-file存在,則從上次傳輸中斷處續傳。

51.rhelp[cmd-name]:請求獲得遠程主機的幫助。

52.rstatus[file-name]:若未指定檔案名,則顯示遠程主機的狀態, 否則顯示檔案狀態。

53.rename[from][to]:更改遠程主機檔案名。

54.reset:清除回答隊列。

55.restart marker:從指定的標誌marker處,重新開始get或put,如:restart 130。
56.rmdir dir-name:刪除遠程主機目錄。

57.runique:設置檔案名只一性存儲,若檔案存在,則在原檔案後加後綴.1, .2等。

58.send local-file[remote-file]:同put。

59.sendport:設置PORT命令的使用。

60.site arg1,arg2…:將參數作為SITE命令逐字發送至遠程ftp主機。

61.size file-name:顯示遠程主機檔案大小,如:site idle 7200。

62.status:顯示目前ftp狀態。

63.struct[struct-name]:將檔案傳輸結構設置為struct-name, 內定時使用stream結構。

64.sunique:將遠程主機檔案名存儲設置為只一(與runique對應)。

65.system:顯示遠程主機的作業系統類型。

66.tenex:將檔案傳輸類型設置為TENEX機的所需的類型。

67.tick:設置傳輸時的位元組計數器。

68.trace:設置包跟蹤。

69.type[type-name]:設置檔案傳輸類型為type-name,內定為ascii,如:type binary,設置二進制傳輸方式。

70.umask[newmask]:將遠程伺服器的內定umask設置為newmask,如:umask 3

71.user user-name[password][account]:向遠程主機表明自己的身份,需要密碼時,必須輸入密碼,如:user anonymous my@email。
72.verbose:同命令列的-v參數,即設置詳盡報告方式,ftp 伺服器的所有響 應都將顯示給使用者,內定為on.

73.?[cmd]:同help.

FreeBSD 使用PHP 透過FTP連線拋檔 備份

<?php
define(“FTP_TIMEOUT",90);
// FTP Statuscodes
define(“FTP_COMMAND_OK",200);
define(“FTP_FILE_ACTION_OK",250);
define(“FTP_FILE_TRANSFER_OK",226);
define(“FTP_COMMAND_NOT_IMPLEMENTED",502);
define(“FTP_FILE_STATUS",213);
define(“FTP_NAME_SYSTEM_TYPE",215);
define(“FTP_PASSIVE_MODE",227);
define(“FTP_PATHNAME",257);
define(“FTP_SERVICE_READY",220);
define(“FTP_USER_LOGGED_IN",230);
define(“FTP_PASSWORD_NEEDED",331);
define(“FTP_USER_NOT_LOGGED_IN",530);

if (!defined(“FTP_ASCII")) define(“FTP_ASCII",0);
if (!defined(“FTP_BINARY")) define(“FTP_BINARY",1);

class FTP {

var $passiveMode = TRUE;
var $lastLines = array();
var $lastLine = “";
var $controlSocket = NULL;
var $newResult = FALSE;
var $lastResult = -1;
var $pasvAddr = NULL;

var $error_no = NULL;
var $error_msg = NULL;

function FTP() {
}

function connect($host, $port=21, $timeout=FTP_TIMEOUT) { //Opens an FTP connection
$this->_resetError();

$err_no = 0;
$err_msg = “";
$this->controlSocket = @fsockopen($host, $port, $err_no, $err_msg, $timeout) or $this->_setError(-1,"fsockopen failed");
if ($err_no<>0) $this->setError($err_no,$err_msg);

if ($this->_isError()) return false;

@socket_set_timeout($this->controlSocket,$timeout) or $this->_setError(-1,"socket_set_timeout failed");
if ($this->_isError()) return false;

$this->_waitForResult();
if ($this->_isError()) return false;

return $this->getLastResult() == FTP_SERVICE_READY;
}

function isConnected() {
return $this->controlSocket != NULL;
}

function disconnect() {
if (!$this->isConnected()) return;
@fclose($this->controlSocket);
}

function close() { //Closes an FTP connection
$this->disconnect();
}

function login($user, $pass) { //Logs in to an FTP connection
$this->_resetError();

$this->_printCommand(“USER $user");
if ($this->_isError()) return false;

$this->_waitForResult();
if ($this->_isError()) return false;

if ($this->getLastResult() == FTP_PASSWORD_NEEDED){
$this->_printCommand(“PASS $pass");
if ($this->_isError()) return FALSE;

$this->_waitForResult();
if ($this->_isError()) return FALSE;
}

$result = $this->getLastResult() == FTP_USER_LOGGED_IN;
return $result;
}

function cdup() { //Changes to the parent directory
$this->_resetError();

$this->_printCommand(“CDUP");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function cwd($path) {
$this->_resetError();

$this->_printCommand(“CWD $path");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function cd($path) {
return $this->cwd($path);
}

function chdir($path) { //Changes directories on a FTP server
return $this->cwd($path);
}

function chmod($mode,$filename) { //Set permissions on a file via FTP
return $this->site(“CHMOD $mode $filename");
}

function delete($filename) { //Deletes a file on the FTP server
$this->_resetError();

$this->_printCommand(“DELE $filename");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function exec($cmd) { //Requests execution of a program on the FTP server
return $this->site(“EXEC $cmd");
}

function fget($fp,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server and saves to an open file
$this->_resetError();

$type = “I";
if ($mode==FTP_ASCII) $type = “A";

$this->_printCommand(“TYPE $type");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;

$result = $this->_download(“RETR $remote");
if ($result) {
fwrite($fp,$result);
}
return $result;
}

function fput($remote,$resource,$mode=FTP_BINARY,$startpos=0) { //Uploads from an open file to the FTP server
$this->_resetError();

$type = “I";
if ($mode==FTP_ASCII) $type = “A";

$this->_printCommand(“TYPE $type");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;

if ($startpos>0) fseek($resource,$startpos);
$result = $this->_uploadResource(“STOR $remote",$resource);
return $result;
}

function get_option($option) { //Retrieves various runtime behaviours of the current FTP stream
$this->_resetError();

switch ($option) {
case “FTP_TIMEOUT_SEC" : return FTP_TIMEOUT;
case “PHP_FTP_OPT_AUTOSEEK" : return FALSE;
}
setError(-1,"Unknown option: $option");
return false;
}

function get($locale,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server
if (!($fp = @fopen($locale,"wb"))) return FALSE;
$result = $this->fget($fp,$remote,$mode,$resumepos);
@fclose($fp);
if (!$result) @unlink($locale);
return $result;
}
function mdtm($name) { //Returns the last modified time of the given file
$this->_resetError();

$this->_printCommand(“MDTM $name");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
if ($lr!=FTP_FILE_STATUS) return FALSE;
$subject = trim(substr($this->lastLine,4));
$lucifer = array();
if (preg_match(“/([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])/",$subject,$lucifer)) return mktime($lucifer[4],$lucifer[5],$lucifer[6],$lucifer[2],$lucifer[3],$lucifer[1],0);
return FALSE;
}

function mkdir($name) { //Creates a directory
$this->_resetError();

$this->_printCommand(“MKD $name");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_PATHNAME || $lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function nb_continue() { //Continues retrieving/sending a file (non-blocking)
$this->_resetError();
// todo
}

function nb_fget() { //Retrieves a file from the FTP server and writes it to an open file (non-blocking)
$this->_resetError();
// todo
}

function nb_fput() { //Stores a file from an open file to the FTP server (non-blocking)
$this->_resetError();
// todo
}

function nb_get() { //Retrieves a file from the FTP server and writes it to a local file (non-blocking)
$this->_resetError();
// todo
}

function nb_put() { //Stores a file on the FTP server (non-blocking)
$this->_resetError();
// todo
}

function nlist($remote_filespec="") { //Returns a list of files in the given directory
$this->_resetError();
$result = $this->_download(trim(“NLST $remote_filespec"));
return ($result !== FALSE) ? explode(“\n",str_replace(“\r","",trim($result))) : $result;
}

function pasv($pasv) { //Turns passive mode on or off
if (!$pasv) {
$this->_setError(“Active (PORT) mode is not supported");
return false;
}
return true;
}

function put($remote,$local,$mode=FTP_BINARY,$startpos=0) { //Uploads a file to the FTP server
if (!($fp = @fopen($local,"rb"))) return FALSE;
$result = $this->fput($remote,$fp,$mode,$startpos);
@fclose($fp);
return $result;
}

function pwd() { //Returns the current directory name
$this->_resetError();

$this->_printCommand(“PWD");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
if ($lr!=FTP_PATHNAME) return FALSE;
$subject = trim(substr($this->lastLine,4));
$lucifer = array();
if (preg_match(“/\"(.*)\"/",$subject,$lucifer)) return $lucifer[1];
return FALSE;
}

function quit() { //Alias of close
$this->close();
}

function raw($cmd) { //Sends an arbitrary command to an FTP server
$this->_resetError();

$this->_printCommand($cmd);
$this->_waitForResult();
$this->getLastResult();
return array($this->lastLine);
}

function rawlist($remote_filespec="") { //Returns a detailed list of files in the given directory
$this->_resetError();
$result = $this->_download(trim(“LIST $remote_filespec"));
return ($result !== FALSE) ? explode(“\n",str_replace(“\r","",trim($result))) : $result;
}

function ls($remote_filespec="") { //Returns a parsed rawlist in an assoc array
$a = $this->rawlist($remote_filespec);
if (!$a) return $a;
$systype = $this->systype();
$is_windows = stristr($systype,"WIN")!==FALSE;
$b = array();
while (list($i,$line) = each($a)) {
if ($is_windows && preg_match(“/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/",$line,$lucifer)) {
$b[$i] = array();
if ($lucifer[3]<70) { $lucifer[3]+=2000; } else { $lucifer[3]+=1900; } // 4digit year fix
$b[$i][‘isdir’] = ($lucifer[7]=="<DIR>");
$b[$i][‘size’] = $lucifer[7];
$b[$i][‘month’] = $lucifer[1];
$b[$i][‘day’] = $lucifer[2];
$b[$i][‘year’] = $lucifer[3];
$b[$i][‘hour’] = $lucifer[4];
$b[$i][‘minute’] = $lucifer[5];
$b[$i][‘time’] = @mktime($lucifer[4]+(strcasecmp($lucifer[6],"PM")==0?12:0),$lucifer[5],0,$lucifer[1],$lucifer[2],$lucifer[3]);
$b[$i][‘am/pm’] = $lucifer[6];
$b[$i][‘name’] = $lucifer[8];
} else if (!$is_windows && $lucifer=preg_split(“/[ ]/",$line,9,PREG_SPLIT_NO_EMPTY)) {
echo $line."\n";
$lcount=count($lucifer);
if ($lcount<8) continue;
$b[$i] = array();
$b[$i][‘isdir’] = $lucifer[0]{0} === “d";
$b[$i][‘islink’] = $lucifer[0]{0} === “l";
$b[$i][‘perms’] = $lucifer[0];
$b[$i][‘number’] = $lucifer[1];
$b[$i][‘owner’] = $lucifer[2];
$b[$i][‘group’] = $lucifer[3];
$b[$i][‘size’] = $lucifer[4];
if ($lcount==8) {
sscanf($lucifer[5],"%d-%d-%d",$b[$i][‘year’],$b[$i][‘month’],$b[$i][‘day’]);
sscanf($lucifer[6],"%d:%d",$b[$i][‘hour’],$b[$i][‘minute’]);
$b[$i][‘time’] = @mktime($b[$i][‘hour’],$b[$i][‘minute’],0,$b[$i][‘month’],$b[$i][‘day’],$b[$i][‘year’]);
$b[$i][‘name’] = $lucifer[7];
} else {
$b[$i][‘month’] = $lucifer[5];
$b[$i][‘day’] = $lucifer[6];
if (preg_match(“/([0-9]{2}):([0-9]{2})/",$lucifer[7],$l2)) {
$b[$i][‘year’] = date(“Y");
$b[$i][‘hour’] = $l2[1];
$b[$i][‘minute’] = $l2[2];
} else {
$b[$i][‘year’] = $lucifer[7];
$b[$i][‘hour’] = 0;
$b[$i][‘minute’] = 0;
}
$b[$i][‘time’] = strtotime(sprintf(“%d %s %d %02d:%02d",$b[$i][‘day’],$b[$i][‘month’],$b[$i][‘year’],$b[$i][‘hour’],$b[$i][‘minute’]));
$b[$i][‘name’] = $lucifer[8];
}
}
}
return $b;
}

function rename($from,$to) { //Renames a file on the FTP server
$this->_resetError();

$this->_printCommand(“RNFR $from");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
$this->_printCommand(“RNTO $to");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function rmdir($name) { //Removes a directory
$this->_resetError();

$this->_printCommand(“RMD $name");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
}

function set_option() { //Set miscellaneous runtime FTP options
$this->_resetError();
$this->_setError(-1,"set_option not supported");
return false;
}

function site($cmd) { //Sends a SITE command to the server
$this->_resetError();

$this->_printCommand(“SITE $cmd");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return true;
}

function size($name) { //Returns the size of the given file
$this->_resetError();

$this->_printCommand(“SIZE $name");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return $lr==FTP_FILE_STATUS ? trim(substr($this->lastLine,4)) : FALSE;
}

function ssl_connect() { //Opens an Secure SSL-FTP connection
$this->_resetError();
$this->_setError(-1,"ssl_connect not supported");
return false;
}

function systype() { // Returns the system type identifier of the remote FTP server
$this->_resetError();

$this->_printCommand(“SYST");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
return $lr==FTP_NAME_SYSTEM_TYPE ? trim(substr($this->lastLine,4)) : FALSE;
}

function getLastResult() {
$this->newResult = FALSE;
return $this->lastResult;
}

/* private */
function _hasNewResult() {
return $this->newResult;
}

/* private */
function _waitForResult() {
while(!$this->_hasNewResult() && $this->_readln()!==FALSE && !$this->_isError()) { /* noop */ }
}

/* private */
function _readln() {
$line = fgets($this->controlSocket);
if ($line === FALSE) {
$this->_setError(-1,"fgets failed in _readln");
return FALSE;
}
if (strlen($line)==0) return $line;

$lucifer = array();
if (preg_match(“/^[0-9][0-9][0-9] /",$line,$lucifer)) {
//its a resultline
$this->lastResult = intval($lucifer[0]);
$this->newResult = TRUE;
if (substr($lucifer[0],0,1)==’5′) {
$this->_setError($this->lastResult,trim(substr($line,4)));
}
}

$this->lastLine = trim($line);
$this->lastLines[] = “< “.trim($line);
return $line;
}

/* private */
function _printCommand($line) {
$this->lastLines[] = “> “.$line;
fwrite($this->controlSocket,$line."\r\n");
fflush($this->controlSocket);
}

/* private */
function _pasv() {
$this->_resetError();
$this->_printCommand(“PASV");
$this->_waitForResult();
$lr = $this->getLastResult();
if ($this->_isError()) return FALSE;
if ($lr!=FTP_PASSIVE_MODE) return FALSE;
$subject = trim(substr($this->lastLine,4));
$lucifer = array();
if (preg_match(“/\\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\\)/",$subject,$lucifer)) {
$this->pasvAddr=$lucifer;

$host = sprintf(“%d.%d.%d.%d",$lucifer[1],$lucifer[2],$lucifer[3],$lucifer[4]);
$port = $lucifer[5]*256 + $lucifer[6];

$err_no=0;
$err_msg="";
$passiveConnection = fsockopen($host,$port,$err_no,$err_msg, FTP_TIMEOUT);
if ($err_no!=0) {
$this->_setError($err_no,$err_msg);
return FALSE;
}

return $passiveConnection;
}
return FALSE;
}

/* private */
function _download($cmd) {
if (!($passiveConnection = $this->_pasv())) return FALSE;
$this->_printCommand($cmd);
$this->_waitForResult();
$lr = $this->getLastResult();
if (!$this->_isError()) {
$result = “";
while (!feof($passiveConnection)) {
$result .= fgets($passiveConnection);
}
fclose($passiveConnection);
$this->_waitForResult();
$lr = $this->getLastResult();
return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
} else {
fclose($passiveConnection);
return FALSE;
}
}

/* upload */
function _uploadResource($cmd,$resource) {
if (!($passiveConnection = $this->_pasv())) return FALSE;
$this->_printCommand($cmd);
$this->_waitForResult();
$lr = $this->getLastResult();
if (!$this->_isError()) {
$result = “";
while (!feof($resource)) {
$buf = fread($resource,1024);
fwrite($passiveConnection,$buf);
}
fclose($passiveConnection);
$this->_waitForResult();
$lr = $this->getLastResult();
return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
} else {
fclose($passiveConnection);
return FALSE;
}
}

/* private */
function _resetError() {
$this->error_no = NULL;
$this->error_msg = NULL;
}

/* private */
function _setError($no,$msg) {
if (is_array($this->error_no)) {
$this->error_no[] = $no;
$this->error_msg[] = $msg;
} else if ($this->error_no!=NULL) {
$this->error_no = array($this->error_no,$no);
$this->error_msg = array($this->error_msg,$msg);
} else {
$this->error_no = $no;
$this->error_msg = $msg;
}
}

/* private */
function _isError() {
return ($this->error_no != NULL) && ($this->error_no !== 0);
}

}

//echo “argv[] = “;
//print_r($argv); // just to see what was passed in

if ($argc > 0)
{
for ($i=1;$i < $argc;$i++)
{
parse_str($argv[$i],$tmp);
$_REQUEST = array_merge($_REQUEST, $tmp);
}
}

//echo “\$_REQUEST = “;
//print_r($_REQUEST);

$backup_dir = ‘/var/backup’;
$www= ‘/var/www’;
$db=’/var/db/mysql’;
$etc= ‘/usr/local/etc’;
$dates = date(“Ymd");
$filename_www = $backup_dir.’/’.$dates.’www.tar.gz’;
$filename_db = $backup_dir.’/’.$dates.’db.tar.gz’;
$filename_etc = $backup_dir.’/’.$dates.’etc.tar.gz’;
$ftp_www = $dates.’www.tar.gz’;
$ftp_db = $dates.’db.tar.gz’;
$ftp_etc = $dates.’etc.tar.gz’;
if (file_exists($backup_dir)) {
echo “備份目錄存在 $filename 開始備份 www 備份到 $filename_www \n";
} else {
echo “備份目錄不存在 $backup_dir \n";
mkdir($backup_dir, 755);
echo “\n 備份目錄建立 開始備份 $www 備份到 $filename_www \n";
}
$run = ‘tar -zcpf ‘.$filename_www.’ ‘.$www.’ > /dev/null’;
$output = shell_exec($run);
echo “\n 備份資料庫 開始備份 $db 備份到 $filename_db \n";
$run = ‘/usr/local/etc/rc.d/mysql-server stop > /dev/null’;
$output = shell_exec($run);
echo “\n mysql 停止 \n";
$run = ‘tar -zcpf ‘.$filename_db.’ ‘.$db.’ > /dev/null’;
$output = shell_exec($run);
$run = ‘/usr/local/etc/rc.d/mysql-server start > /dev/null’;
$output = shell_exec($run);
echo “\n mysql 啟動 \n";
echo “\n 設定檔備份 $etc 備份到 $filename_etc \n";
$run = ‘tar -zcpf ‘.$filename_etc.’ ‘.$etc.’ > /dev/null’;
$output = shell_exec($run);

$ftp_server = “ip";
$ftp_user = “backup";
$ftp_passwd = “passwd";

echo “連線到 $ftp_server $ftp_user $ftp_passwd \n";
/* direct object methods */
$ftp =& new FTP();
if ($ftp->connect($ftp_server)) {
if ($ftp->login($ftp_user,$ftp_passwd)) {
echo “\n".$ftp->sysType() . “\n";
echo $ftp->pwd() . “\n";
$ftp->put($ftp_www,$filename_www );
$ftp->put($ftp_db,$filename_db );
$ftp->put($ftp_etc,$filename_etc );
} else {
echo “連線失敗: “;
print_r($ftp->error_no);
print_r($ftp->error_msg);
}
$ftp->disconnect();
$end=$ftp->lastLines;
} else {
echo “連線失敗: “;
print_r($ftp->error_no);
print_r($ftp->error_msg);
}
echo “$end \n";

?>