使用PHP通过FTP实时上传文件

时间:2011-04-09 19:30:44

标签: php ftp

是否可以使用PHP脚本将文件上传到FTP服务器,同时相同的脚本从其他地方下载意图文件?因此,在下载脚本时,它应该实时上传文件。

3 个答案:

答案 0 :(得分: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:pass@domain.com/' . $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

答案 1 :(得分:0)

PHP可以处理ftp协议,以下是the php manual的示例。

PHP支持进程分叉,您可以检查pnctl

答案 2 :(得分:0)

PHP的内置FTP扩展可以异步方式发送uploaddownload个文件。

然而听起来你正在谈论使用它作为一种方法在两个不同的FTP连接之间传输文件而不首先下载整个文件。我不确定这些功能是否支持。事实上,我希望不然 - 在下载过程中,上传可能会到达文件的末尾,并且只是假设它已经到达终点并完成了自己。

上传手动链接上有一些评论表明你可以欺骗某些服务器使用被动模式执行直接连接,但我会采取一些措施。

使用FTP stream wrappers可能会有运气。您可以打开两个FTP包装器作为文件句柄,然后使用fread从一侧检索特定大小的块,并fwrite将它们写入另一侧。请记住,您需要在循环中执行此操作,因此无法在后台执行此操作,如FTP扩展的方法。它也可能很慢。