当同一脚本从其他地方下载所需文件时,是否可以使用PHP脚本将文件上传到FTP服务器? 因此,在下载脚本时,它应该实时上传文件。
从理论上讲,它像蛋糕一样容易。首先,请在此处查看FTP功能:http://www.php.net/manual/zh/function.ftp-fput.php。然后,我们使用FOPEN包装器(http://www.php.net/manual/en/wrappers.php)打开要读取的文件,并将其发送过来。
要修改php.net示例:
// 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
";
} else {
echo"There was a problem while uploading $file
";
}
// close the connection and the file handler
ftp_close($conn_id);
fclose($fp);
?>
哦,有时候您可能希望不阻塞:http://www.php.net/manual/en/function.ftp-nb-fput.php
PHP的内置FTP扩展可以异步方式上载和下载文件。
但是,听起来您正在谈论使用此方法在两个不同的FTP连接之间传输文件,而无需先下载整个文件。我不确定这些功能是否支持。实际上,我可能会以其他方式期望-可能是在下载进行时,上载可能到达文件的末尾,而只是假设它快要结束并完成了。
在上传手册链接上有一些评论,建议您可以诱使某些服务器使用被动模式执行直接连接,但是我会花点时间。
使用FTP流包装器可能会有些运气。您可以打开两个FTP包装器作为文件句柄,然后使用fread从一侧检索特定大小的块,然后使用fwrite将它们写入另一侧。请记住,您需要循环执行此操作,因此不能像FTP扩展程序的方法那样在后台执行此操作。它也可能很慢。
PHP可以处理ftp协议,这是php手册中的示例。
PHP支持进程派生,您可以检查pnctl。