2009-08-17 66 views
1

Net::FTPとPerlで複数のファイルをアップロードしようとしています。以下の私の基本的なスクリプトでさえ失敗する人は誰ですか?PerlのNet :: FTPでファイルをアップロードできないのはなぜですか?

use Net::FTP; 
use File::Basename; 

my $ftp; 
my $host ='56.309.24.2'; 
my $user ='user'; 
my $pw ='pass'; 

my $file ='097360718843.jpeg'; 
my $path ='public_html/uploaded/product_images'; 

chomp($host,$user,$pw,$path, $file); 

$ftp=Net::FTP->new($host) or die "could not login"; 
$ftp->login($user,$pw) or die "could not login"; 
$ftp->cwd($path) or die "could not cwd $path"; 
$ftp->ls; 
$ftp->put($file) or die "could not put $file"; 
$ftp->site("chmod 600 " . basename($file)); 

ここ転送のログです:

Net::FTP>>> 
Net::FTP(2.75) 
Net::FTP>>> Exporter(5.58) 
Net::FTP>>> 
Net::Cmd(2.26) 
Net::FTP>>> IO::Socket::INET(1.27) 
Net::FTP>>> IO::Socket(1.28) 
Net::FTP>>> IO::Handle(1.24) 
Net::FTP=GLOB(0x180c6a8)<<< 220---------- Welcome to Pure-FTPd [TLS] ---------- 
Net::FTP=GLOB(0x180c6a8)<<< 220-You are user number 1 of 50 allowed. 
Net::FTP=GLOB(0x180c6a8)<<< 220-Local time is now 16:19. Server port: 21. 
Net::FTP=GLOB(0x180c6a8)<<< 220-IPv6 connections are also welcome on this server. 
Net::FTP=GLOB(0x180c6a8)<<< 220 You will be disconnected after 15 minutes of inactivity. 
Net::FTP=GLOB(0x180c648)>>> user user_name 
Net::FTP=GLOB(0x180c648)<<< 331 User user_name OK. Password required 
Net::FTP=GLOB(0x180c648)>>> PASS .... 
Net::FTP=GLOB(0x180c648)<<< 230-User user_name has group access to: user_name wheel 
Net::FTP=GLOB(0x180c648)<<< 230 OK. Current restricted directory is/
Net::FTP=GLOB(0x180c648)>>> CWD public_html/uploaded/product_images/ 
Net::FTP=GLOB(0x180c648)<<< 250 OK. Current directory is /public_html/uploaded/product_images 
Net::FTP=GLOB(0x180c648)>>> PORT 192,168,1,10,200,38 
Net::FTP=GLOB(0x180c648)<<< 200 PORT command successful 
Net::FTP=GLOB(0x180c648)>>> NLST 
Net::FTP=GLOB(0x180c648)<<< 150 Connecting to port 50703 
Net::FTP=GLOB(0x180c648)<<< 226-Options: -a 
Net::FTP=GLOB(0x180c648)<<< 226 Output truncated to 2000 matches 
Net::FTP=GLOB(0x180c648)>>> ALLO 7903 
Net::FTP=GLOB(0x180c648)<<< 200 Zzz... 
Net::FTP=GLOB(0x180c648)>>> PORT 192,168,1,10,200,39 
Net::FTP=GLOB(0x180c648)<<< 200 PORT command successful 
Net::FTP=GLOB(0x180c648)>>> STOR 097360718843.jpeg 
Net::FTP=GLOB(0x180c648)<<< 150 Connecting to port 50704 
Net::FTP=GLOB(0x180c648)<<< 226-File successfully transferred 
Net::FTP=GLOB(0x180c648)<<< 226 0.381 seconds (measured here), 20.21 Kbytes per second 
Net::FTP=GLOB(0x180c648)>>> SITE chmod 600 097360718843.jpeg 
Net::FTP=GLOB(0x180c648)<<< 200 Permissions changed on 097360718843.jpeg 
+3

スクリプトはどこで失敗しますか?またはスクリプトは完了しますが、ファイルをアップロードしないだけですか? – chollida

+0

完了しましたが、ファイルをアップロードしません。 –

+0

ファイルがアップロードされたことをどのように確認していますか?あなたが掲示したデバッグログによると、それは正常にアップロードされました。 –

答えて

3

使用

my $ftp = Net::FTP->new($host, Debug => 1) 
    or die "Could not create FTP object: [email protected]"; 

追加をお勧め:

  • 必ず

    を持っていることを確認します
    use strict; 
    use warnings; 
    
  • 変数が必要になる前に宣言しないでください。

  • エラーメッセージにエラーを含めます。要するに

、次のスクリプトを試してみてください。

#!/usr/bin/perl 

use strict; 
use warnings; 

use Net::FTP; 

my $host ='56.309.24.2'; 
my $user ='user'; 
my $pw ='pass'; 

my $file ='097360718843.jpeg'; 
my $path ='public_html/uploaded/product_images'; 

my $ftp = Net::FTP->new($host, Debug => 1) 
    or die "Could not connect to '$host': [email protected]"; 

$ftp->login($user, $pw) 
    or die sprintf "Could not login: %s", $ftp->message; 

$ftp->cwd($path) 
    or die sprintf "Could not login: %s", $ftp->message; 

$ftp->ls; 

$ftp->binary; 

$ftp->put($file) 
    or die die sprintf "Could not login: %s", $ftp->message; 

$ftp->site("chmod 600 $file"); 
+0

私は出力を得ました。私は接続が行われているがアップロードはしないようにサーバーにログインしています。 –

+0

@unknown(グーグル):あなたは、デバッグ出力を提供する必要があります。 –

+0

Net :: FTP >>> Net :: FTP(2.75) Net :: FTP >>>エクスポータ(5.58) Net :: FTP >>> Net :: Cmd(2.26) Net :: FTP >>> IO ::ソケット:: INET(1.27) ネット:: FTP >>> IO ::ソケット(1.28) ネット:: FTP >>> IO ::ハンドル(1.24) ネット:: FTP = GLOB(0x180c6a8) <<< 220 ----------ピュア-FTPD [TLS] ---------- ネット:: FTP = GLOB(0x180c6a8)<<< 220-あなたはユーザーへようこそ1の50の番号が許可されます。 ネット:: FTP = GLOB(0x180c6a8は)<<< 220-現地時間は今16時19です。サーバーポート:21. Net :: FTP = GLOB(0x180c6a8)<<< 220 - このサーバーでもIPv6接続が可能です。 Net :: FTP = GLOB(0x180c6a8)<<< 220あなたは15分の休止後に切断されます。 –

1

先ディレクトリ上の保護を確認してください。 ファイルを作成できることを確認してください。

ファイル自体の保護を確認してください。 ファイルを上書きできることを確認してください。

226-File successfully transferred 

、それがWebブラウザでファイルのURLを介してアクセスできるようにする必要があります

+0

さて、実際にはファイルをアップロードしていないので、私はdirで見ることができません。私はこのディレクトリにファイルを作成し、サードパーティのftpプログラムを使ってファイルをアップロードすることもできます。私は本当になぜこれが起こっているのかを犠牲にしています。 –

0

アップロードが成功しています。しかし、あなたはので、FTPサーバのファイルリストの制限のFTPクライアントでそれを見ることができません - ファイル量が2000超えて:

226 Output truncated to 2000 matches 
ソリューションは、他のフォルダに保存するか、サーバ側のFTPの設定へのアクセス権を持っている場合は変更されるだろう

そのファイルの制限。

関連する問題