由于經(jīng)常操作國(guó)外服務(wù)器,深刻的感受是速度比較低,有的時(shí)候可以說(shuō)非常低。

最近需要兩臺(tái)服務(wù)器做下載數(shù)據(jù)分流。但是面臨著一個(gè)問(wèn)題:同時(shí)去上傳兩個(gè)資源到兩臺(tái)服務(wù)器明顯是一件比較麻煩的事,而且速度很慢,花時(shí)間又多。所以想了一個(gè)辦法,將資源上傳到其中一臺(tái)服務(wù)器,然后直接從另一臺(tái)服務(wù)器登入這臺(tái)服務(wù)器下載資源并拷貝到同樣的目錄下。

于是乎找了很多方法,其實(shí)最快的就是用linux上的shell方式,直接get文件就可以同步數(shù)據(jù),但是可能服務(wù)的一些問(wèn)題,并沒(méi)有辦法這么順利,不過(guò)在php中的確找到了FTP相關(guān)的函數(shù)

resource ftp_connect ( string $host [, int $port [, int $timeout ]] )

bool ftp_login ( resource $ftp_stream , string $username , string $password )

bool ftp_get ( resource $ftp_stream , string $local_file , string $remote_file , int $mode [, int $resumepos ] )

利用這三個(gè)函數(shù)足以實(shí)現(xiàn)同步資源。因此我設(shè)置了兩個(gè)函數(shù)。

    //FTP連接    function loginFtp() {        // set up basic connection        $ftp_server = 'serverName Or Ip';        $ftp_user  = 'username';        $ftp_pass  = 'password';         // connect ftp        $ftp_conn = ftp_connect($ftp_sever);          // login with username and password        $login_result = ftp_login($ftp_conn, $ftp_user, $ftp_pass);          // check connection        if ( !$ftp_conn || ! $login_result) {            die("FTP connection has failed!");        }         return $ftp_conn;    }     //同步文件    function synchronize($server_file, $ftpconn) {        $local_file  = ltrim($server_file, '/');        $local_file  = str_replace('pub/', '', $local_file);         //目錄不存在 重新創(chuàng)建        $folder = strrpos($local_file, '/');        if ($folder !== FALSE) {            $local_folder = substr($local_file, 0, $folder) . '/';        }         if ( ! is_dir($local_folder) ) {            mkdir($local_folder, 0775, TRUE);        }         // download the file        $rs = ftp_get($ftpconn, $local_file, $server_file, FTP_BINARY);         if ( $rs ) {            if ( ! file_exists($local_file) )                echo "Successfully written to {$local_file}.<br />";            else                echo "Successfully rewritten to {$local_file}.<br />";        } else {            echo "There was a problem on {$local_file}.<br />";        }    }     //實(shí)現(xiàn)同步     $conn = loginFtp();    $file = '/pub/files/msnlite.exe';    synchronize($file, $conn);     // close the FTP stream    ftp_close($conn);