Biowiki installer

From Biocourse

Jump to: navigation, search

1. 파일 및 수행 과정 설명

위키 자동 인스톨러는 php5 + mysql + mediawiki로 구성되어 있고 아파치 웹서버에서 웹브라으저를 통해 구동 되는 프로그램이다.
실행하기 위한 php파일은 /BiO/Serve/Httpd/Wikiinstaller/에 있다
여러 파일들 중에서 메인 실행파일은 wikimaker.php이며 wikimaker.php는 WikiInstaller.php 클래스 파일을 포함하고 있다.

wikimaker.php의 실제 소스를 보면 다음과 같으며 이해를 돕기 위해 주석을 달아 놓았다.

<?php
  require_once("WikiInstaller.php");  //WikiInstaller.php 클래스 파일을 포함 : C나 java의 Import 키워드와 비슷
 
  $data = file("domain.txt");  //도메인이 적힌 파일을 읽어와서 파일의 내용을 한줄 한줄 배열형태로 리턴한다. 기존 프로그래밍 언어의 file함수와 같다  파라메터 값은 파일이름  
  $dirPath = "/BiO/Serve/Httpd";
 
  $wikiDomain;
  $wikiInstall = new WikiInstaller();  //위에 첫번째 줄에 포함된 WikiInstaller 클래스 (require_once("WikiInstaller.php"); ) 의 객체 생성
  $dirArray = scandir($dirPath); //scandir 함수는 말그대로 전달받은 path의 디렉토리를 배열 형태로 리턴한다.
 
  $numDir = count($dirArray);  //배열 형태로 리턴된 dir의 갯수를 가져온다.   count는 배열의 갯수를 리턴하는 php함수이다.
  
  for($i = 2;$i<count($data); $i++){  //도메인의 갯수만큼 루프를 돌면서 설치 작업을 한다.

    $domain = $data[$i]; //도메인을 읽어온다.
    $fdomain = split ("\.", $domain); //"."을 기준으로 문자열을 자르고 실제 도메인만 가져온다. ex) $fdomain = split ("\.", "ABIO.NET 9/27/2006 ");  echo $fdomain ; 결과는 ABIO
    
    $wikiDomain = strFirstUp($fdomain[0]); //도메인의 첫번째 캐릭터만을 대문자로 한다. ex) $wikiDomain = strFirstUp("ABIO"); echo $wikiDomain; 결과는 Abio
  
    $wikiInstall -> setConfig($wikiDomain,$wikiDomain,$wikiDomain,$dirPath); //WikiInstaller 클래스의 setConfig함수 call : 초기값 세팅 ->도메인 이름과 패스
    
            if (is_dir("$dirPath/$wikiDomain")) {  //디렉토리가 존재 할시
     
                    if(is_dir("$dirPath/$wikiDomain/Biowiki")){   //기존에 위키가 있을 시
                     if(is_dir("$dirPath/$wikiDomain/Biowiki-2.3")){  //이미 있는 위키의 버전이 새것인지 아닌지 -> 버전을 틀리게 하고 싶으면 이부분을 고치면 된다. ex) $wikiDomain/Biowiki-2.4"))
                      $fileCheck = file_exists("$dirPath/$wikiDomain/Biowiki/LocalSettings.php");
                       if ($fileCheck==1){  //Localsetting.php가 있는지 아닌지
                             print "<b>$wikiDomain already Localsetting.php exist</b><br>";
                       }else{       
                             if( !is_writable("$dirPath/$wikiDomain/Biowiki/" )){
         chmod("$dirPath/$wikiDomain/Biowiki/",0755);
                             }          
        mkLocalsetting($wikiDomain, $wikiInstall, $dirPath);
                         
                      }
                     }else{
                      if( !is_writable("$dirPath/$wikiDomain" )){
        chmod("$dirPath/$wikiDomain",0755);
                            }          
       system("rm -f Biowiki");
       setup($wikiDomain, $wikiInstall, $dirPath);
                     }
                    }else{       
                            if( !is_writable("$dirPath/$wikiDomain" )){
        chmod("$dirPath/$wikiDomain",0755);
                            }          
       
       setup($wikiDomain, $wikiInstall, $dirPath);
                    }

            }else{    //디렉토리가 없을 시

    //dir을 만들고 install을 실행
    echo "$dirPath/$wikiDomain";
    if(!mkdir("$dirPath/$wikiDomain",0755)){
     echo "디렉토리를 만드는데 실패했습니다";
     exit(0);
    }
    
    setup($wikiDomain, $wikiInstall, $dirPath);
            }
   
  }
 
  function strFirstUp($str){
    $temp = strtolower($str);
    $temp = ucfirst($temp);
   return $temp;
  }
 
  function setup($wikiDomain, $wikiInstall, $dirPath){
 
 $from = "$dirPath/Biowiki-2.3/";
  
 $to = "$dirPath/$wikiDomain/";

 system("cp -R $from $to");
 
 chdir("$dirPath/$wikiDomain/Biowiki-2.3");
 
 $wikiInstall->install();
 
 chdir("$dirPath/$wikiDomain");
 
 system("ln -s Biowiki-2.3/ Biowiki");  
  }
 
  function mkLocalsetting($wikiDomain, $wikiInstall, $dirPath){
   chdir("$dirPath/$wikiDomain/Biowiki-2.3");
 
 $wikiInstall->install();
  }
?>