2012-09-13 2 views
0

파일 형식 디렉토리를 선택하려면 100kb 미만의 파일 크기를 선택하십시오. > 빈 문 -의이파일 크기가 40kb 미만인 지정된 디렉토리에서 파일을 반환하십시오.

<?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;    
     } 

    } 



?> 
+2

'파일 크기()'반환 바이트가 아닌 KB, 당신은'$ 크기 <100 * 1024'을 넣고 싶을 것이다. – Orbling

+0

이 파일을 추가 한 후 100kb 미만의 모든 파일 표시 –

+0

모든 파일이 표시됩니까? 'filesize ($ item)'이'false'를 반환합니까? 'filesize ($ dir. '/'. $ item)'에'$ dir'을'$ item' 앞에 추가해야 할 수도 있습니다. – Orbling

답변

1

if($sizes < 100); 를 작동하지 않는 사용자의 경우 절 후에는 세미콜론이 내 코드를 확인하시기 바랍니다.

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

또는 약간 spl/lambda 더 재미 + 재귀

는 :

<?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있다.

+0

위대한 대답, 나를 이길 !! 'RDI'도 제안 할 예정이었습니다. –

+0

그래,하지만 그것은 재미있는 부분 일뿐입니다 .- 더 많은 설명이 도움이 될 필요가 있습니다 ;-) – VolkerK

0

filesize() 함수는 바이트가 아닌 킬로바이트를 반환하므로 조건이 작동하지 않습니다.

정확한 조건은 다음과 같습니다

if($sizes < 102400);