0

だから私はフォルダとすべてのコンテンツ(サブフォルダを含む)のローカルコピーを作成してリモートサーバーにコピーを送信する関数を作成しようとしています、ローカルコピーは問題ありませんが、ftpコピーはそのようにフォーマットされていませんしたほうがいい。それらは両方ともすべてのファイルを持っていますが、ftpバージョンはファイル構造を正しくフォーマットしていません。調べましたが、この問題のある投稿は見つかりませんでした。そのため、ポインタがあれば役に立ちます。

例:正しい

  • 主要
    • サブ1
    • サブ2
    • サブ3
    • サブ4
      • 4-1のサブ
      • 4-2のサブ

しかし、これは私が得るものです、

  • 主要
    • サブ4
      • サブ0f4-1
        • サブ0f4-2
          • サブ3
            • サブ2
              • サブ1
コードは次のとおりです。

function copyr($source, $dest, $conId) {
    $sourceName = explode('/',$dest); 
    $sourceName = $sourceName[count($sourceName)-1];

    // copy file
    if (is_file($source)) {
        $upLink = ftp_fput($conId, $sourceName, fopen($source, 'r'), FTP_ASCII);
        return copy($source, $dest);
    }
    // Make destination directory
    if (!is_dir($dest)) {
        mkdir($dest);
        ftp_mkdir($conId, $sourceName);
        ftp_chdir($conId, $sourceName);
    } else if(is_dir($dest)){ // go to one that has been made.
        ftp_chdir($conId, $sourceName);
    }
    // Loop the folder
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }
        // Copy sub directories
        if ($dest !== "$source/$entry") {
            copyr("$source/$entry", "$dest/$entry", $conId, $entry);
        }
    }
    // Clean up
    $dir->close();
    return true;
}
$source = 'images';
$dest = 'NewImages';
if(copyr($source, $dest, $conId)){
    echo "It's finished .... Good.";
} else {
    echo "Failed ... ";
}
ftp_close($conId);

この一部は、ftpの.netマニュアルを確認した後、php.netから他の部分をまとめてコピーしました。

ありがとう。

4

1 に答える 1

0

cd ..再帰から戻った後、ディレクトリ(たとえば)から戻るのを忘れました。

于 2012-05-03T20:36:57.780 に答える