1

そのため、FTPを使用してローカルサーバーからリモートサーバーにファイルをコピーしようとしています。問題は、これをチャンクで行う必要があるということです。

これまでのところ、私の調査によれば、ローカルサーバー上にコピーするファイルと現在のチャンクを保持する小さな一時ファイルの2つのファイルを作成することで、これを行うのがおそらく最も簡単なようです。次に、そのチャンクをリモートファイルと単純にマージする必要があります。

問題は、ファイルの追加に問題があることです。プロトコルがどのftp://ように機能するかを理解できず、cURLでそれを行う方法についての包括的な説明を見つけることができません。私が見つけた最も近いものはこれですが、私はそれを動作させることができませんでした。

以下は私がこれまでに書いたものです。私はそれをコメントしたので、あなたはそれをざっと読んでアイデアを得て、私がどこに行き詰まっているのかを見ることができます-コードは複雑ではありません。あなたは私が何をすることをお勧めしますか?ローカルサーバー上のファイルをFTPを使用してリモートサーバー上のファイルに追加するにはどうすればよいですか?

<?php

// FTP credentials
$server = HIDDEN;
$username = HIDDEN;
$password = HIDDEN;

// Connect to FTP
$connection = ftp_connect($server) or die("Failed to connect to <b>$server</b>.");

// Login to FTP
if (!@ftp_login($connection, $username, $password))
{
    echo "Failed to login to <b>$server</b> as <b>$username</b>.";
}

// Destination file (where the copied file should go)
$destination = 'final.txt';

// The file on my server that we're copying (in chunks) to $destination.
$read = 'readme.txt';

// Current chunk of $read.
$temp = 'temp.tmp';

// If the file we're trying to copy exists...
if (file_exists($read))
{
    // Set a chunk size (this is tiny, but I'm testing
    // with tiny files just to make sure it works)
    $chunk_size = 4;

    // For reading through the file we want to copy to the FTP server.
    $read_handle = fopen($read, 'r');

    // For writing the chunk to its own file.
    $temp_handle = fopen($temp, 'w+');

    // Loop through $read until we reach the end of the file.
    while (!feof($read_handle))
    {
        // Read a chunk of the file we're copying.
        $chunk = fread($read_handle, $chunk_size);

        // Write that chunk to its own file.
        fwrite($temp_handle, $chunk);

        ////////////////////////////////////////////
        ////                                    ////
        ////       NOW WHAT?? HOW DO I          ////
        ////       WRITE / APPEND THAT          ////
        ////       CHUNK TO $destination?       ////
        ////                                    ////
        ////////////////////////////////////////////
    }
}

fclose($read_handle);
fclose($temp_handle);
ftp_close($ftp_connect);
?>
4

1 に答える 1

0

まず、tmp ファイルを作成する必要はないと思います。マニュアルaで定義されているように「追加モード」( ) を使用するか、フラグを使用して、宛先ファイルに追加できます。file_put_contentsFILE_APPEND

file_put_contentsは、ファイル ハンドルではなくパラメータとしてファイル名を使用するため、基本的にはそうしfopenます。fopenfwrite

<?php
// The URI of the remote file to be written to
$write = 'ftp://username1:password1@domain1.com/path/to/writeme.txt';

// The URI of the remote file to be read
$read = 'ftp://username2:password2@domain2.com/path/to/readme.txt';

if (file_exists($read)) // this will work over ftp too
{
    $chunk_size = 4;
    $read_handle = fopen($read, 'r');
    $write_handle = fopen($write, 'a');

    while (!feof($read_handle))
    {
        $chunk = fread($read_handle, $chunk_size);
        fwrite($write_handle, $chunk);
    }
}

fclose($read_handle);
fclose($write_handle);
?>

補足として、PHP には、ftp 関数自体を使用せずに簡単に ftp アクセスできるようにするストリーム ラッパーがあります。

于 2012-06-29T18:38:08.790 に答える