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); 로 한방에 이루어집니다.

관련자료

등록된 댓글이 없습니다.
Today's proverb
정중한 예의만큼 튼튼한 방패는 없다. (E.V. 루카스)