仅 ftping 仅今天的文件

Posted

技术标签:

【中文标题】仅 ftping 仅今天的文件【英文标题】:ftping only todays files only 【发布时间】:2011-03-24 17:25:01 【问题描述】:

我是 php 新手。有一个任务是从包含文件的服务器上 ftp 一个多星期的今天的文件。如何根据日期和 ftp 选择或过滤文件到我的本地文件夹。 非常感谢您的帮助!

所罗门

【问题讨论】:

【参考方案1】:

链接: http://www.php.net/manual/en/function.ftp-rawlist.php

你连接到服务器, 获取ftp_rawlist()的文件列表

并通过ftp_fget() 获取您想要的文件

例子

<?php

// 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);

// get the file list for /
$rawfiles = ftp_rawlist($conn_id, '/');

foreach ($rawfiles as $rawfile) 
# parse the raw data to array
if(!empty($rawfile)) 
    $info = preg_split("/[\s]+/", $rawfile, 9);       
    $arraypointer[] = array(
        'text'   => $info[8],
        'isDir'  => $info[0]0 == 'd',
        'size'   => byteconvert($info[4]),
        'chmod'  => chmodnum($info[0]),
        'date'   => strtotime($info[6] . ' ' . $info[5] . ' ' . $info[7]),
        'raw'    => $info
        // the 'children' attribut is automatically added if the folder contains at least one file
    );
// pseudo code check the date
 if($arraypointer['date'] is today) 
   ftp_fget(file);


// close the connection
ftp_close($conn_id);

// output the buffer
var_dump($buff);
?>

【讨论】:

【参考方案2】:

如果您已经有要检查的文件名,请使用filemtime

返回文件上次修改的时间,失败时返回 FALSE。时间以 Unix 时间戳的形式返回,适用于 date() 函数。

要比较今天,您可以使用date('Y-m-d') 来获取今天与date('Y-m-d', filemtime($filename)) 的比较

要获取文件名,您可以使用readdir 依次读取每个文件名。

<?php
if ($handle = opendir('/path/to/files')) 
    echo "Directory handle: $handle\n";
    echo "Files:\n";

    while (false !== ($filename = readdir($handle))) 
        echo "$filename\n";
    

    closedir($handle);

?>

该手册还有一个FTP example,它应该向您展示如何在找到文件后进行 ftp。

所以,结合所有这些,你可以得到类似的东西:

<?php
   // 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); 

   // check connection
   if ((!$conn_id) || (!$login_result))  
      echo "FTP connection has failed!";
      echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
      exit; 
    else 
      echo "Connected to $ftp_server, for user $ftp_user_name";
   

   if ($handle = opendir('/path/to/files')) 

   while (false !== ($filename = readdir($handle))) 
      if (date('Y-m-d') == date('Y-m-d', filemtime($filename))) 
         // upload the file
         $upload = ftp_put($conn_id, $destination_file, $filename, FTP_BINARY); 

         // check upload status
         if (!$upload)  
            echo "FTP upload has failed!";
          else 
            echo "Uploaded $source_file to $ftp_server as $destination_file";
         
      
   

   closedir($handle);

   // close the FTP stream 
   ftp_close($conn_id); 
?>

当然,您需要根据需要填写虚拟值。

免责声明:我是在notepad++中输入的,没有经过测试!

【讨论】:

我想我误解了你的问题。如果是这样,请参阅haim的答案。 ***.com/questions/3396685/…

以上是关于仅 ftping 仅今天的文件的主要内容,如果未能解决你的问题,请参考以下文章

bash 查找,仅删除文件 - 参数顺序

如何从 S3 存储桶中仅读取最近 7 天的 csv 文件

Windows上的Git:重命名文件后无法切换分支(仅更改大小写)

android - 加速仅在调试中起作用

如何构建仅签入代码文件以及如何仅签入该构建的 tfs 中的代码工件?

仅限制具有文件类型的特定 AEM DAM 文件夹