2011-04-09 67 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扩展的方法。它也可能很慢。