사이트 내 전체검색
PHP
[함수] 특정 폴더 내 모든 파일 리스트 불러오기 함수
로빈아빠
https://cmd.kr/php/838 URL이 복사되었습니다.

본문

#!/usr/bin/php 
<?php 

function myallfile($dir, $ext = '') 

        $file_arr = array(); 
        if (is_dir($dir)) 
        { 
                if ($dh = opendir($dir)) 
                { 
                        while (($file = readdir($dh)) !== false) 
                        { 
                                $type = filetype($dir . $file); 

                                if($type == 'file') 
                                { 
                                        if($ext != '') 
                                        { 
                                                $ext = strtolower($ext); 
                                                $temp = explode('.',$file); 
                                                if(strtolower($temp[count($temp)-1]) == $ext) $file_arr[] = $dir.$file; 
                                        } 
                                        else    $file_arr[] = $dir.$file; 
                                } 
                                else if($type == 'dir' && ($file != '.' && $file != '..')) 
                                { 

                                        $temp = myallfile($dir.$file.'/', $ext); 
                                        if(is_array($temp)) 
                                        { 
                                                $file_arr = array_merge($file_arr, $temp); 
                                        } 
                                } 
                        } 
                        closedir($dh); 
                } 
                return $file_arr; 
        } 
        return 0; 

function rename_filename($str) 

        $dir    = dirname($str); 
        $oldname = basename($str); 
        $newname = iconv("euc-kr", "utf-8", $oldname); 
        if ($oldname != $newname) 
        { 
                rename("$dir/$oldname", "$dir/$newname"); 

                echo "$dir/$oldname"; 
                echo " "; 
                echo "$dir/$newname"; 
                echo "\n"; 
        } 


$path_root = '/data1/webhome/';//홈페이지 경로 
$path = 'webdata/oldimage/File1/';//홈페이지 경로 아래 파일리스트 가져올 디렉토리 
$php_arr = myallfile($path_root.$path); 

for($i = 0 ; $i < count($php_arr) ; $i++) 

        rename_filename($php_arr[$i]); 

?> 


===================================================== 
오늘 모 회사의 블로그 시스템을 우리걸로 교체해 주는 일이 있었습니다. 
우리 블로그 솔루션은 utf-8로 인코딩 되어있는데 그 쪽 회사는 euc-kr로 되었더군요 
기존 블로그 글들을 그쪽 디비에서 우리 디비 구조에 맞게 문자셋도 맞춰 다 넣고나니 
기존 블로그에 한글로 올린 파일명이 인코딩 문제로 읽히지 않더군요 
한글파일의 인코딩은 euc-kr인데 img src에 쓰여진 파일명은 utf-8이라서요 

그래서 이미지가 모여있는 폴더 내 회원 아이디별로 폴더가 있고 그 아래로도 파일과 폴더들이 있었습니다. 

그래서 myallfile()이라는 함수를 만들었습니다. 

첫번째 인자로 검색을 시작 할 PATH를 넘겨주면 그 디렉토리 하위 디렉토리 모두 뒤져서 
파일의 패스를 배열로 저장해서 리턴하는 함수입니다. 

두번째 인자로 확장자를 주면 해당 확장자 파일만 배열에 넣어서 리턴합니다. 

사실 적용할때는 배열에 저장해서 리턴하지 않고 발견 즉시 곧장 rename_filename()함수로 넘겨 처리했습니다. 
수백만개 다 배열에 저장하고 있으려니 잘 안되더라구요 

일단 사용하시기 쉽게 배열로 저장해서 리턴하게 만든거구요 

꼭 이런 경우 아니더라도 어느 디렉토리와 그 하위 모든 파일을 불러와야 할 시 사용하면 유용하겠다 싶어 공유합니다. 


같은 기능을 하는 플그램을 쉘로 짜면 몇줄 안되서 끝나겠지만... 
아직 익숙치 않은지라.. 쩝ㅋ

댓글목록

등록된 댓글이 없습니다.

PHP
871 (3/18P)

Search

Copyright © Cmd 명령어 3.133.108.224