브라우저에서 https://windows.php.net/download/ 에 접속합니다. 오른쪽에서 원하는 버전의 ZIP 파일을 다운로드 받습니다. 그리고, 화면 왼쪽 VC15 & VS16 항목에서 "Visual C++ Redistributable for Visual Studio 2015-2019" VC_redist.x64.exe 도 다운로드받아서 설치합니다. 이미 설치되어 있으면 설치하지 않아도 됩니다. 그리고, PHP ZIP 파일을 적당한 곳에 풀어서 폴더명도 정해봅니다. 저는 D:\bin\php-8.1.6 에 풀었습니다.

 

환경설정을 위해서 설정 > 정보 > 고급 시스템 설정 을 선택합니다.

 

시스템 속성 창에서 "환경 변수..." 버튼을 클릭한다.

 

환경 변수 창에서 Path를 찾아서 "편집..." 버튼을 클릭합니다.

 

"새로 만들기" 버튼을 클릭하고, PHP가 설치된 폴더를 지정하고, "확인" 버튼을 클릭해서 마무리한다.

 

커맨드 창을 열어서 php -v 를 실행해서 다음처럼 나오면 성공이다.

 

php.ini 파일에서 필요한 extension 이 있다면, 주석을 풀어주자.

 

마지막으로, https://getcomposer.org/Composer-Setup.exe 를 다운로드 받아서, Composer 까지 설치해 놓자.

 

OS계정은 기본계정인 ubuntu 를 사용하는 것으로 가정한다.

 

1. 필요한 패키지 설치

$ sudo apt-get install nginx php7.4 php7.4-fpm

 

2. Project 디렉토리 생성

$ cd ~
$ mkdir -p project/phpfpm

 

3. index.php 생성 (테스트용 페이지)

$ cd ~/project/phpfpm
$ vi index.php
<html>
<head>
<title>PHP-FPM Test</title>
</head>
<body>
Hello~!<br/>
<?php
echo "PHP-FPM Test";
?>
</body>
</html>

 

4. php-fpm 설정

$ sudo vi /etc/php/7.4/fpm/pool.d/www.conf
...

listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

...

 

5. nginx 설정파일 작성

$ cd /etc/nginx/sites-available
$ sudo vi phpfpm
server {
    listen *:80;
    server_name phpfpm.test.com; # 자신이 원하는 도메인주소 입력
    root /home/ubuntu/project/phpfpm/;
    index index.php;

    location ~ \.php$ {

        # index index.php;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}
$ cd ../sites-enabled
$ sudo ln -s /etc/nginx/sites-available/phpfpm phpfpm

 

6. nginx, php-fpm 재시작

$ sudo /etc/init.d/nginx restart
$ sudo /etc/init.d/php7.4-fpm restart

 

PC의 hosts 파일에 phpfpm.test.com 을 설정한 후에, 브라우저에서 http://phpfpm.test.com 을 입력하면 출력화면을 볼 수 있을 것이다.

얼마전부터 Apache 대신, nginx 를 사용하고 있다. Django 하고 연동해서 사용하고 있지만, PHP 도 사용할 일이 생겨서 FascCGI 구성하여 설정하는 법을 정리하게 되었다. 가장 기본적인 설정법만 있기 때문에, 구체적으로 특별한 어플리케이션을 사용하는 경우 연구를 더 해봐야 한다. 그에 대한 사항은 나중에 알아보도록 하자.

  1. /etc/apt/sources.list 에 contrib non-free 추가
    deb http://ftp.daum.net/debian/ wheezy main contrib non-free
    deb-src http://ftp.daum.net/debian/ wheezy main contrib non-free
    
    deb http://security.debian.org/ wheezy/updates main contrib non-free
    deb-src http://security.debian.org/ wheezy/updates main contrib non-free
    
    위와 같이 파일을 수정한 후에 apt-get update 실행한다.
  2. 필요한 패키지 설치
    # apt-get install nginx php5-fpm php-apc
    
  3. Project 디렉토리 생성
    # mkdir -p /opt/project/phpfpm
    
  4. index.php 생성 (테스트용 페이지)
    # cd /opt/project/phpfpm
    # vi index.php
    
    <html>
    <head>
    <title>PHP-FPM Test</title>
    </head>
    <body>
    Hello~!<br/>
    <?php
    echo "PHP-FPM Test";
    ?>
    </body>
    </html>
    
  5. nginx 설정파일 작성
    # cd /etc/nginx/sites-available
    # vi phpfpm 
    
    server {
        listen *:80;
        server_name phpfpm.test.com; # 자신이 원하는 도메인주소 입력
        root /opt/project/phpfpm/;
        index index.php;
    
        location ~ \.php$ {
    
            # index index.php;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
    }
    
    # cd ../sites-enabled
    # ln -s /etc/nginx/sites-available/phpfpm phpfpm
    
  6. nginx, php-fpm 시작
    # /etc/init.d/nginx start
    # /etc/init.d/php-fpm start  
    
  7. PC의 hosts 파일에 phpfpm.test.com 을 설정한 후에, 브라우저에서 http://phpfpm.test.com 을 입력하면 출력화면을 볼 수 있을 것이다.

파일서비스를 하다 보면, 불필요하게 비어 있는 디렉토리들이 우후죽순으로 생겨난다. 용량은 얼마 차지하지 않겠지만, 관리상 지저분한 면이 있으니, 깔끔한(?) 성격을 가진 관리자라면 이것 조차도 지우고 싶을 것이다. Windows 에서는 빈 디렉토리를 지울 수 있는 유틸리티를 이용해서 지워도 되고, Unix 계열이라면 find 를 이용해서 지울 수 있다.

다음 PHP 코드를 이용하면, 모든 OS에서 동일하게 빈 디렉토리를 삭제할 수 있다. 같은 일을 하는 코드를 찾아봤지만, 없어서 직접 구현해보았다. 간단하다, 모든 디렉토리를 순회하면서 해당 디렉토리 내에 파일/디렉토리가 있는지 검사해서 아무 것도 없으면, 삭제 대상으로 등록하고, 나중에 한방에 지우도록 한 것이다.

// -----------------------------------------
// 빈 디렉토리 삭제
// -----------------------------------------
$dst_dir  = "C:\\";
// -----------------------------------------
 
function find_empty_folder($dst_dir) 
{
    $result = array();
 
    $i = 0;
    $rdi = new RecursiveDirectoryIterator($dst_dir);
    try {
        foreach (new RecursiveIteratorIterator($rdi, 
            RecursiveIteratorIterator::SELF_FIRST, 
            RecursiveIteratorIterator::CATCH_GET_CHILD) as $path) {
 
            if ($path->isDir()) {
                if(2 == count(scandir($path->__toString()))) {
                    $result[$i++] = $path->__toString();
                }
            }
        }
    } catch(Exception $e) {
        echo "Message: ".$e->getMessage();
    }
 
    return $result;
}
 
 
$list_empty_folder = find_empty_folder($dst_dir);
 
foreach($list_empty_folder as $empty_folder) {
    echo $empty_folder."\n";
    unlink($empty_folder);
}

+ Recent posts