我正在尝试编写一个返回的函数和按时间修改的文件名数组。 虽然我想只获取特定数量的文件,而不是目录中的整个文件。 总之,我想得到一个包含目录中最新X文件的数组。
这是我的代码:
public static function GetPicsDir()
{
$results = array();
$handler = opendir("pics");
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$results[] = $file;
}
}
closedir($handler);
return $results;
}
我不知道如何限制它并按时间修改。 我很乐意得到任何帮助。
谢谢
答案 0 :(得分:1)
使用filemtime()
:
public static function GetPicsDir()
{
$results = array();
$handler = opendir("pics");
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$results[$time] = filemtime($file);
}
}
arsort($results);
closedir($handler);
return $results;
}
答案 1 :(得分:0)
您可以使用glob
$date = strtotime('2013-01-10 10:00:00');//The date from you want to get the files
$matches = glob('dir/*.*');
$result=array();
if (is_array($matches)) {
$a=0;
foreach ($matches as $filename) {
if (filemtime($filename) >= $date) {//only output file >= your $date
$result[$a]['FileName'] = $filename;
$result[$a]['DateCreated'] = gmdate("Y-m-d H:i:s", filemtime($filename));
}
$a++;
}
}
if(count($result)>=2){//order array if it has at least 1 match
foreach ($result as $key => $row) {
$new_array[$key] = $row['DateCreated'];
}
array_multisort($new_array,SORT_DESC,$result);//Show most recent first
}
使用array_multisort按日期排序SORT_DESC
echo '<pre>';
print_r($result);
echo '<pre>';
输出:
Array
(
[0] => Array
(
[FileName] => test.php
[DateCreated] => 2013-10-20 05:43:06
)
[1] => Array
(
[FileName] => test.sql
[DateCreated] => 2013-09-20 23:38:05
)
[2] => Array
(
[FileName] => general.php
[DateCreated] => 2013-09-02 00:58:33
)
)
答案 2 :(得分:0)
如果您只想按上次修改日期对文件进行排序,则可以使用
ftp_nlist($conn, '-t .');
但这并不会告诉你每个文件的日期是什么。
如果您还想获得修改日期,可以使用ftp_rawlist并解析输出。这是我拼凑的一个简单例子:
$list = ftp_rawlist($ftp, '.');
$results = array();
foreach ($list as $line) {
list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
preg_split('/\s+/', $line, 9);
$stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
$results[] = array('name' => $name, 'timestamp' => $stamp);
}
usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });
此时$ results包含按上次修改时间升序排序的列表;反转排序功能,以最近修改的第一种格式获取列表。