2011-03-31 43 views
1

我在將文件從一臺服務器複製到另一臺服務器時遇到了很多麻煩。Perl - 使用Net:FTP和Possible Net :: FTP將文件(和內容)複製到遠程服務器::文件

我一直在嘗試兩天。

請知道我使用嚴格,下面的腳本僅用於測試。

我實際上得到一個文件「名稱」到「遠程」服務器和chmod到0755,但它是空的。

1-文件需要複製/ ftp'​​d到「遠程」服務器特定的目錄。 mkdir if!。

2-要複製的「本地」文件存在於腳本目錄以外的目錄中。

3-文件複製到「遠程」服務器後,執行命令chmod到0755

4-容易看似每個人,但我。 :-(

下面寫到文件中名存實亡,它是空的

#!/usr/bin/perl -w 
use CGI; 
use CGI::Carp qw(fatalsToBrowser warningsToBrowser); 
print CGI::header(); 
use Net::FTP; 
use Net::FTP::File; 
#use strict; 
my $host='ftp.myserver.com'; 
my $ftp=Net::FTP->new($host,Timeout=>240,Passsive=>1) or $newerr=1; 
push @ERRORS, "Can't ftp to $host: $!\n" if $newerr; 
myerr() if $newerr; 
print qq~Connected<br />~; 
$ftp->login('[email protected]','mypasswd') or die "Cannot login: [email protected]"; 
$datedir ='04-01-2011'; 

################################# 
$copyfrom = $datedir; 
$thisfile = 'index.pl'; 
$fullpath = $copyfrom.'/'.$thisfile; 
$path = '/home/account/public_html/folder/'.$copyfrom; 
if (-e $fullpath) {print qq~Copy source exists<br >~;} 
unless (-e $fullpath) {print qq~Copy source does not exist<br >~;} 

####################################################### 
my $isdir = $ftp->isdir($datedir); 
if (!$isdir){ 
    print qq~Remote directory does not exist<br >~; 
    $ftp->mkdir($datedir) or die $ftp->message; 
} 
if ($isdir){ 
    print qq~Remote directory exists<br />~; 
} 

############# 
my $new = $datedir.'/'.$thisfile; 
my $isfile = $ftp->exists($new); 
if (!$isfile){ 
    print qq~Remote file does not exist<br />~; 
    $ftp->cwd($copyfrom); 
    print "I'm in the directory ", $ftp->pwd(), "\n"; 
    my $chkdir = $ftp->isdir($copyfrom); 
    if ($chkdir){print qq~directory exists<br />~;} 
    if (!$chkdir){print qq~directory does not exists<br />~;} 
    $ftp->ascii() || die $ftp->message; 
    $ftp->put($copyfrom, $thisfile) or die $ftp->message; 
    $ftp->chmod(755, $thisfile) or warn $ftp->message; 
} 
if ($isfile){ 
    print qq~Remote file exists<br >~; 
} 

$ftp->quit; 


sub myerr { 
    print "Error: \n"; 
    print @ERRORS; 
    exit 0; 
} 

現在,我也只是嘗試的Net :: FTP ::文件及複印件();但是,錯誤的瀏覽器 - - 我已閱讀和閱讀測試,測試,直到軟件錯誤「當前工作目錄‘/’,」

,我在這裏找到自己

除了模塊的選擇(我讀其他地方),我在做什麼。錯了?

服務器與cPanel共享服務器,所以我非常受限制,因此我嘗試了這些ftp模塊。

我很樂意解決我的腳本問題或者在我的服務器上運行的一種完全不同的方法。

感謝這麼多的任何援助..

回答

0

一些注意事項:

  • 使用isfile而不是exits測試文件是否存在時。
  • 爲什麼你從不使用else
  • $path是從未使用過($path$fullpath混亂?
  • 應該不是你的程序die如果本地文件不存在?
  • 如果遠程文件不存在,你cwd$copyfrom而不是向$datedir
  • cwd荷蘭國際集團以$copyfrom後測試(ISDIR)$copyfrom存在,所以你真的測試的/$copyfrom/$copyfrom。這真的是你想要做什麼?
  • 一幾乎沒有人需要設置ascii模式。

BTW,嘗試禁用被動模式,並嘗試啓用調試

my $ftp=Net::FTP->new($host,Timeout=>240, Debug=>1) or $newerr=1; 
+0

是的,問題是一團糟。我不應該把問題的目錄和文件測試作爲開始。那些對我來說只是白癡檢查。我通常使用elsif和其他要求。該代碼實際上只是一個挫敗嘗試的集合。至於ascii,會採取這樣做,因爲它必須是一個ascii xfer? – Stephayne 2011-03-31 21:29:48

+0

二進制模式始終傳輸原始字節,因此傳輸的文件與原始文件相同。 Ascii模式是古老的東西,不要使用它。 – 2011-03-31 21:40:56

+0

謝謝你的信息! – Stephayne 2011-03-31 22:08:49

1

好吧,如果我戴上眼罩,扔飛鏢,我將最終打了公牛。

我沒有真正回答我自己的問題,但是,把飛鏢投向了正確的位置。

#!/usr/bin/perl -w 
########## 
use CGI; 
use strict; 
use CGI::Carp qw(fatalsToBrowser warningsToBrowser); 
print CGI::header(); 
use Net::FTP; 
use Net::FTP::File; 
###################################### 
my $host='ftp.mysite.com'; 
my $username = '[email protected]'; 
my $password='MycAmelsPasSwoRD'; 
my $dateDir ='2011-03-25'; 
my $path = '/home/account/public_html/localfolder/inthisfolder'; 
my $directory = $path.'/'.$dateDir; 
my $scriptfile= 'somescript.pl'; 
my $file = $path.'/'.$dateDir.'/'.$scriptfile; 
################################# 
my $ftp = Net::FTP->new($host,Timeout=>240,Passsive=>1) or die "Cannot connect to hostname: [email protected]"; 
$ftp->login($username, $password) or die $ftp->message; 
$ftp->mkdir($dateDir) or die $ftp->message; 
$ftp->cwd($dateDir) or die $ftp->message; 
#$ftp->ascii(); 
$ftp->put($file) or die $ftp->message; 
$ftp->chmod(755,$scriptfile) or die $ftp->message; 
$ftp->quit(); 

我確實在stackoverflow中找到有用的信息,救命啊!

希望有人會發現我發佈的這段代碼很有用!

相關問題