我想让用户在自己的文件夹中上传一些文件(图片)。但这只有在该文件夹包含的图片少于五张时才有可能。如果已经有 5 张图片,脚本必须让用户知道他/她的文件夹已满。所以,我想知道php中是否有计算文件夹中文件数量的函数。或者 php 中的任何其他方式来做到这一点?提前致谢。
问问题
10494 次
6 回答
9
使用FilesystemIterator
如下所示:
$dir = "/path/to/folder";
$fi = new FilesystemIterator($dir, FilesystemIterator::SKIP_DOTS);
$fileCount = iterator_count($fi);
于 2013-09-03T13:38:39.247 回答
6
没有什么比这更容易了:使用opendir()
,readdir()
就像跟随:
<?php
$images_extension_array = array("jpg","jpeg","gif","png");
$dir = "/path/to/user/folder";
$dir_resource = opendir($dir);
$file_count = 0;
while (($file = readdir($dir_resource)) !== false) { // scan directory
$extension_from = strrpos($file,"."); // isolate extension index/offset
if ($extension_from && in_array(substr($file,$extension_from+1), $images_extension_array))
$file_count ++; //if has extension and that extension is "associated" with an image, count
}
if ($number_of_files == %) {
//do stuff
}
显然这没有考虑文件扩展名......
您还可以使用:
于 2013-09-03T13:32:59.443 回答
2
您可以让 PHP 为您找到文件……然后计算它们。
$count = count(glob("$path_to_user_dir/*"));
于 2013-09-03T13:40:17.133 回答
1
我真的很喜欢 dops 的回答,但它会返回文件、目录和符号链接的数量,这可能不是目标。如果您只想计算目录中本地文件的数量,可以使用:
$path = "/path/to/folder";
$fs = new FilesystemIterator($path);
foreach($fs as $file) {
$file->isFile() ? ++$filecount : $filecount;
}
于 2013-09-03T14:10:51.927 回答
0
您可以使用
$nbFiles=count(scandir('myDirectory'))-2;
(-2 用于删除“.”和“..”)
于 2013-09-03T13:39:02.340 回答
0
这里的这个小功能是对我不久前发现的一些代码的修改,它还将计算所有子文件夹以及这些文件夹中的所有内容:
<?PHP
$folderCount = $fileCount = 0;
countStuff('.', $fileCount, $folderCount);
function countStuff($handle, &$fileCount, &$folderCount)
{
if ($handle = opendir($handle)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
if (is_dir($entry)) {
echo "Folder => " . $entry . "<br>";
countStuff($entry, $fileCount, $folderCount);
$folderCount++;
} else {
echo "File => " . $entry . "<br>";
$fileCount++;
}
}
}
closedir($handle);
}
}
echo "<br>==============<br>";
echo "Total Folder Count : " . $folderCount . "<br>";
echo "Total File Count : " . $fileCount;
?>
注意:我还将发布仅计算父目录的文件和文件夹的原始代码,而不是下面的子文件夹子文件夹:
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
if (is_dir($entry)) {
echo "Folder => " . $entry . "<br>";
countStuff($entry, $fileCount, $folderCount);
$folderCount++;
} else {
echo "File => " . $entry . "<br>";
$fileCount++;
}
}
}
echo "<br>==============<br>";
echo "Total Folder Count : " . $folderCount . "<br>";
echo "Total File Count : " . $fileCount;
closedir($handle);
}
于 2014-09-18T19:55:15.227 回答