同じFTPの2つの異なる場所に同じファイルをアップロードする必要があります。もう一度アップロードする代わりに、FTP上のファイルを別の場所にコピーする方法はありますか?ありがとう。
ダウンロードして再アップロードせずにファイルをコピーする方法はないと思います。少なくとも FTPコマンドのリスト でこのようなものは見つかりませんでした。 。
FTPプロトコルを介してリモートファイルを複製する標準的な方法はありません。一部のFTPサーバーは、このために独自のまたは非標準の拡張機能をサポートしています。
一部のFTPクライアントは、リモートファイルの複製をサポートしています。拡張機能を使用するか、リモートファイルの一時的なローカルコピーを使用します。
たとえば WinSCP FTP client は 複製をサポート をドラッグ&ドロップとメニュー/キーボードコマンドの両方を使用して実行します。
SITE CPFR
/CPTO
FTP拡張機能をサポートします(たとえば ProFTPD mod_copyモジュール でサポートされています)(WinSCPの作成者です)
別の回避策は、FTPサーバーへの2番目の接続を開き、パッシブモードのデータ接続をアクティブモードのデータ接続にパイプすることによって、サーバーにファイルをアップロードすることです。このソリューションは answer by @SaadAchemlal に示されています。
補足:moveとcopyを混同することがよくあります。実際にmoveを実行したい場合、それはまったく別の質問です。 FTPでのファイルの移動は広くサポートされています。
はい、理論的にはFTPプロトコル自体がこれをサポートできます。 FTP RFC 959 は、これについてセクション5.2で説明します(「2つのサーバーAとBの間でデータを転送する場合」で始まる段落を参照してください)。しかし、私はこの種の二重サーバー制御操作を提供するクライアントを知りません。
この方法では、独自のネットワークを使用してFTPサーバーからそれ自体にファイルを転送できます。これは、ローカルファイルのコピーほど高速ではありませんが、ファイルをダウンロードしてから再アップロードするよりもほぼ確実に高速です。
以下のコードは、FTPサーバーにファイルをアップロードします(ループバック接続を使用)。パッシブ接続モードとアクティブ接続モードの両方を許可するには、FTPサーバーが必要です。
あなたがftpコマンドを理解したいなら、ここにそれらのリストがあります: ftpコマンドのリスト
function copyFile($filePath, $newFilePath)
{
$ftp1 = ftp_connect('192.168.1.1');
$ftp2 = ftp_connect('192.168.1.1');
ftp_raw($ftp1, "USER ftpUsername");
ftp_raw($ftp1, "PASS mypassword");
ftp_raw($ftp2, "USER ftpUsername");
ftp_raw($ftp2, "PASS mypassword");
$res = ftp_raw($ftp2, "PASV");
$addressAndPort = substr($res[0], strpos($res[0], '(') + 1);
$addressAndPort = substr($addressAndPort, 0, strpos($addressAndPort, ')'));
ftp_raw($ftp1, "CWD ." . dirname($newFilePath));
ftp_raw($ftp2, "CWD ." . dirname($filePath));
ftp_raw($ftp1, "PORT ".$addressAndPort);
ftp_raw($ftp1, "STOR " . basename($newFilePath));
ftp_raw($ftp2, "RETR " . basename($filePath));
ftp_raw($ftp1, "QUIT");
ftp_raw($ftp2, "QUIT");
}
Linuxベースのシステムのリモートフォルダー間でファイルをコピーできます。私の特定のケースでは、非常に一般的なファイルマネージャーPCManFMを使用しています。
それは少し遅いので、ファイルのダウンロードとアップロードが可能であると思いますが、それは自動的に行われ、非常にユーザーフレンドリーです。
WebDriveを使用してローカルフォルダーとしてftpをマウントし、filezillaを使用してファイルを直接フォルダーに「ダウンロード」することで、これを行うことができました。通常のダウンロードよりも少し遅いですが、HDDにスペースを確保する必要はありません。