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

仅从PHP中的FTP服务器下载新图像,php,ftp,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) {

我制作了一个小脚本,允许我从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);
$ftp\u server=“my\u server\u ip”;
$ftp\u user=“我的用户名称”;
$ftp\u pass=“我的密码”;
$DIR=“我的图片路径到图片文件夹”;
$conn=ftp\U连接($ftp\U服务器);
如果(!$conn)
{
退出(“无法连接到服务器:$ftp_服务器\n”);
}
如果(!ftp_登录($conn、$ftp_用户、$ftp_通行证))
{
ftp_退出(康涅狄格州);
退出(“无法登录\n”);
}
ftp_chdir($conn,$DIR);
$files=ftp_nlist($conn,'.');
对于($i=0;$i您需要定义“新建”

将已传输的图像写入日志文件,然后下次运行脚本时,您可以查找已传输的图像,只传输“新”图像(不在日志文件中的图像…)

您需要定义“新”


将已传输的图像写入日志文件,然后下次运行脚本时,您可以查找已传输的图像,只传输“新”图像(不在日志文件中的图像…

您可以使用方法文件检查图像可用性。\u exists()
如果此方法返回true,则不要复制该文件。

我想您可以在没有我帮助的情况下修改脚本:)

您可以使用方法file_exists()检查图像可用性 如果此方法返回true,则不要复制该文件

我想您可以在没有我的帮助的情况下修改脚本:)
若要仅下载本地尚不存在或比本地副本更新的文件,请使用:

$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);
    }
}
$files=ftp\u nlist($conn,”);
foreach($files作为$file)
{
$remote\u time=ftp\u mdtm($conn,$file);
如果(!file_存在($file)||
(filemtime($file)<$remote\u time))
{
ftp\u get($conn,$file,$file,ftp\u二进制文件);
触摸($file,$remote\u time);
}
}


如果您的服务器支持
MLSD
命令,并且您有PHP 7.2及更高版本,则可以使用一次对的有效调用来替换
ftp\u nlist
和重复调用
ftp\u mdtm

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

$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);
    }
}
$files=ftp\u nlist($conn,”);
foreach($files作为$file)
{
$remote\u time=ftp\u mdtm($conn,$file);
如果(!file_存在($file)||
(filemtime($file)<$remote\u time))
{
ftp\u get($conn,$file,$file,ftp\u二进制文件);
触摸($file,$remote\u time);
}
}


如果您的服务器支持
MLSD
命令,并且您有PHP7.2及更新版本,您可以用一个有效的调用来替换
ftp\u nlist
和重复调用
ftp\u mdtm

«您需要定义“new”»是的,有很多“new”文件。=>不存在的文件,自年以来已修改的文件,文件newr,即您已有的文件。«您需要定义“new”»是的,有很多“new”文件。=>不存在的文件,自年以来已修改的文件,新的文件,即您已有的文件。您的回答很好,但如果文件存在但已更新,该怎么办?您的回答很好,但如果文件存在但已更新,该怎么办?Thanx,我尝试了这个方法,效果很好。谢谢大家的努力@mishanonThanx,我试过这个,效果很好。谢谢大家的努力@米沙农