PHPでFTPアップロードをストリーミングすることは可能ですか?別のサーバーにアップロードする必要のあるファイルがあり、FTP経由でのみそのサーバーにアクセスできます。残念ながら、このサーバーのタイムアウト時間を増やすことはできません。これを行うことは可能ですか?
基本的に、ファイルの一部を書き込んでから、一度に全部をアップロードするのではなく、次の部分を追加する(そして繰り返す)方法があれば、それは私を救うでしょう。しかし、私のグーグルは私に答えを提供していません。
これは達成可能ですか?
OKじゃあ...これはあなたが探しているものかもしれません。あなたはカールに精通していますか?
CURLはFTPの追加をサポートできます。
curl_setopt($ ch、CURLOPT_FTPAPPEND、TRUE); //フラグを追加
もう1つのオプションは、ftp:// / ftps://ストリームを使用することです。これは、PHP5では追加が許可されているためです。ftp://を参照してください。ftps://ドキュメント。アクセスしやすいかもしれません。
リモートファイルの最後にチャンクを追加する最も簡単な方法は、フラグを指定して使用file_put_contentsすることです。FILE_APPEND
file_put_contents('ftp://username:password@hostname/path/to/file', $chunk, FILE_APPEND);
それが機能しない場合は、PHPでURLラッパーが有効になっていないことが原因である可能性があります。
書き込みをより細かく制御する必要がある場合(転送モード、パッシブモードなど)、またはを使用できない場合は、 (または)ストリームへのハンドルをfile_put_contents使用して:を使用します。ftp_fputphp://tempphp://memory
$conn_id = ftp_connect('hostname');
ftp_login($conn_id, 'username', 'password');
ftp_pasv($conn_id, true);
$h = fopen('php://temp', 'r+');
fwrite($h, $chunk);
rewind($h);
// prevent ftp_fput from seeking local "file" ($h)
ftp_set_option($conn_id, FTP_AUTOSEEK, false);
$remote_path = '/path/to/file';
$size = ftp_size($conn_id, $remote_path);
$r = ftp_fput($conn_id, $remote_path, $h, FTP_BINARY, $size);
fclose($h);
ftp_close($conn_id);
(エラー処理を追加)