PHP + PEAR ( Net_FTP ) で、ディレクトリごと一括ダウンロード

  PHP コード



※ FTP サーバーによっては、Net_FTP の getRecursive が動作しない場合があります

( その場合は、このページの最後の PHP コードを使用して下さい )

  
<?php

$ftp_server=""; 
$ftp_user=""; 
$ftp_pass="";

# 最後に / が必要です
$base_dir = "";
$local_dir = str_replace("\\\\", "/", getenv('LBOX_TARGET') );
$local_dir = str_replace("\\", "/", $local_dir ) . "/";

$cur_dir = getenv('LBOX_CURDIR');

print "リモートのパス : $base_dir\n";
print "ローカルのパス : $local_dir\n";

print "処理を開始しました\n";

set_include_path("$cur_dir/PEAR");
require_once 'Net/FTP.php';

$ftp = new Net_FTP();
$ftp->connect($ftp_server, 21);
$ftp->login($ftp_user, $ftp_pass);
$ftp->setPassive();

# エラーが発生すると詳細情報がダンプされます
var_dump($ftp->getRecursive( $base_dir, $local_dir, true, FTP_BINARY ));

$ftp->disconnect();

print "処理が終了しました\n";

?>
  

  バッチファイルで呼び出し



  
set LBOX_TARGET=D:\Backup\PRODUCT\useDf\tool\pear_ftp
set LBOX_CURDIR=D:\Backup\PRODUCT\useDf\tool
"c:\php\cli\php.exe" "D:\Backup\PRODUCT\useDf\tool\pear_ftp_download.php"
  

  上記バツチファイルを作成して全体の実行をする WSH

  
' CLI 版 php.exe ( cgi 版ではないもの )
strPhpCli = "c:\php\cli\php.exe"





Set WshShell = WScript.CreateObject( "WScript.Shell" )
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' **********************************************************
' 実行されているこのディレクトリを取得
' **********************************************************
strCurPath = WScript.ScriptFullName		' このスクリプトのフルパス
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path		' スクリプトがあるフォルダ

' このスクリプトのフルパスから拡張子を除去したもの
strBaseName = strCurPath & "\" & Fso.GetBaseName( WScript.ScriptFullName )
strTargetPath = strCurPath & "\pear_ftp"  ' ftp 用フォルダ

' **********************************************************
' バッチファイル作成
' **********************************************************
Set OutObj = Fso.OpenTextFile( strBaseName & ".bat", 2, True )
OutObj.WriteLine "set LBOX_TARGET=" & strTargetPath
OutObj.WriteLine "set LBOX_CURDIR=" & strCurPath
OutObj.Write """" & strPhpCli & """" & " " 
OutObj.Write """" & strBaseName & ".php"""
OutObj.WriteLine ""
OutObj.WriteLine "pause"
OutObj.Close

' **********************************************************
' 同期でコマンドプロンプトを開いて、PAUSE
' **********************************************************
strCommand = "cmd.exe /c """ & strBaseName & ".bat"""
Call WshShell.Run( strCommand, , True )
  

  PEAR を使用しない一括ダウンロード

  
<?php

$ftp_server=""; 
$ftp_user=""; 
$ftp_pass="";

# 最後に / は必要ありません
$base_dir = "";






$base_dir2 = $base_dir;
$local_dir = getenv('LBOX_WORK');

print "リモートのパス : $base_dir\n";
print "ローカルのパス : $local_dir\n";

print "処理を開始しました\n";

$conn = ftp_connect($ftp_server);
if (!$conn) {
	die('接続できません');
}

$result = @ftp_login($conn, $ftp_user, $ftp_pass); 
if (!$result) {
	die('ログインできません');
}

// パッシブモードをオン
ftp_pasv($conn, TRUE);

// 詳細リスト取得
$list = ftp_rawlist( $conn, $base_dir );
// 一覧用配列
$dir = array();
$file = array();

// 詳細リストの数
$max = count($list);
for( $i = 0; $i < $max; $i++ ) {
	// ディレクトリの場合
	if ( substr( $list[$i], 0, 1 ) == 'd' ) {
		// 配列作成
		$data = explode( " ", $list[$i] );
		// 一番最後が名前
		$target = array_pop( $data );
		if ( $target != '.' && $target != '..' ) {
			$dir[] = $base_dir . '/' . $target;
		}
	}
	// ファイルの場合
	else {
		// 配列作成
		$data = explode( " ", $list[$i] );
		// 一番最後が名前
		$target = array_pop( $data );
		$file[] = $base_dir . '/' . $target;
	}
}

for( $pos = 0; $pos < count($dir); $pos++ ) {
	$base_dir = $dir[$pos];
	$list = ftp_rawlist( $conn, $base_dir );

	$max = count($list);
	for( $i = 0; $i < $max; $i++ ) {
		// ディレクトリの場合
		if ( substr( $list[$i], 0, 1 ) == 'd' ) {
			// 配列作成
			$data = explode( " ", $list[$i] );
			// 一番最後が名前
			$target = array_pop( $data );
			if ( $target != '.' && $target != '..' ) {
				$dir[] = $base_dir . '/' . $target;
			}
		}
		// ファイルの場合
		else {
			// 配列作成
			$data = explode( " ", $list[$i] );
			// 一番最後が名前
			$target = array_pop( $data );
			$file[] = $base_dir . '/' . $target;
		}
	}
}

for( $pos = 0; $pos < count($dir); $pos++ ) {
	$work = str_replace( $base_dir2, $local_dir, $dir[$pos] );
	$work = str_replace( "/", "\\", $work );
	@mkdir( $work );
}

print "ダウンロードするファイル数 : " . count($file) . "\n";
for( $pos = 0; $pos < count($file); $pos++ ) {
	$work = str_replace( $base_dir2, $local_dir, $file[$pos] );
	$work = str_replace( "/", "\\", $work );
	print $pos+1 . " 番目のファイルをダウンロードしています......\n";
	ftp_get( $conn, $work, $file[$pos], FTP_BINARY );
}

ftp_close($conn);

print "処理が終了しました\n";

?>
  











   SQLの窓    create:2007/01/12  update:2014/09/07   管理者用(要ログイン)





フリーフォントWEBサービス

SQLの窓WEBサービス

SQLの窓フリーソフト

写真素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ