PHP에서 윈도우에서 폴더 크기를 구하려면 아래와 같이 한다. 첫번째 방법은 인터넷에서 찾은 방법인데, 테스트해보니 결과값이 나오지 않았다. 그래서, 어쩔수 없이 하위 폴더를 모두 찾아가면서 파일크기를 모두 더해서 폴더의 전체용량을 구하는 것을 새로 만들었다. 전부다 뒤지기 때문에 시간이 좀 걸린다. 대신 윈도우 뿐만 아니라 다른 OS(Linux, BSD 등)에서도 동작한다는 장점이 있긴 하다. ^^

  • 윈도우 폴더 크기 구하기
    function Get_DirByteSize($Dir_Path) 
    {
        $objFs = new COM("Scripting.FileSystemObject"); 
        $objFolder = $objFs->GetFolder($Dir_Path); 
     
        return $objFolder->Size;  // byte 단위 
    }
    
    인터넷에서 찾은 예제 코드이긴 한데, 테스트해보니 결과 값이 나오지 않는다. ^^;
  • 무식하지만 확실하게 디렉토리 용량 구하는 방법 (OS 상관 없음)
    function Get_DirByteSize($dst_dir) 
    {
        $dir_size = 0;
     
        $rdi = new RecursiveDirectoryIterator($dst_dir);
        try {
            foreach (new RecursiveIteratorIterator($rdi, 
                RecursiveIteratorIterator::LEAVES_ONLY, 
                RecursiveIteratorIterator::CATCH_GET_CHILD) as $path) {
     
                if ($path->isFile()) {
                    $dir_size += $path->getSize();
                }
            }
        } catch(Exception $e) {
            echo "Message: ".$e->getMessage();
        }
     
        return $dir_size;
    }
     
    $dir_size = Get_DirByteSize("C:\\");
    echo "\nC Drive Size : $dir_size\n";
    

요즘, PHP를 이용해서 웹프로그래밍 외에 여러가지를 해보고 있는데, 상당히 쓸만하다. Perl, Python, Ruby 가 부럽지 않을 정도로 충분히 많은 것들이 갖추어져 있어서, 왠만한 분야에서 거의 쓰일 수 있을 것 같다.

PHP가 처음에는 웹프로그래밍을 위해서 만들어졌지만, 지금은 CLI 를 지원함으로써, 일반 General Language 로써의 면모도 갖추고 있다. 그러므로, 시스템 관리/일반 어플리케이션 개발 등에도 널리 활용할 수 있다. 필자는 서버 관리를 주로 하고 있으므로, 시스템 관리를 위한 스크립트를 가끔 작성해야 하는데, 이번에는 PHP로 해보았다. 파일서버 관리를 위해서 주기적으로 오래되거나 필요없는 파일들을 삭제해주어야 하는데, 이 중에서도 중복되는 파일을 제거해주는 것이 꽤 효과적이다. 내가 지울수 있는 권한은 없으니, 중복파일 목록을 사용자들에게 주고 직접 지우도록 하면 그나마 쬐끔 용량을 확보하는데 도움이 된다.

아래는 10MB 넘는 파일중에서 중복된 파일을 찾아서 파일에 결과물을 남기도록 하였다. 기존에 Perl, Python, Ruby 등으로 만들어 놓긴 했지만, PHP로 만들어보니 꽤 훌륭하게 동작한다. ^^ 코드는 그다지 최적화된 것 같지는 않지만, 참고는 할 만 할 것이다.

// -----------------------------------------
// 10MB 이상의 파일중에서 중복된 파일 찾기
// -----------------------------------------
$limit_size  = 10000000; // 10MB
$dst_dir     = "M:\\";
$file_list   = array();
$result_list = array();
// -----------------------------------------
 
$start_time = date("Y/m/d H:i:s", time());
 
$i = 0;
$rdi = new RecursiveDirectoryIterator($dst_dir);
try {
    foreach (new RecursiveIteratorIterator($rdi, 
                                            RecursiveIteratorIterator::LEAVES_ONLY, 
                                            RecursiveIteratorIterator::CATCH_GET_CHILD) as $path) {
        if ($path->isFile() && $path->getSize() > $limit_size) {
            $md5sum = md5_file($path->__toString());
            echo "($i) [$md5sum] : ".$path->__toString()."\n";
            $file_list[$i++] = $md5sum."\t".$path->__toString();
        }
 
    }
} catch(Exception $e) {
    echo "Message: ".$e->getMessage();
}
 
 
foreach($file_list as $key => $value) {
    list($md5, $path) = split("\t", $value, 2);
    if(!isset($result_list[$md5])) { $result_list[$md5] = 0; }
    $result_list[$md5] += 1;
}
 
 
$i = 0;
$fh = fopen("result_samefiles_".date("Ymd").".txt", "w") or die("Can't open file");
foreach($result_list as $key => $value) {
    if($value < 2) { continue; }
 
    // fputs ($fh, "\n[$key]\n");
    fputs ($fh, "\n[$i]\n");
    ++$i;
    foreach($file_list as $idx => $file) {
        list($md5, $path) = split("\t", $file, 2);
        if($md5 == $key) {
            fputs ($fh, "$path\n");
        }
    }
}
fclose($fh);
 
 
$end_time = date("Y/m/d H:i:s", time());
 
echo "\nStart Time -> $start_time \n";
echo "End Time   -> $end_time \n\n";

예전에 Debian+Apache+PHP+CodeIgniter+MySQL 를 올린 적이 있다. 이번엔 CentOS에서 설치하는 법도 한 번 알아보도록 하자. DBMS 도 MySQL 이 아닌 PostgreSQL을 설치한다.

아래의 설치방법은 CentOS 5.6 과 Scientific Linux 5.5 에서 적용 가능하다.

기본 프로그램 설치
# yum groupinstall "Development Tools"
# yum install git htop ntp
Apache + mod_php 설치
# yum install php
PostgreSQL 8.4.7 설치
  • 설치
    # yum install postgresql84 postgresql84-devel postgresql84-libs postgresql84-contrib postgresql84-server
    
  • DB 초기화
    # service postgresql initdb
    
    /var/lib/pgsql/data 에 초기화된 파일들이 생성된다.
  • 설정파일 위치 : /var/lib/pgsql/data
  • 시스템 부팅시 자동으로 실행되게 하려면, ntsysv 에서 postgresql 을 체크해주어야 한다.
사용자, DB 생성
  • 사용자, DB 생성
    # su - postgres
    # psql
    
    postgres=# CREATE USER 아이디 WITH PASSWORD '비밀번호';
    postgres=# CREATE DATABASE 디비이름 WITH ENCODING='utf-8' OWNER 아이디;
    
  • 계정으로 로그인할 수 있도록 연결설정
    # su -
    # cd /var/lib/pgsql/data/
    # vi pg_hba.conf
    모두 주석으로 막고 아래만 남김
    host    all         all         0.0.0.0           0.0.0.0           password
    local   all         postgres                                        trust
    local   all         all                                             password
    
    # vi postgresql.conf
    listen_addresses = '*'
    
    # /etc/init.d/postgresql restart
    # psql -d 디비이름 -U 아이디 -W
    
프로젝트 생성
$ mkdir -p /opt/project/프로젝트명/web
$ cd /opt/project/프로젝트명/web
Apache 설정
# cd /etc/httpd/conf
# vi httpd.conf
NameVirtualHost *:80

<VirtualHost *:80>
    ServerName 자신의도메인URL
    DocumentRoot /opt/project/프로젝트명/web
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

# /etc/init.d/httpd restart
CodeIgniter 설치
  1. http://codeigniter.com/download.php 에서 CodeIgniter_2.0.2.zip 다운로드한다.
  2. 압축을 풀고 /opt/project/프로젝트명/web 에 업로드 한다.
  3. /opt/project/프로젝트명/web 에.htaccess를 작성한다.
    RewriteEngine on
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    
  4. system/application/config/config.php 파일을 열어 기반url(base URL)을 세팅한다.
    $config['base_url'] = "자신의도메인URL";
    
  5. 데이터베이스를 사용한다면 application/config/database.php 파일을 열어서 데이터베이스 정보를 세팅한다.
    $db['default']['hostname'] = "localhost";
    $db['default']['username'] = "아이디";
    $db['default']['password'] = "비밀번호";
    $db['default']['database'] = "디비이름";
    $db['default']['dbdriver'] = "postgre";
    
  6. 마지막으로 보안을 위해서 system 디렉토리를 sys로 변경하고, index.php 의 $system_folder 변수를 변경해준다.
    $system_path = "sys";
    
    sys 대신 자신이 원하는 다른 것으로 변경하길 바란다.
  7. 웹브라우저에서 자신의도메인URL 로 접속해본다.

Windows 에 Apache+MySQL+PHP 를 한번에 설치해주는 여러 프로그램이 있지만, 여기에서는 각각 직접 다운로드 받아서 설치하는 것을 보도록 하겠다. 그리 어렵지 않으며, 기본을 알고 이용하는 것이 더 이해에 더 도움이 되기 때문이다.

설치순서
  1. MySQL
  2. Apache
  3. PHP
MySQL
  1. http://www.mysql.com/downloads/mysql/에서 추천하는 현재 버전의 MySQL Community Server 를 다운로드 받는다.
  2. 다운로드 받은 파일은 대략 mysql-essential-5.1.50-win32.msi 과 비슷한 이름일 것이다.
  3. 이 파일을 실행하고, Typical 을 선택하여 설치를 진행한다.
  4. 설치 완료후, Configure the MySQL Server now 에 체크를 하고 종료하면, 설정을 진행할 것이다.
  5. Configuration Type 에서는 Detailed Configuration 을 선택한다.
  6. Server Type 에서는 Developer Machine 을 선택한다. (Windows 에서는 보통 개발용으로 설치하므로)
  7. Database Usage 에서는 Multifunctional Database 를 선택한다.
  8. The approximate number of concurrent connections to the server 에서는 Online Transaction Processing (OLTP)를 선택한다.
  9. Enable TCP/IP Networking 에 체크한다.
  10. Port Number 는 3306 으로 그대로 둔다.
  11. Enable Strict Mode 에 체크한다.
  12. Default Character Set 에서 Best Support for Multiingualism (UTF-8) 을 선택한다.
  13. Install As Windows Service 를 체크한다.
  14. Include Bin Directory in Windows PATH 를 체크한다.
  15. root 비밀번호를 자신이 원하는 것으로 설정한다.
  16. 설치가 완료되었으면, 커맨드창을 띄워서, mysql -u root -p 를 입력하고, 비밀번호를 입력하여 정상 로그인되면 끝난 것이다.
Apache
  1. http://httpd.apache.org/download.cgi 에서 최신버전의 Apache 를 다운로드 받는다.
  2. 다운로드 받은 파일은 아마도 httpd-2.2.16-win32-x86-openssl-0.9.8o.msi 이런 이름과 비슷할 것이다.
  3. Network domain : localhost, Server Name : localhost, Administrator's E-mail Address : test@localhost 로 입력한다.
  4. Setup Type 은 Typical 을 선택한다.
  5. 설치가 완료되었으면, 웹브라우저에서 http://localhost/ 를 입력해서 It works! 메시지가 나오면 정상 동작하는 것이다.
PHP
  1. http://windows.php.net/download/에서 최신버전의 PHP를 다운로드 받는다. 한가지 주의할 것은 VC6 x86 Thread Safe 를 다운로드 해야 한다는 것이다. 이 것 말고, VC9 로 컴파일 된 것이 있는데 이는 IIS연동을 위한 것이다. Apache 와 연동하기 위해서는 VC6으로 컴파일 한 것을 사용해야 한다.
  2. 다운로드 받은 파일은 대략 php-5.3.3-Win32-VC6-x86.msi 과 비슷한 이름일 것이다.
  3. Select the Web Server you wish to setup 에서 Apache 2.2.x Module 을 선택한다.
  4. Apache Configuration Directory 에서는 Apache가 설치된 디렉토리의 conf 디렉토리를 선택한다. 디폴트 디렉토리로 설치했다면, C:\Program Files\Apache Software Foundation\Apache2.2\conf\ 가 될 것이다.
  5. Choose Items to Install 에서는 아래 것들을 추가 선택한다.
    • Register *.php files to open automatically with PHP
    • Internationalization
    • Multi-Byte String
    • XSL
    • PEAR Install
    • PHP Manual
  6. 설치가 완료된 후에, C:\Program Files\Apache Software Foundation\Apache2.2\htdocs 에 phpinfo.php 를 만들어서 아래와 같이 내용을 입력한다.
    <?php
    phpinfo();
    ?>
    
  7. 마지막으로 웹브라우저에서 http://localhost/phpinfo.php 를 입력하여 PHP 설치정보가 나오면 완료된 것이다.

+ Recent posts