我在LAMP下运行PHP 7.0.22,在两个ubuntu 16.04上运行。
我的PHP代码如下
$str="ls -1 /var/www/dropbox | egrep '*.CEL|*.cel'";
$result= explode(PHP_EOL, shell_exec($str));
$fileNames=$result;
print_r($fileNames);
echo "<br>";
$inputFileCount=count($fileNames,1);
echo "<br>";
echo "File count:" . print_r($inputFileCount);
echo "<br>";
我在屏幕上看到以下内容
Array ( [0] => prefix1.cel [1] => prefix12.cel [2] => )
File count:1
在我看来,计数应该是2。
答案 0 :(得分:4)
使用glob()
获取.cel
个文件列表,即:
$files = glob("/var/www/dropbox/*.cel");
echo count($files)
循环使用:
foreach ($files as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
答案 1 :(得分:1)
您也可以使用PHP SPL Iterator classes。
<?php
$folder = '/var/www/dropbox';
// define filtering (match only .cel or .CEL files)
$filter = new \RecursiveCallbackFilterIterator(
new \RecursiveDirectoryIterator($folder, \FilesystemIterator::SKIP_DOTS),
function ($current, $key, $iterator) {
return strtolower($current->getExtension()) === 'cel';
}
);
$iterator = new \RecursiveIteratorIterator($filter);
// get count
echo iterator_count($iterator);
// loop over
if (iterator_count($iterator) > 0) {
foreach ($iterator as $file) {
echo $file;
}
}
稍微多了一些代码然后是glob,但也是一个选项。
答案 2 :(得分:1)
ls -l
为您提供显示大小,权限等的长列表。我认为这不是您想要的。
使用"\n"
作为拆分参数来拆分新行。
explode()
之后,您想要使用创建的数组。
还有一件事:请在代码中使用echo
。 print_r
用于输出有关变量的更多信息。
$str="ls /var/www/dropbox | egrep '*.CEL|*.cel'";
$result= explode("\n", $str);
foreach($result as $filename) {
echo $filename . "<br />";
}
$inputFileCount = count($result);
echo "<br>";
echo "File count:" . $inputFileCount;
echo "<br>";