2011-04-09 95 views

回答

1

在理論上就像蛋糕一樣簡單。首先,請參閱FTP功能:http://www.php.net/manual/en/function.ftp-fput.php。然後我們使用FOPEN包裝(http://www.php.net/manual/en/wrappers.php)打開我們想要讀取的文件,併發送它。

要修改php.net例如:

<?php 

// open some file for reading 
$file = 'somefile.txt'; 
$fp = fopen('ftp://user:[email protected]/' . $file, 'r'); 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// try to upload $file 
if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) { 
    echo "Successfully uploaded $file\n"; 
} else { 
    echo "There was a problem while uploading $file\n"; 
} 

// close the connection and the file handler 
ftp_close($conn_id); 
fclose($fp); 

?> 

哦,你可能想有時非阻塞:http://www.php.net/manual/en/function.ftp-nb-fput.php

0

PHP的內置FTP擴展可以uploaddownload文件以異步的方式。

但是聽起來好像你正在討論使用這種方法在兩個不同的FTP連接之間傳輸文件,而不是首先下載整個文件。我不確定這些功能是否支持。事實上,我希望否則 - 在下載過程中上傳可能會到達文件的末尾,並且簡單地假設它已經達到最後並完成自己。

在上傳手冊鏈接上有一些建議,您可以欺騙一些服務器使用被動模式執行直接連接,但我會用一粒鹽。

使用FTP stream wrappers可能會帶來一些好運。您可以打開兩個FTP包裝文件作爲文件句柄,然後使用fread從一側檢索特定大小的塊,並將fwrite寫入另一側。請記住,您需要在循環中執行此操作,因此無法在後臺完成,例如FTP擴展的方法。它也可能很慢。