2014-04-28 3 views
-1

문제가 있습니다. 확장자가 .mp4 인 모든 파일 이름을 출력하고 싶습니다. 다음 코드로 만들 수는 있지만 하나의 디렉토리에서만 출력됩니다.여러 디렉토리에서 모든 mp4 파일 출력

<?php 
if ($handle = opendir('/media/AB12-34/DCIM/100DCIM')) { 
    while (false !== ($file = readdir($handle))) 
    { 
if ($file != "." && $file != ".." && strtolower(substr($file, strrpos($file, '.') + 1)) == 'mp4') 
     { 
$thelist .= '<p><td><option value="'.$file.'">'.$file. '</option></td>'; 
     } 
    } 
    closedir($handle); 

내가 출력 스크립트를 /media/AB*/DCIM/100DCIM에있는 모든 디렉토리의 모든 .MP4 파일을 원하는 디렉토리 (별을 유의하시기 바랍니다). opendir 명령을 사용하여이 작업을 수행 할 수 있습니까? * 시도했지만 작동하지 않았다. 같은 RecursiveDirectoryIterator 뭔가 내장에-PHP5 년대를 사용

+0

'glob()'사용 여기에서'*'를 사용할 수 있습니다. $ files = glob ('/ media/AB */DCIM/100DCIM/*'); print_r ($ files);' –

+1

@AdrianPreuss : glob가 재귀하지 않습니다. –

+1

http://www.php.net/manual/en/class.directoryiterator.php –

답변

0

:

<?php 
/** 
* RecursiveDirectoryIterator function to get media. 
* 
* @param string $base_dir 
* @param array $extentions 
* @return array 
*/ 
function get_media($base_dir, $extentions = array('mp4')) { 
    if(!file_exists($base_dir)) return array(); 

    $extensions = implode('|', $extentions); 
    $directory = new RecursiveDirectoryIterator($base_dir); 
    $iterator = new RecursiveIteratorIterator($directory); 
    $regex  = new RegexIterator($iterator, "/^.+\.$extensions$/i", RecursiveRegexIterator::GET_MATCH); 

    $ret  = array(); 
    foreach ($regex as $filename=>$object) { 
     $ret[] = $filename; 
    } 
    return $ret; 
} 

//print_r(get_media('/media/', array('mp4'))); 

$thelist = '<select size="1" name="?">'; 
foreach (get_media('/media/', array('mp4')) as $file) 
{ 
    $thelist .= '<option value="'.$file.'">'.$file.'</option>'; 
} 
$thelist .= '</select>'; 

echo $thelist; 
?> 

편집 (참조 추가 시간, 주석) : 당신은 기본적으로 파일의 전체 경로를 가지고

, 당신은 내 filectime($filename);를 추가 할 수 있습니다 iterator 함수를 사용하거나 표시 루프를 수행 할 때 외부에 추가하십시오.

<?php 
/** 
* RecursiveDirectoryIterator function to get media. 
* 
* @param string $base_dir 
* @param array $extentions 
* @return array 
*/ 
function get_media($base_dir, $extentions = array('mp4')) { 
    if(!file_exists($base_dir)) return array(); 

    $extensions = implode('|', $extentions); 
    $directory = new RecursiveDirectoryIterator($base_dir); 
    $iterator = new RecursiveIteratorIterator($directory); 
    $regex  = new RegexIterator($iterator, "/^.+\.$extensions$/i", RecursiveRegexIterator::GET_MATCH); 

    $ret  = array(); 
    $i = 0; 
    foreach ($regex as $filename=>$object) { 
     $ret[$i]['filename'] = $filename; 
     $ret[$i]['filetime'] = filectime($filename); 
     $i++; 
    } 
    return $ret; 
} 

//print_r(get_media('/media/', array('mp4'))); 

$thelist = '<select size="1" name="?">'; 
foreach (get_media('/media/', array('mp4')) as $file) 
{ 
    $thelist .= '<option value="'.$file['filename'].'">'.$file['filename'].' - '.date("F j, Y, g:i a",$file['filetime']).'</option>'; 
} 
$thelist .= '</select>'; 

echo $thelist; 
?> 
+0

고맙습니다. Mr. @Los Cherone. 그게 잘 됐어. 파일 이름 대신 수정 된 날짜를 출력하는 방법에 대한 아이디어가 있습니까? 다시 감사합니다!! – StartedFromTheBottom

+0

@StartedFromTheBottom 업데이트 답변, 수락을 보내 주셔서 감사합니다. –

+0

멋진! 고맙습니다. 거의 2 주 동안 해결책을 찾고 있었는데, 1 시간 만에 얻었습니다! – StartedFromTheBottom

관련 문제