在PHP中仅从FTP服务器下载新图像

时间:2017-03-27 11:32:38

标签: php ftp

我制作了一个小脚本,允许我从FTP服务器下载图像。但是,问题是,每当我执行脚本时,都会下载所有图像。有没有办法重写代码,以便它只下载新的图像?

我的脚本如下所示:

$ftp_server = "my_server_ip";
$ftp_user = "my_user_name";
$ftp_pass = "my_password";
$DIR="my_path_to_images_folder";

$conn = ftp_connect($ftp_server);
if(!$conn)
{
    exit("Can not connect to server: $ftp_server\n");
}

if(!ftp_login($conn,$ftp_user,$ftp_pass))
{
    ftp_quit($conn);
    exit("Can't login\n");
}

ftp_chdir($conn,$DIR);

$files = ftp_nlist($conn,'.');
for($i=0;$i<count($files);$i++)
{
    if(!ftp_get($conn,$files[$i],$files[$i],FTP_BINARY))
    {
        echo "Can't download {$files[$i]}\n";
    }
    else
    {
        echo "Successfully transferred images!";
    }
}

ftp_quit($conn);

谢谢。

3 个答案:

答案 0 :(得分:5)

要仅下载本地不存在或比本地副本更新的文件,请使用:

$files = ftp_nlist($conn, '.');

foreach ($files as $file)
{
    $remote_time = ftp_mdtm($conn, $file);

    if (!file_exists($file) ||
        (filemtime($file) < $remote_time))
    {
        ftp_get($conn, $file, $file, FTP_BINARY);
        touch($file, $remote_time);
    }
}

如果您的服务器支持MLSD命令并且您拥有PHP 7.2及更高版本,则可以通过一次有效调用ftp_mlsd function来替换ftp_nlist并重复呼叫ftp_mdtm。< / p>

答案 1 :(得分:2)

您可以使用方法file_exists()来检查图像可用性 如果此方法返回true,则不要复制而不是文件。
我想你可以在没有我帮助的情况下修改脚本:)

答案 2 :(得分:1)

您需要定义“新”。

将已传输的图像写入日志文件,然后下次运行脚本时,您可以查找已传输的内容,并仅传输“新”图像(不在日志文件中的图像...)< / p>