我有以下搜索文件夹的功能,抓取所有不以"开头的文件和文件夹。"
$results = [];
function getDirCount($directory, &$results, $friend, $static_path) {
$i = 0;
$entries = scandir($directory);
foreach ($entries as $item) {
if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
$path = $directory . '/' . $item;
$rel_path = $static_path . '/' . $item;
if (is_dir($path)) {
getDirCount($path, $results, $friend, $rel_path);
} else {
$i++;
$pathInfo = pathinfo($path);
$name = $pathInfo['filename'];
$type = 'unknown';
if (!empty($pathInfo['extension'])) {
$name .= "." . $pathInfo['extension'];
switch (strtolower($pathInfo['extension'])) {
case "gif":
case "jpg":
case "png":
case "jpeg":
case "bmp":
//etc..
$type = 'image';
break;
case "mp4":
$type = 'video';
break;
}
}
$tttt = filemtime($path);
$data = [
'name' => $name,
'username' => $friend,
'path' => $rel_path,
'type' => $type,
'id' => $i,
'time' => date('F d Y h:i A', $tttt)
];
$results[] = $data;
}
}
}
return $data;
}
然后我创建了一个循环来计算所有文件。
$friend = strtolower($row['username']);
$directoryToScan = '/absolute/path/to/files/'.$friend;
$rel_path = '/relative/path/to/files/'.$friend;
$tree = getDirCount($directoryToScan, $data, $friend, $rel_path);
for($i=(count($data)-1)-($feed-1);$i>=(count($data)-10)-($feed-1);$i--){
$c = 0;
if ($data !== NULL) {
if(($data[$i]['type']=='image') && ($data[$i]['username'] == $friend)) {
$c++;
}
$photo_count=$c;
}
}
我遇到的问题是,每个文件都被计算两次并输出两次。因此,如果我将文件放在用户目录中并进行检查,则计数将增加2。如果我丢弃5个文件,则计数增加10。
我也尝试将$ c = 0移到for语句之前,但是即使有几十个结果,它似乎无限期地返回1。显然我希望获得正确的文件数。
更新
添加更多代码以帮助解释$ feed是什么。
在一个页面上,我有以下ajax请求。
<script>
var feed;
function loadmorefeed() {
if (feed === undefined || feed === null || feed == '') { feed = 0; }
feed = feed + 1;
$.ajax({
'url': 'stream_feed.php',
'type': 'get',
'data': {
'feed': feed
},
'success': function (data) {
$('.get_stream').append(data);
return;
},
'error': function (request, status, error) {
return;
}
});
}
loadmorefeed(); loadmorefeed(); loadmorefeed();
</script>
然后在页面上进行计数我有
$feed=$_GET['feed'];
答案 0 :(得分:0)
不清楚$ feed以及为什么要对文件进行计数。 要计算所有文件,您可以在功能
后使用下面的内容//GIVES YOU THE TOTAL COUNT
$TotaFilesScaned = count($data);
//TO GET THE COUNT OF IMAGES ONLY
$photo_count = 0;
for($i=0; $i<$TotaFilesScaned;$i++){
if(isset($data[$i]) && ($data[$i]['type']=='image') && ($data[$i]['username'] == $friend))
{
$photo_count++;
}
}
echo $photo_count;