|
<?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";
?>
| |