웹파일 압축기[ZIP] - HOWORLD.COM

페이지 정보

작성자 최고관리자 작성일 13-01-16 17:36 조회 846 댓글 0



$password = "123456";

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>웹파일 압축기[ZIP] - HOWORLD.COM</title>
<style type="text/css">
font-size: 14px;
color: #000000;
a {
color: #000066;
text-decoration: none;
a:hover {
color: #FF6600;
text-decoration: underline;

<form name="myform" method="post" action="<?=$_SERVER[PHP_SELF];?>">
<a target="_blank" href=""><font color="#FF0000">HOWORLD.COM</font></a><br>
<font color="#000000" size="4"><b>온라인 웹문서 ZIP파일로 압축하기</b></font><br>
<div style="color:#6600CC">
      <p>[1] 아래에 접속 비밀번호를 입력하시고 <b>ENTER !</b></p>
      <p>[2] 압축하려는 파일 또는 폴더를 선택하고.</p>
      <p>[3] 하위폴더는 자동포함, <b>Start To ZIP File !</b></p>
<table border="0">
<td><input name="password" type="password" id="password" value="123456" size="15"></td>
<td><input name="myaction" type="hidden" id="myaction" value="dolist"></td>
<td><input type="submit" name="Submit" value=" ENTER "></td>

if($_REQUEST['password'] != $password) die("PASSWORD가 틀렸습니다.다시입력 하세요");
echo "압축할 파일 또는 폴더를 선택;<br><br>";
$fdir = opendir('./');
  if($file=='.'|| $file=='..') continue;
  echo "<input name='dfile[]' type='checkbox' value='$file' ".($file==basename(__FILE__)?"":"checked")."> ";
    echo "【 File 】: $file<br>";
    echo "〖 Folder 〗: $file<br>";

ZIP압축파일 저장:
<input name="todir" type="text" id="todir" value="__zipfiles__" size="15"> ( * 쓰기권한 * )<br>
ZIP압축파일 이름:
<input name="zipname" type="text" id="zipname" value="" size="15"> ( * 파일 .ZIP * )<br>
<input name="password" type="hidden" id="password" value="<?=$_POST['password'];?>">
<input name="myaction" type="hidden" id="myaction" value="dozip">
<input type='button' value='Inverse' onclick='selrev();'>
<input type="submit" name="Submit" value=" Start To ZIP File ">
<script language='javascript'>
function selrev() {
with(document.myform) {
  for(i=0;i<elements.length;i++) {
    thiselm = elements[i];
    if(\[]/)) thiselm.checked = !thiselm.checked;



class PHPzip{

var $file_count = 0 ;
var $datastr_len  = 0;
var $dirstr_len = 0;
var $filedata = ''; //
var $gzfilename;
var $fp;
var $dirstr='';
    function unix2DosTime($unixtime = 0) {
        $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);

        if ($timearray['year'] < 1980) {
        $timearray['year']    = 1980;
        $timearray['mon']    = 1;
        $timearray['mday']    = 1;
        $timearray['hours']  = 0;
        $timearray['minutes'] = 0;
        $timearray['seconds'] = 0;

        return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
              ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);

폴더생성 및 쓰기권한.
function startfile($path = ''){
    $mypathdir[] = $path = dirname($path);
  }while($path != '.');
    $path = @current($mypathdir);

    return true;
  return false;

파일을 zip파일에 추가.
    function addfile($data, $name){
        $name    = str_replace('\', '/', $name);
  if(strrchr($name,'/')=='/') return $this->adddir($name);
        $dtime    = dechex($this->unix2DosTime());
        $hexdtime = '\x' . $dtime[6] . $dtime[7]
                  . '\x' . $dtime[4] . $dtime[5]
                  . '\x' . $dtime[2] . $dtime[3]
                  . '\x' . $dtime[0] . $dtime[1];
        eval('$hexdtime = "' . $hexdtime . '";');

        $unc_len = strlen($data);
        $crc    = crc32($data);
        $zdata  = gzcompress($data);
        $c_len  = strlen($zdata);
        $zdata  = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
        $datastr = "\x50\x4b\x03\x04";
        $datastr .= "\x14\x00";            // ver needed to extract
        $datastr .= "\x00\x00";            // gen purpose bit flag
        $datastr .= "\x08\x00";            // compression method
        $datastr .= $hexdtime;            // last mod time and date
        $datastr .= pack('V', $crc);            // crc32
        $datastr .= pack('V', $c_len);          // compressed filesize
        $datastr .= pack('V', $unc_len);        // uncompressed filesize
        $datastr .= pack('v', strlen($name));    // length of filename
        $datastr .= pack('v', 0);                // extra field length
        $datastr .= $name;
        $datastr .= $zdata;
        $datastr .= pack('V', $crc);                // crc32
        $datastr .= pack('V', $c_len);              // compressed filesize
        $datastr .= pack('V', $unc_len);            // uncompressed filesize

  fwrite($this->fp,$datastr); //
  $my_datastr_len = strlen($datastr);
        $dirstr = "\x50\x4b\x01\x02";
        $dirstr .= "\x00\x00";                // version made by
        $dirstr .= "\x14\x00";                // version needed to extract
        $dirstr .= "\x00\x00";                // gen purpose bit flag
        $dirstr .= "\x08\x00";                // compression method
        $dirstr .= $hexdtime;                // last mod time & date
        $dirstr .= pack('V', $crc);          // crc32
        $dirstr .= pack('V', $c_len);        // compressed filesize
        $dirstr .= pack('V', $unc_len);      // uncompressed filesize
        $dirstr .= pack('v', strlen($name) ); // length of filename
        $dirstr .= pack('v', 0 );            // extra field length
        $dirstr .= pack('v', 0 );            // file comment length
        $dirstr .= pack('v', 0 );            // disk number start
        $dirstr .= pack('v', 0 );            // internal file attributes
        $dirstr .= pack('V', 32 );            // external file attributes - 'archive' bit set
        $dirstr .= pack('V',$this->datastr_len ); // relative offset of local header
        $dirstr .= $name;
  $this->dirstr .= $dirstr; //목록
  $this -> file_count ++;
  $this -> dirstr_len += strlen($dirstr);
  $this -> datastr_len += $my_datastr_len;

function adddir($name){
  $name = str_replace("\\", "/", $name);
  $datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  $datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
  $datastr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);

  fwrite($this->fp,$datastr); //새로운 내용쓰기
  $my_datastr_len = strlen($datastr);
  $dirstr = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  $dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
  $dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
  $dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name;
  $this->dirstr .= $dirstr; //목록

  $this -> file_count ++;
  $this -> dirstr_len += strlen($dirstr);
  $this -> datastr_len += $my_datastr_len;

function createfile(){
  //압축파일 내용
  $endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" .
      pack('v', $this -> file_count) .
      pack('v', $this -> file_count) .
      pack('V', $this -> dirstr_len) .
      pack('V', $this -> datastr_len) .


if(!trim($_REQUEST[zipname])) $_REQUEST[zipname] = ""; else $_REQUEST[zipname] = trim($_REQUEST[zipname]);
if(!strrchr(strtolower($_REQUEST[zipname]),'.')=='.zip') $_REQUEST[zipname] .= ".zip";
$_REQUEST[todir] = str_replace('\','/',trim($_REQUEST[todir]));
if(!strrchr(strtolower($_REQUEST[todir]),'/')=='/') $_REQUEST[todir] .= "/";
if($_REQUEST[todir]=="/") $_REQUEST[todir] = "./";

function listfiles($dir="."){
  global $faisunZIP;
  $sub_file_num = 0;

    if(realpath($faisunZIP ->gzfilename)!=realpath("$dir")){
    $faisunZIP -> addfile(implode('',file("$dir")),"$dir");
    return 1;
    return 0;
  while ($file = readdir($handle)) {
    $sub_file_num += listfiles("$dir/$file");
    else {
        if(realpath($faisunZIP ->gzfilename)!=realpath("$dir/$file")){
        $faisunZIP -> addfile(implode('',file("$dir/$file")),"$dir/$file");
    $sub_file_num ++;
  if(!$sub_file_num) $faisunZIP -> addfile("","$dir/");
  return $sub_file_num;

function num_bitunit($num){
  $bitunit=array(' B',' KB',' MB',' GB');
  if($num>=pow(2,10*$key)-1){ //1023B = 1KB
    $num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]";
  return $num_bitunit_str;

  $faisunZIP = new PHPzip;
  if($faisunZIP -> startfile("$_REQUEST[todir]$_REQUEST[zipname]")){
    echo "Start To ZIP File ...<br><br>";
    $filenum = 0;
    foreach($_REQUEST[dfile] as $file){
      echo "【 File 】: $file<br>";
      echo "〖 Folder 〗: $file<br>";
    $filenum += listfiles($file);
    $faisunZIP -> createfile();
    echo "<br>압축완료, 모두 $filenum 개 파일.<br><a href='$_REQUEST[todir]$_REQUEST[zipname]'>$_REQUEST[todir]$_REQUEST[zipname] (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")</a>";
    echo "$_REQUEST[todir]$_REQUEST[zipname] 쓰기권한이 없습니다,경로또는 쓰기권한을 체크 하세요.<br>";
  echo "파일또는 폴더를 선택하세요.<br>";




등록된 댓글이 없습니다.

게시물 검색
전체 32건 1 페이지
  • PHP로 트위터에 글 등록하기
    트위터 예약 발송, 대량 발송 등을 구현하고 싶었는데, 봇 운영 툴이나 Buffer 같은 서비스로는 딱 필요한 것이 없어서, PHP로 구현해봤다. 구현이라고 하기에는 민망할 정도로 라이브러리가 너무 좋음 이미지까지 업로드가 되어 매우 유용하게 쓰고 있다. 먼저,에서 codebird 라이브러리를 다운 받는다. 그리고 에서 앱을 등록한 후, 권한을 Read and Write로 설정하고 소스에 4개 데이터를 대입하면 된다.  1234567891011<?    include_once('codebird.php');    \Codebird\Codebird::setConsumerKey(“API key”, “API secret”);    $cb = \Codebird\Codebird::getInstance();    $cb->setToken(“Access token”, “Access token secret”);        $status = "테스트용 트윗입니다";    $filename = "";        $cb->statuses_updateWithMedia(array('status' => $status, 'media[]' => $filename));    ?>…
    작성자최고관리자 시간 01-10 조회 517
  • 파이썬으로 배우는 알고리즘 트레이딩
    파이썬으로 배우는 알고리즘 트레이딩지은이 : 유부장, 조대표최종 편집일시 : 2017년 8월 7일 2:00 오후저작권 :  1,407 명이 추천파이썬 (Python)을 사용하여 대신 증권의 Cybos Plus, 이베스트투자증권의 xingAPI, 키움증권의 Open API+ 연동을 통한 시스템 트레이딩 기초를 다룬다.연습은 지식이라는 보물상자를 여는 열쇠다. - 토마스 풀러 -…
    작성자최고관리자 시간 01-02 조회 470
  • Anaconda 설치하기 - Python 활용

    파이썬 기반의 데이터 분석에 특화된 각종 OpenSource 패키지들을 모아놓은 개발 플랫폼이다. 한마디로 규정짓긴 어렵지만 아무튼 그동안 파이썬을 교육용언어, 다루기 쉬운언어, 프로토 타이핑용 스크립트 언어정도로만 봐왔다면 Anaconda라는 것은 본격적으로 파이썬의 능력을 제대로 활용하는 거대한 프로젝트 같은 개념으로 볼수 있다. Panda, Numpy, Numba, Scipy, IPython, GPGPU, 과학, 수학, 데이터 분석등과 관련된 수많은 수준높은 패키지들을 정말 간단하게 설치할 수 있도록 해놓았으니 나의 파이썬 수준을 한단계 업그레이드 해보고자 한다면 이 Anaconda를 꼭 설치해보아야 할것이다.홈페이지 : 설치가 완료 되었다면 사용법을 익혀보도록 하자 ( )테스트 드라이브30분간 conda 시운전을 시작하려면 빠른설치 가이드를 따라서 Anaconda 또는 Miniconda의 다운로드, 설치하기, 업데이트하기를 완료해야만 한다.알아두세요: 설치후에는 터미널을 다시 열어야 합니다. ( 윈도우제외 )Conda 시운전을 해보자:CONDA 사용하기, 가장먼저 Anaconda 또는 Miniconda가 제대로 설치되었는지 확인해보고 최신버전으로 업데이트 되었는지 체크해볼것이다. ( 3분소요 )환경성정 관리. 다음으로 우리는 몇가지 환경설정을 만들어 보는 놀이를 통해서 환경설정들을 바꾸는 법을 배울것이다. 또한 지금 어떤 환경설정을 사용중인지 확인하는것과 환경설정의 백업본을 만들어 볼 것이다. ( 10분소요 )파이썬 관리. 그 다음 우리는 어떤 버전의 파이썬이 설치가능한지 확인해보고 다른 버전의 파이썬을 설치하여 서로다른 버전의 파이썬을 전환해서 사용해 볼것이다. ( 4분 소요 )패키지 관리. 패키지를 가지고 몇가지 실습을 해보자. 1) 설치된  패키지 목록확인, 2) 사용가능한 패키지 목록확인, 3) conda install을 사용하여 패키지 설치/제거. 4) conda install로 설치되지 않는 패키지들은 Anaconda.org를 검색해 볼것이다. 5) 그래도 설치가 되지 않는 패키지들은 pip 패키지 매니저로 설치를 해볼것이다. 또한 Continuum의 상용패키지 IOPro 30일 시험판을 설치해볼 것이다. ( 10분소요 )패키지, 환경설정, CONDA 제거하기. 원한다면 테스트용 패키지, 환경설정, anaconda를 지우는 것을 끝으로 시운전을 마칠것이다. ( 3분 소요 )총 30분 소요팁: 어떠한 명령어든 설명서를 보기 원할때 언제든지  --help 명령어를 쳐보세요. 예를 들면 conda update 명령어에 관해서 알고 싶다면 아래와 같이 해보세요.:conda update --help1. conda 관리하기Conda는 패키지관리자와 환경설정 관리자 모두를 가지고 있다. 패키지 관리자는 패키지를 찾거나 설치하는데 도움을 준다. 그러나 당신은 현재 사용중인 파이썬과는 다른버전의 파이썬에 설치할 패키지를 사용하길 원한다고 가정해 봅시다. 단지 몇가지 명령만으로 다른 버전의 파이썬을 실행하는데 완벽히 분리된 환경을 설정할 수 있고 정상적인 환경에서 평소에 사용하던 파이썬을 실행할 수 있습니다. 이것이 conda가 가진 환경관리자의 힘입니다.팀: 리눅스, OS X 또는 Windows 커멘드 프롬프트 무엇을 사용하던 따로 언급이 없다면 터미널창에서 conda 명령어는 모두 같습니다.conda가 설치되었는지 확인해보기제대로 진행된것인지 확인하기 위해, Anaconda 설치가 성공하였는지 확인해 보기위해 터미널 창에 아래와 같이 입력해보자:conda --versionConda는 이와같이 설치된 버전 번호를 출력할 것입니다.: conda 3.11.0알아두세요: 만약 에러메시지가 출력되었다면, Anaconda 또는 Miniconda 설치 했던것과 같은 사용자 계정으로 로그인 했는지 확인해보고 설치후에 터미널창을 닫았다가 다시 열었는지 확인해보자.최신 버전으로 Conda 업데이트 하기다음으로 conda를 업그레이드 하기위해 conda update명령을 사용해보자conda update condaConda는 버전들을 비교하고 설치 가능한 것들을 알려줄것이다. 도한 자동적으로 업데이트 되었거나 업데이트로 수정된 패키지들에 관해서 알려줄것이다.만약 conda의 새로운 버전이 가능하다면, Y를 눌러 업데이트:Proceed ([y]/n)? yconda 업데이트가 완료되었으면 다음장으로 넘어가자.2. 환경설정 관리하기자 몇가지 환경설정을 만들어보고 환경설정을 바꾸어 보자.환경설정 생성과 활성화어떤 이름이든 conda create 명령을 사용해서 원하는 이름으로 생성해보자:conda create --name snowflakes biopython이 예제는 Biopython 프로그램과 /envs/snowflakes라는 이름의 새로운 환경설정을 생성할것이다.팁: 2개의 대쉬문자(--) 뒤에 사용되는 많은 옵션들이  한개의 대쉬문자(-)와 첫글자로 줄여쓸 수 있다. 그래서 --name 옵션과  -n 옵션은 같고 --envs 와 -e 역시 같은 의미이다. 줄여쓸수 있는 명령의 목록을 보려면 conda --help 또는 conda -h.새로운 환경설정 활성화 하기:Linux, OS X: source activate snowflakesWindows: activate snowflakes알아두세요: 환경설정들은 기본적으로 conda가 설치된 디렉토리 내부에 envs 디렉토리로 설치된다. 다른 디렉토리를 정할수 있으니 자세히 알고 싶다면  conda create --help 팁: 우리는 파이썬의 버전을 정하지 않았기 때문에 conda를 다운받고 설치할때 사용한것과 같은 버전을 설치할것입니다.두번째 환결설정 생성하기이번 시간엔 새로운 이름의 환경설정을 만들어보고 다른버전의 파이썬을 설치하고 Astroid와 Babel라는 이름의 패키지들을 설치해봅시다.conda create --name bunnies python=3 astroid babel이 예제는 /envs/bunnies에 Python 3가 설치되고 Astroid와 Babel 패키지가 포함된  새로운 두번째 환경설정을 생성할 것입니다.팁: 이 환경설정에서 사용하길 원하는 모든 프로그램은 동시에 설치하세요. 한번에 하나씩 설치하는 것은 의존성 충돌을 일으킬 수 있습니다.팁: conda create 명령으로 더많은 것을 추가 할수있습니다, 자세한 내용은 conda create --help 를 참조하세요.모든 환경설정 목록자, 지금까지 설치한 환경설정들은 확인해봅시다. 확인은 conda environment info 명령어를 사용한다:conda info --envs아래와 같이 환경설정 목록을 볼수 있을 것입니다.conda environments:     snowflakes          * /home/username/miniconda/envs/snowflakes     bunnies               /home/username/miniconda/envs/bunnies      root                  /home/username/miniconda현재 환경설정 확인하기많은 환경설정들중 현재 사용중인것은 어떤것일까, snowflakes 아니면 bunnies일까? 알아보려면 다시 같은 명령을 쳐보자:conda info --envs모든 환경설정이 표시되고 프롬프트 앞쪽 괄호안에 현재 환경의 이름이 표시된다.(snowflakes)알아두세요: 또한 환경설정 목록들 중에서 현재 활성화된 환경설정 이름 앞에는 별표(*)가 붙는다. 윗쪽에 "모든 환경설정 목록"을 보세요.다른 환경설정으로 전환하기 ( 활성화 / 비활성화 )다른 환경설정으로 바꾸려면 아래와 같이 환경설정 이름을 입력해 보세요(활성화):Linux, OS X: source activate bunniesWindows: activate bunnies현재 환경설정을 비활성화 하려면:Linux, OS X: source deactivateWindows: deactivate팁: 환경설정이 비활성화 되면, 프롬프트 앞에 더이상 (bunnies) 는 보이지 않을 것입니다.환경설정 복사본 만들기클론을 생성하여 환경설정 복사본을 만듭니다. 이 예제에서 snowflakes 복제하여 flowers라는 이름의 사본을 만들겁니다.:conda create --name flowers --clone snowflakes복사본이 제대로 만들어졌는지 확인해보자:conda info --envs현재 3개의 환경설정 목록이 출력되어야 정상이다: flowers, bunnies, 그리고 snowflakes.환경설정 지우기만약 flowers라는 이름이 마음에 들지 않았다면 아래와 같이 삭제할 수 있다:conda remove --name flowers --allflowers 환경설정이 잘 지워졌는지 확인해보려면 아래와 같이 입력해보자:conda info --envsFlowers는 더이상 환경설정 목록에 존재하지 않으므로 지워졌다는것을 알수 있습니다.환경설정에 관해 좀더 배워보기conda의 또다른 명령을 배우기 위해  --help 명령을 입력해 보자:conda remove --help3. 파이썬 관리하기Conda는 파이썬을 여타 패키지들과 동등하게 취급때문에 다중 설치, 업데이트 및 관리가 매우 쉽습니다.첫째로 어떤 버전의 파이썬이 설치 가능한지 확인해보자:conda search --full-name pythonconda search python 명령을 사용하여 "python" 이라는 단어가 포함된 모든 패키지 목록을 보거나  --full-name 옵션을 추가하면 전체이름이 "python"과 정확하게 일치할때에만 표시하도록 할수도 있습니다.다른 버전의 파이썬 설치하기자, 프로그래밍을 배우기 위해 파이썬 3가 필요하지만 파이썬 2.7 버전의 환경을 업데이트하여 덮어쓰기를 원하지 않는다고 해보자. 아래와 같이 snakes 라는 이름의 새로운 환경을 만들고 활성화 할수 있고 파이썬 3의 최신버전을 설치할수 있다:conda create --name snakes python=3Linux, OS X: source activate snakesWindows: activate snakes팁: 환경설정 이름을 정할때 python3 와 같은 이름이 재미는 없지만 직관적인 이름이 현명하다.추가된 환경설정 확인하기snakes라는 이름의 환경설정이 제대로 추가되었는지 확인해보려면 아래와 같이 명령어를 입력해보자:conda info --envsConda는 모든 환경목록을 출력한다,  with the current environment shown in (parentheses) in front of your prompt: (snakes)Verify Python version in new environmentVerify that the snakes environment uses Python version 3:python --versionUse a different version of PythonTo switch to the new environment with a different version of Python, you simply need to activate it. Let’s switch back to the default, 2.7:Linux, OS X: source activate snowflakesWindows: activate snowflakesVerify Python version in environmentVerify that the snowflakes environment uses the same Python version used when you installed conda:python --versionDeactivate this environmentAfter you are finished working in the snowflakes environment, deactivate this environment and revert your PATH to its previous state:Linux, OS X: source deactivateWindows: …
    작성자최고관리자 시간 12-30 조회 583
  • 시드 128 + CBC + PKCS5
    SEED는 한국 인터넷 진흥원의 완벽한 국내 기술로 개발 된 암호화 알고리즘입니다. PHP는 전환을 위해 mibany 님 감사드립니다. CBC 모드로 작업하고 64 비트 환경에서 작동합니다. 발견 된 소스 코드는 공개되지 않았으며, 고등 법원에서도 고등학생은 공개되지 않습니다.x86 / x64 플랫폼 지원CBC (Cipher-block chaining) 운영 모드 지원EUC-KR, UTF-8 문자 시간제 지원…
    작성자최고관리자 시간 08-03 조회 425
  • R에서 파이썬까지…데이터과학 학습 사이트 8곳
    어디서 뭘 배울까?데이터사이언스는 아직 논의가 진행 중인 학문이다. 마땅히 대학에 ‘데이터과학’과가 있는 것도 아니다. 특히 국내에서는 오프라인으로 배울 수 있는 곳이 많지 않다. 하지만 온라인이라면 배울 수 있는 곳이 많다. 데이터과학 강좌 가운데 오픈소스 커리큘럼이 있다. 여기서 무료로 데이터과학의 이론과 기술 기초를 다져나갈 수 있다. ‘입문’에 초점을 두고 총 5개의 카테고리의 강좌를 모았다. 슬프게도 모두 영어 강좌다.데이터 과학 입문R, 파이썬 프로그래밍기계학습(머신러닝)통계학시각화R 배우는 까페…
    작성자최고관리자 시간 06-30 조회 403
  • Scrapy 1.3 documentation
    Scrapy 1.3 documentation…
    작성자최고관리자 시간 04-05 조회 332
  • 파이썬을 이용한 웹 크롤링(Web Crawling) 어플리케이션 만들기 …
    작성자최고관리자 시간 04-05 조회 362
  • https 보안서버 iframe 사용설정
    * Apache 설정
    환경파일 중 해당태그 (, , , ) 안에 아래 코드 추가

    Header always append X-Frame-Options SAMEORIGIN

    html 문서에 head 테그에

    * Java Application

    response.addHeader("X-Frame-Options", "SAMEORIGIN");…
    작성자최고관리자 시간 03-15 조회 494
  • cURL JSON data를 GET , POST로 php파일로 전단 받기
      $url = "http://adsfasdsdafasdfsdaf/?adsfadsf";   $curl = curl_init();  $timeout = 5; // 0으로 하면 시간제한이 없다.  curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);  $result =  curl_exec($curl);   $data = json_decode($result);print_r($data); //echo $data->total_count;  curl_close($curl);exit;   $ch = curl_init();$data_string = "storeName=반갑다&skip=0&cateCode=5&limit=10";$url = "http://adsfasdsdafasdfsdaf/";curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  $result = curl_exec($ch);$result = json_decode($result);print_r($result);curl_close ($ch);  exit;…
    작성자최고관리자 시간 01-05 조회 991
  • javascript + php 사용시 오류
    javascript + php 사용시 오류

    javascript 소스 안에 php 소스를 사용할 경우

    작성자최고관리자 시간 01-23 조회 1018
  • 아파치와 PHP 버전 정보 숨기기 - 프록시도구에의한 패킷정보 누출 방지
    보안은, 공격자에게 유용한 정보를 차단하는 것부터 시작합니다. 시스템을 공격하려고 하는 공격자는, 먼저 그 시스템이 어떤 OS와 어플리케이션을 쓰고 있는지그리고 그 버전은 어떻게 되는지에 대한 정보부터 수집하게 마련입니다. 소위 '해커들의 언더그라운드'에서는 각 OS의 커널 및 어플리케이션의 버전에 따른 취약점이공유되게 마련입니다. 따라서 어플리케이션을 어떤 것을 쓰는지, 버전은 어떻게 되는지 등의정보는 크래커들에게 아주 유용한 정보가 될 수 있으므로 반드시 차단해야 합니다. 그러면, 버전 정보를 그냥 냅뒀을 경우 어떤 상황이 발생하는지를 예를 들겠습니다.아래 표처럼, 포트 스캐너를 돌리면 그 시스템에 대한 매우 자세한 정보가 노출됩니다. 80World Wide Web HTTPHTTP/1.1 200 OK Date: Fri, 29 Sep 2006 16:12:15 GMT Server: Apache/1.3.37 (Unix) PHP/4.4.4 X-Powered-By: PHP/4.4.4 Set-Cookie: PHPSESSID=f5bbd59d436d7c79a62a90e174d33f3c; path=/ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache cache-contril: no-cache,must-revalidate,max-age=0 Last-Modified: Wed 29 Jun 2005 07:42:36 GMT ETag: "Wed 29 Jun 2005 07:42:36" Connection: close Content-Type: text/html; charset=euc-kr  이 글에서는 아파치와 PHP의 버전 정보를 숨기는 법에 대해 다루겠습니다.  1. 아파치 버전 정보 숨기기 아파치의 경우 httpd.conf 파일에 ServerTokens 라는 옵션이 있습니다.만약 httpd.conf 에 ServerTokens 옵션이 없을 경우에는 추가해 주면 됩니다. 이 옵션의 문법은 다음과 같습니다. ServerTokens Prod[uctOnly] ([] 안은 생략 가능함) 이 문법에서 사용할 수 있는 옵션은 다음과 같습니다. ServerTokens Prod[uctOnly] : Apache 라는 것만 보여줌 ServerTokens Min[imal] : Apache 버전만 보여줌 ServerTokens OS : 아파치 버전과 운영체제를 보여줌 ServerTokens Full (또는 지시하지 않았을 때) : 모두 보여줌 ServerTokens 옵션은 아파치 버전 1.3 이후에서 사용할수 있으며, ProductOnly 키워드는 아파치 버전 1.3.12 이후에 추가되었습니다. 원하는 옵션을 입력한 후 저장합니다. 2. PHP 버전 정보 숨기기 PHP 버전 정보를 숨기려면 php.ini 파일을 열고 아래 옵션을 찾아 바꾸어 주면 됩니다.디폴트 값은 아래와 같이 설정되어 있습니다. expose_php = On 여기서 On을 Off로 바꿔 저장한 후 아파치 데몬을 재시작합니다.그러면, 결과를 확인해 보도록 하겠습니다.  3. 결과 80World Wide Web HTTPHTTP/1.1 200 OK Date: Fri, 29 Sep 2006 16:44:12 GMT Server: Apache Set-Cookie: PHPSESSID=70fe38030c4f8a4897941882b764f46e; path=/ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache cache-contril: no-cache,must-revalidate,max-age=0 Last-Modified: Wed 29 Jun 2005 07:42:36 GMT ETag: "Wed 29 Jun 2005 07:42:36" Connection: close Content-Type: text/html; charset=euc-kr  이처럼, 웹 서버의 종류가 아파치라는 것까지만 나올 뿐, 아파치와 PHP 버전은 표시되지 않는 것을 확인할 수 있습니다. 출처 :…
    작성자최고관리자 시간 04-10 조회 1240
  • 작성자최고관리자 시간 10-25 조회 921
  • 템플릿언더바(Template Underscore)
    템플릿언더바(Template Underscore)의 사용 목적은 PHP 프로그램으로부터 프레젠테이션 로직을 효과적으로 분리하는 데 있습니다. 이렇게 함으로써 프로그래머는 페이지출력의 흐름에 따라 PHP코드를 삽입하는 형식 대신에, 페이지구성요소를 모듈화하고 사용할 요소들을 인덱싱하는 형태의 메인프로세스를 작성할 수 있으며, 디자이너에게는 동적데이터 처리를 위한 간결한 인터페이스를 제공하게 됩니다. 웹개발시 MVC 패턴을 적용하는 일반적인 목적은 링크를 참고하시기 바랍니다. 템플릿언더바의 주요 특징 - 템플릿파일을 PHP 파일로 변환하여, 실제 서비스시 PHP 코어 엔진이 변환파일을 실행하여 출력하고, 변환파일과 처리로직의 최적화로 강력한 성능을 발휘합니다.
    - 템플릿 파일 단위의 캐쉬지원으로 회원제 싸이트에서도 부분적인 캐쉬적용이 가능하며, 캐쉬갱신로직과 사용방법이 효율적이고 편리합니다.
    - 자바스크립트 문법을 따르는 표현식 언어 (EL: Expression Language) 를 지원하고 표현식 내에서 PHP 함수를 자유롭게 사용할 수 있습니다.
    - 사용자 정의한 PHP 함수 또는 클래스를 플러그인 파일로 저장만 하면 템플릿내에서 사용할 수 있으며 필요한 만큼만 정확하게 자동 인클루드됩니다.
    - 제어구문의 최적화와 일관성, 극단적으로 단순한 템플릿 명령어셋, 상대경로보정필터, 꼬리말형 주석, 매크로 등 편리한 개발환경을 제공하며 디자이너와의 작업분리에도 효과적입니다.
    - 템플릿 제어구문이나 기타 오류가 있을 때, 가능한 모든 메시지를 출력하여 편리한 디버깅환경을 제공합니다.…
    작성자최고관리자 시간 09-10 조회 936
  • PHP 매직함수 - Class
    __sleep, __wakeup과 같이 "__"로 시작하는 매직함수(magic function)는 PHP 클래스 내에서 특수한 목적으로 사용됩니다. 따라서 이 함수들이 가지고 있는 문서화된 매직 기능을 사용할 필요가 없다면 클래스 내에 이 함수들을 정의해서는 안됩니다.


    serialize 함수를 통해 객체를 직렬화할 때 해당 클래스에 매직 함수 __sleep가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 객체를 직렬화하기 전에 __sleep 함수를 수행합니다. 이 함수는 직렬화하기 전에 객체 멤버에 대하여 조작해야 하는 작업, 또는 직렬화하기 전에 미리 수행해야 하는 작업(예를 들어 데이터베이스 연결 종료 등)을 수행할 수 있습니다. __sleep 함수는 직렬화할 객체의 모든 멤버변수의 이름을 변수에 담아 반환합니다.

    class Scott {
    var $error;
    var $svar = array();

    function Scott() {
    $this->svar['Hello'] = "World";

    function __sleep() {
    $this->svar['Hello'] = "Yawn";
    // return list of instance-variables to be serialized
    return array('error', 'svar');

    $x = new Scott();
    $y = serialize($x);
    $z = unserialize($y);


    unserialize 함수를 통해 문자열을 객체화할 때 해당 클래스에 매직 함수 __wakeup가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 객체화하기 전에 __wakeup 함수를 수행합니다. 이 함수를 수행할 때 객체화하기 전에 객체를 상대로 수행해야하는 작업, 또는 객체화하기 전에 미리 수행해야 하는 작업(예를 들어 데이터베이스 연결 등)을 수행할 수 있습니다.

    class Scott {
    var $error;
    var $svar = array();

    function Scott() {
    $this->svar['Hello'] = "World";

    function __sleep() {
    $this->svar['Hello'] = "Yawn";
    // return list of instance-variables to be serialized
    return array('error', 'svar');

    function __wakeup() {
    $this->svar['test'] = "I'm here!";

    $x = new Scott();
    $y = serialize($x);
    $z = unserialize($y);
    작성자최고관리자 시간 02-07 조회 1073
  • PHP 부모키워드 - Class
    부모클래스의 메쏘드 호출

    보통 부모클래스에서 선언된 메쏘드를 자식클래스에서 재정의하는 이유는 크게 두가지가 있습니다.

    1. 부모클래스 메쏘드를 완전히 새롭게 정의하기 위하여
    2. 부모클래스 메쏘드의 기능에 새로운 기능을 추가하기 위하여

    첫번째 기능은 부모클래스의 메쏘드를 무시하고 메쏘드에 새로운 정의를 함으로써 부모클래스의 메쏘드 정의를 숨기는 것입니다. 그러나 때로는 부모클래스의 메쏘드를 모두 지우는 것보다는 추가적인 기능이 필요한 경우가 있습니다. 이같은 경우에는 부모클래스의 메쏘드와 자식클래스에서 재정의된 메쏘드를 모두 수행하게 될 것입니다. 즉, 재정의된 메쏘드 구문 내에서 부모클래스의 메쏘드를 호출할 수 있어야 하며 필요한 기능만 추가적으로 작성하면 될 것입니다. 이럴 때 부모클래스의 메쏘드를 호출하기 위해서 사용하는 키워드가 parent입니다. 자바에서의 키워드 super와 같은 역할을 하며 이것은 그 메쏘드 호출을 상위클래스로 전달합니다.

    부모키워드 parent는 $this 키워드와 비슷하게 이 클래스의 부모클래스를 나타내는 위치 지정자입니다. 현재 클래스의 부모클래스를 참조해야 되는 경우에는 부모키워드 parent를 사용할 수 있습니다.

    class A {
    function example() {
    echo "클래스 A에 정의된 메쏘드 example. \n";

    class B extends A {
    function example() {
    echo "클래스 B에서 재정의된 메쏘드 example. \n";

    $b = new B;


    이 예의 출력결과를 보면 아래와 같이 나타날 것입니다.

    클래스 B에서 재정의된 메쏘드 example.
    클래스 A에 정의된 메쏘드 example.

    앞장 범위연산자에서 설명한 대로 키워드 parent 대신에 extends 다음에 기술된 부모클래스명을 직접 사용해도 됩니다.

    parent::example(); ------> A::example();

    키워드 parent를 써야 될 이유

    위의 예에서 부모클래스를 A가 아닌 A1으로부터 상속받도록 수정하여야 한다면 아래와 같이 extends 다음에 있는 부모클래스명을 변경하는 것으로 모든 작업은 끝나게 됩니다. 만약 parent::example()가 아닌 A::example()라고 작성하였었다면 이 부분도 A1::example()라고 수정하여야 할 것입니다. 결국 수정할 때 손이 더 많이 가야 하는 것이지요. 그러니 부모클래스에 있는 메쏘드에 접근하는 경우라면 키워드 parent를 이용하는 것이 소스 코드를 관리하는데 훨씬 유리할 것입니다.

    class B extends A1 {
    function example() {
    echo "클래스 B에서 재정의된 메쏘드 example. \n";

    $b = new B;

    작성자최고관리자 시간 02-07 조회 882


Copyright © 2001-2016 ITNANUM. All Rights Reserved..