从指定目录返回文件大小小于40kb的文件


Return files from specified directory where Filesize is less than 40kb

我想选择filezise小于100kb的文件形式目录。请检查我的代码它不工作

<?php
ob_start();
$dir = '/home/couponsc/public_html/testfile';
$ext = '.mp3';
$search = $_GET['s'];
$results = glob("$dir/*$search*$ext");
    foreach($results as $item) 
    {
        $sizes= filesize($item);
        if($sizes < 100);
        {               
            echo $item;             
        }
    }   

?>

if($sizes < 100);if子句->空语句后面有一个分号。

foreach($results as $item) {
    $sizes= filesize($item);
    if($sizes < 40*1024) {
        echo $item, "'n";
    }
} 

或者再加一点spl/lambda fun+递归:

<?php
$path = 'c:/temp';
$it = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::LEAVES_ONLY
);
$it = new FooFilterIterator($it, function($e) { return $e->getSize(); }, function($e) { return $e < 40*1024; } );
foreach($it as $f) {
    printf("% 6d %s'n", $f->getSize(), $f);
}
class FooFilterIterator extends FilterIterator {
    protected $getter;
    protected $filter;
    public function __construct(Iterator $source, $getter, $filter) {
        parent::__construct($source);
        $this->getter = $getter;
        $this->filter = $filter;
    }
    public function accept() {
        $f = $this->filter;
        $g = $this->getter;
        return $f( $g($this->current()) );
    }
}

还有GlobIterator。

filesize()函数返回字节,而不是千字节,因此您的条件不起作用。

正确的条件是:

if($sizes < 102400);