PHP & Others

파일 처리 Class

컨텐츠 정보

본문

소스

<?
class Filecontrol
{
    var $objCommon;
    var $sFilename;

    function Filecontrol()
    {
        $this->objCommon = $GLOBALS[objCommon];
    }

    // ------------------------------------------------------------------------
    // 파일의 기준 인덱스를 설정하는 파일 경로를 지정하면 list.cgi로 생성
    // ------------------------------------------------------------------------
    function number($sSaveRoot)
    {
        if(!is_file("$sSaveRoot/list.cgi"))
        {
            $fp = fopen( "$sSaveRoot/list.cgi", w );

            if(flock($fp, LOCK_EX))
            {
                fputs( $fp, "1\\n" );
                flock( $fp, LOCK_UN);
            }
            else
            {
                $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
            }

            fclose($fp);
           
            $sFilename = 1;
        }
        else
        {
            $aList = file("$sSaveRoot/list.cgi");
            $sFilename = chop($aList[0]) + 1;
            $fp = fopen("$sSaveRoot/list.cgi", "w");
           
            if(flock( $fp, LOCK_EX))
            {
                fwrite($fp, "$sFilename\\n");
                foreach($aList as $value)
                {
                    fwrite($fp, $value);
                }
                flock( $fp, LOCK_UN);
            }
            else
            {
                $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
            }

            fclose($fp);
        }

        $this->sFilename = $sFilename;
    }




    function insert($sSaveRoot, &$aData)
    {
        $this->number($sSaveRoot);
   
        $aData[no]    = $this->sFilename;
        $aData[wdate] = date(Ymd);

        $sReturnTxt .= "<?php\\n";

        foreach($aData as $item => $value)
        {
            // $value=addslashes( $value ); php 버전 업으로 인한 불필요로서 없앰
            $sReturnTxt .= "$"."$item = \\"$value\\"; \\n";
        }
        $sReturnTxt .= "?>";

        $fp = fopen("$sSaveRoot/$this->sFilename.php", w);
        if(flock( $fp, LOCK_EX))
        {
            fputs($fp,$sReturnTxt);
            flock( $fp, LOCK_UN);
        }
        else
        {
            $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
        }
        fclose($fp);
    }

    function insert2($sSaveRoot, &$aData, $sFileName)
    {
        $aData[wdate] = date(Ymd);

        $sReturnTxt .= "<?php\\n";
        foreach( $aData as $item => $value )
        {
            #$value=addslashes( $value );
            $sReturnTxt .= "$"."$item = \\"$value\\"; \\n";
        }
        $sReturnTxt .= "?>";
       
        $fp = fopen("$sSaveRoot/$sFileName.php", w);
        if(flock( $fp, LOCK_EX))
        {
            fputs($fp,$sReturnTxt);
            flock($fp, LOCK_UN);
        }
        else
        {
            $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
        }
       
        fclose($fp);
    }
   
    function modify($sSaveRoot, &$aData, $sFilename)
    {
        $sReturnTxt .= "<?\\n";
        foreach($aData as $item => $value)
        {
            //$value=addslashes($value);
            $sReturnTxt .= "$"."$item = \\"$value\\"; \\n";
        }
        $sReturnTxt .= "\\n?>";

        $fp = fopen("$sSaveRoot/$sFilename.php", w);
        if(flock( $fp, LOCK_EX))
        {
            fputs($fp,$sReturnTxt);
            flock($fp, LOCK_UN);
        }
        else
        {
            $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
        }
        fclose($fp);

        if($fp)
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }

    function delete($nNO, $sSaveRoot = './data')
    {
        $aList = file("$sSaveRoot/list.cgi"); //리스트 파일에서 번호 지우기

        $fp = fopen("$sSaveRoot/list.cgi", "w");
        if(flock( $fp, LOCK_EX))
        {
            foreach($aList as $value)
            {
                $value = trim($value);
                if($nNO != $value)
                {
                    fwrite($fp, "$value\\n");
                }
            }
            flock($fp, LOCK_UN);
        }
        else
        {
            $this->objCommon->msg('처리를 할수 없습니다. 다시한번 실행해주세요', null); // close, none
        }
        fclose($fp);

        if(@unlink("$sSaveRoot/$nNO.php"))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }

    function delDir($dir)
    {
        $current_dir = @opendir($dir);
        while($entryname = @readdir($current_dir))
        {
            if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!=".."))
            {
                $this->delDir("${dir}/${entryname}");
            }
            else if($entryname != "." and $entryname!="..")
            {
                @unlink("${dir}/${entryname}");
            }
        }
        @closedir($current_dir);
        @rmdir(${dir});
    }

    function readData($sDir, $sType = NULL)
    {
        $dbdir = opendir($sDir);
       
        # 디렉토리만 찾기
        if( $sType == 'dir' )
        {
            while($data = readdir($dbdir))
            {
                if(is_dir("$sDir/$data") && $data != "." && $data != "..")
                {
                    $rtn[] = $data;
                }
            }
        }
   
        # 디렉토리 파일만 찾기
        else if( $sType == 'file' )
        {
            while($data = readdir($dbdir))
            {
                if( $data != "." && $data != ".." && !is_dir("$sDir/$data") )
                {
                    $rtn[] = $data;
                }
            }
        }

        # 파일/디렉토리 찾기
        else
        {
            while($data = readdir($dbdir))
            {
                if( $data != "." && $data != "..")
                {
                    $rtn[] = $data;
                }
            }
        }
        closedir( $dbdir );
        return $rtn;
    }

    // 2003-12-06 현재 원하는 디렉토리의 퍼미션 가져오기
    function getPermition($sObj)
    {
        return substr(decoct(fileperms($sObj)),2,3);
    }


    // 2003-12-06 지금 쓰고있는 디렉토리를 리턴
    function getSelfDir($sRoot)
    {
        $sBasename = basename($sRoot);
        $RTN = str_replace('/'.$sBasename, '', $sRoot);
        return $RTN;
    }
}

if(!$objFctl)
{
    $objFctl = & new Filecontrol;
}
?>

만든지 좀 되어서 올립니다 버그같은건 거즘 없는것 같군요 킴스파일 보드 쓰다가 거기 바탕으로 만들어 본것입니다. 아무쪼록 유용하게 사용하시길

파일 생성은 $objFctl->insert($_POST); 로 한방에 이루어집니다.

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)