Search Results for '전체 분류'


2064 posts related to '전체 분류'

  1. 2009/04/27 Classic ASP용 XMLRPC Class
  2. 2009/04/27 Classic ASP용 Database Object
  3. 2009/04/27 외부 이미지 저장 소스
  4. 2009/04/27 외부 이미지 저장 하는 방법 저장 하기 php
  5. 2009/04/27 외부 이미지 서버에 저장하기
  6. 2009/04/27 [함수] 세이케스트 방송정보 알아내기 2009.3.29
  7. 2009/04/27 CSS 브라우저별 핵 정리
  8. 2009/04/27 [Tip&Tech] 팁텍에 올리기는 너무 허접해서 iframe resize 간단히
  9. 2009/04/27 [복구/삭제] testdisk 디스크파티션 복구프로그램
  10. 2009/04/27 [파일관리] Tag&Rename v3.5.1
  11. 2009/04/27 [파일관리] PowerISO v4.4
  12. 2009/04/27 [포터블] Adobe Reader Lite 9.1.0.6 1
  13. 2009/04/27 [시스템 관리] A.I v081210 XP/Vista/2008/Office 인증도구
  14. 2009/04/21 Trim 공백제거
  15. 2009/04/21 윈도우 DoS 공격 방어 레지스트리 권장값과, 보안관련 레지스트리 키
  16. 2009/04/21 vbscript decode
  17. 2009/04/21 프록시 리스트 proxy list
  18. 2009/04/21 테이블명세서생성스크립트::SQL Database documentation script
  19. 2009/04/21 FSO example
  20. 2009/04/21 read/write configuration class (xml version)
  21. 2009/04/21 dbhelper class
  22. 2009/04/21 view source &asp coloring
  23. 2009/04/21 Class implementation for using webservices in ASP
  24. 2009/04/21 ASP JSON Utility
  25. 2009/04/21 fckeditor 이미지 업로드 시 한글명 깨지는 문제
  26. 2009/04/21 경고없이 창닫기
  27. 2009/04/21 HTML, js 소스정리기 - editplus plugin
  28. 2009/04/21 mssql의 my sql의 password() function과 비슷한 함수
  29. 2009/04/21 보안면에서나 성능면에서 exec보다 유리한 sp_executesql
  30. 2009/04/21 먼저 아래와 같이 c#을 작성하여 test.cs로 저장합니다.
1. 소갯말
일단 버그 있을지도 모릅니다... ㅠㅠ

일단 XMLRPC부터 소개하자면
http://xmlrpc.com/
http://wiki.kldp.org/HOWTO//html/XML-RPC-HOWTO/xmlrpc-howto-intro.html

간단하게 MS의 SOAP과 유사하게,
'XML-RPC는 HTTP를 통한 간단하고 이식성 높은 원격 프로시져 호출 방법이다' 이라고 하네요
(제가 설명을 잘 못해서...)

일단 압축을 여시면 파일을 3가지가 있는데
class_xmlrpc.asp 이하 2가지 파일 (class_hashtable.asp / class_gto.asp) 은
의존성때문에 같이 넣어주어야 할껍니다 -.-;


2. 레퍼런스

- 생성자

   * Constructor void xmlRPC() - XMLRPC Class를 생성합니다.

- Properties

   * Public String method - XMLRPC 서버측 method를 지정해줍니다.

   * Public Mixed data - XMLRPC 서버에 보내줄 데이터를 지정하여 줍니다. 지정하는 순간 XMLRPC 문법에 맞
게 XML문서로 변환됩니다.

   * Public Boolean responseStatus - 데이터를 보낸 이후, 응답 상태를 나타냅니다. 문제가 있으면 false값

   * Public Array responseData - 데이터를 받고, ASP 데이터형태로 변환합니다.

- Methods

   * Public void send(url) - XMLRPC 서버쪽으로 데이터를 송신합니다.

   = Arguments

      * String url - 데이터를 송신할 XMLRPC 서버의 주소를 지정합니다.


3. 예제

 아래 예제는... 필자가 구축한 XMLRPC 서버에 데이터를 전송하여, 데이터를 읽어오는 예제입니다.
 video.ucc Method로 Argument로 받은 http://www.youtube.com/watch?v=eSnzCpdKXJ8
 아래 주소의 UCC 동영상에 대한 정보를 가져오는 부분입니다.

* 전달받은 원시 XMLRPC Response Data

<methodResponse>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>subject</name>
                  <value>
                     <string>Solitudes: Natural Relaxation - horizons</string>
                  </value>
               </member>
               <member>
                  <name>contents</name>
                  <value>
                     <string>Solitudes: Natural Relaxation - horizons ...</string>
                  </value>
               </member>
               <member>
                  <name>tag</name>
                  <value>
                     <string>Solitudes Natural Relaxation horizons</string>
                  </value>
               </member>
               <member>
                  <name>flash</name>
                  <value>
                     <string>http://www.youtube.com/v/eSnzCpdKXJ8&f=videos&app=youtube_gdata</string>
                  </value>
               </member>
               <member>
                  <name>thumb</name>
                  <value>
                     <string>http://i.ytimg.com/vi/eSnzCpdKXJ8/2.jpg</string>
                  </value>
               </member>
               <member>
                  <name>url</name>
                  <value>
                     <string>http://www.youtube.com/watch?v=eSnzCpdKXJ8</string>
                  </value>
               </member>
               <member>
                  <name>publisher</name>
                  <value>
                     <string>http://youtube.com</string>
                  </value>
               </member>
               <member>
                  <name>category</name>
                  <value>
                     <string>Music</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodResponse>

* 코드

<!-- #include virtual="/include/class_hashtable.asp" -->
<!-- #include virtual="/include/class_gto.asp" -->
<!-- #include virtual="/include/class_xmlrpc.asp" -->
<%
   Dim objRPC
   Set objRPC = New xmlRPC
   objRPC.method = "video.ucc"

   '// 전달할 데이터입니다. 어느 데이터형이라도 가능합니다.
   '// Object일 경우는 Scripting.Dictionary 또는 제가 만든 Hashtable (내부적으로는
Scripting.Dictionary ㅠㅠ) 만 가능합니다.
   objRPC.data = "http://www.youtube.com/watch?v=eSnzCpdKXJ8"
   objRPC.send("http://*******/api/")   '// 보안상 ^^;

   If objRPC.responseStatus = True Then
      '// XMLRPC Response를 받습니다. 보통 수신받는 변수는 한개일 경우가 대부분입니다.
      Dim objData : objRPC.responseData(0)

      '// 첫번째로 수신받은 데이터는 struct형으로 Hashtable로 변환되지만...
      '// Vbscript 문법상 문제때문에... 내부적으로 원소를 하나가진 배열로밖에 표현이 안됩니다.
      '// 이해해주세요 ㅠㅠ
      Dim curData : Set curData = objData(0)
   End If

   Set objRPC = Nothing

   Dim curKey
   For Each curKey In curData.Keys
      Response.Write curKey & " - " & curData.Item(curKey) & "<br />"
   Next
%>

* 결과

subject - Solitudes: Natural Relaxation - horizons
contents - Solitudes: Natural Relaxation - horizons ...
tag - Solitudes Natural Relaxation horizons
flash - http://www.youtube.com/v/eSnzCpdKXJ8&f=videos&app=youtube_gdata
thumb - http://i.ytimg.com/vi/eSnzCpdKXJ8/2.jpg
url - http://www.youtube.com/watch?v=eSnzCpdKXJ8
publisher - http://youtube.com
category - Music


4. 알려진 버그

VBScript의 문법의 문제상, 바로 변수에 Object (Hashtable 또는 Scripting.Dictionary) 데이터형을
정의하지 못해서 편법으로 0번째 원소를 가진 배열 만드는 방식으로 처리했습니다.

제가 설명을 잘 못해서... 이해하지 못하신 분들은
class_gto.asp 파일을 열어보시길 권합니다 -.-;
2009/04/27 19:30 2009/04/27 19:30
말은 거창하지만... 뜯어보면 별것 아닙니다 -.-;
설명이 뭐 필요하겠습니까 예제부터 보시죠

예제)
Dim objRS : Set objRS = New GDO
Dim objHash : Set objHash = New Hashtable
objHash.Define "title", "monoless 킹왕짱 미남!!"

Call objRS.ExecuteQuery("update taeyo_board set title=?", objHash)

Set objHash = Nothing
Set objRS = Nothing

예제 2)
Dim objRS : Set objRS = New GDO
Dim objHash : Set objHash = New Hashtable
objHash.Define "title", "monoless 킹왕짱 미남!!"

Dim objData : objData = objRS.OpenQuery("select * from taeyo_board where title=?", objHash)

If IsEmpty(objData) = False Then
       Dim curData
       For Each curData In objData
              Response.Write "Title : " & curData.Item("title") & "<br />"
              Response.Write "Name : " & curData.Item("name") & "<br />"
       Next
End If

Set objHash = Nothing
Set objRS = Nothing

생성자)
* [void] GDO() - GDO Class를 생성합니다.

Method)
* [void] ExecuteProc(proc, params) - 프로시져를 실행합니다.
 - [String] proc - 실행할 프로시져명
 - [Object Hashtable] params - 입력할 파라메터

* [void] ExecuteQuery(query, params) - 쿼리를 실행합니다.
 - [String] query - 실행할 쿼리
 - [Object Hashtable] params - 입력할 파라메터

* [Array] OpenProc(proc, params) - 프로시져를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반
환합니다.
 - [String] proc - 실행할 프로시져명
 - [Object Hashtable] params - 입력할 파라메터

* [Array] OpenQuery(query, params) - 쿼리를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반환
합니다.
 - [String] query - 실행할 쿼리
 - [Object Hashtable] params - 입력할 파라메터

Property)
* [String] ConnectString - 접속할 DB 연결구문입니다.
2009/04/27 19:29 2009/04/27 19:29
img_url = "http://~~~경로"

  Set xh = CreateObject("MSXML2.ServerXMLHTTP")
  xh.Open "GET", img_url, false
  xh.Send()
  imgData = xh.ResponseBody
  Set  xh = Nothing


  Set stm =CreateObject("ADODB.Stream")
  stm.open()
  stm.type=1
  stm.write imgData
  stm.SaveToFile 저장경로&저장할이름, 2
  stm.close()
  Set  stm = Nothing 

2009/04/27 19:24 2009/04/27 19:24

<?php

###############################################################
# Thumbnail Image Generator 1.23
###############################################################
# Visit http://www.zubrag.com/scripts/ for updates
###############################################################

// REQUIREMENTS:
// PHP 4.0.6 and GD 2.0.1 or later
// May not work with GIFs if GD2 library installed on your server
// does not support GIF functions in full

// Parameters:
// src - path to source image
// dest - path to thumb (where to save it)
// x - max width
// y - max height
// q - quality (applicable only to JPG, 1 to 100, 100 - best)
// t - thumb type. "-1" - same as source, 1 = GIF, 2 = JPG, 3 = PNG
// f - save to file (1) or output to browser (0).

// Sample usage:
// 1. save thumb on server
// http://www.zubrag.com/thumb.php?src=test.jpg&dest=thumb.jpg&x=100&y=50
// 2. output thumb to browser
// http://www.zubrag.com/thumb.php?src=test.jpg&x=50&y=50&f=0


// Below are default values (if parameter is not passed)

// save to file (true) or output to browser (false)
$save_to_file = true;

// quality
$image_quality = 100;

// resulting image type (1 = GIF, 2 = JPG, 3 = PNG)
// enter code of the image type if you want override it
// or set it to -1 to determine automatically
$image_type = -1;

// maximum thumb side size
$max_x = 100;
$max_y = 100;

// Folder where source images are stored (thumbnails will be generated from these images).
// MUST end with slash.
//$images_folder = '/home/images/';

// Folder to save thumbnails, full path from the root folder, MUST end with slash.
// Only needed if you save generated thumbnails on the server.
// Sample for windows:     c:/wwwroot/thumbs/
// Sample for unix/linux:  /home/site.com/htdocs/thumbs/
//$thumbs_folder = '/home/thumbs/';


///////////////////////////////////////////////////
/////////////// DO NOT EDIT BELOW
///////////////////////////////////////////////////

$to_name = '';

if (isset($_REQUEST['f'])) {
  $save_to_file = intval($_REQUEST['f']) == 1;
}

if (isset($_REQUEST['src'])) {
  $from_name = urldecode($_REQUEST['src']);
}
else {
  die("Source file name must be specified.");
}

if (isset($_REQUEST['dest'])) {
  $to_name = urldecode($_REQUEST['dest']);
}
else if ($save_to_file) {
  die("Thumbnail file name must be specified.");
}

if (isset($_REQUEST['q'])) {
  $image_quality = intval($_REQUEST['q']);
}

if (isset($_REQUEST['t'])) {
  $image_type = intval($_REQUEST['t']);
}

if (isset($_REQUEST['x'])) {
  $max_x = intval($_REQUEST['x']);
}

if (isset($_REQUEST['y'])) {
  $max_y = intval($_REQUEST['y']);
}

// Allocate all necessary memory for the image.
// Special thanks to Alecos for providing the code.
ini_set('memory_limit', '-1');

function SaveImage($type, $im, $filename, $quality, $to_file = true) {

  $res = null;

  // ImageGIF is not included into some GD2 releases, so it might not work
  // output png if gifs are not supported
  if(!function_exists('imagegif')) $type = 3;

  switch ($type) {
    case 1:
      if ($to_file) {
        $res = ImageGIF($im,$filename);
      }
      else {
        header("Content-type: image/gif");
        $res = ImageGIF($im);
      }
      break;
    case 2:
      if ($to_file) {
        $res = ImageJPEG($im,$filename,$quality);
      }
      else {
        header("Content-type: image/jpeg");
        $res = ImageJPEG($im,'',$quality);
      }
      break;
    case 3:
      if ($to_file) {
        $res = ImagePNG($im,$filename);
      }
      else {
        header("Content-type: image/png");
        $res = ImagePNG($im,'',$quality);
      }
      break;
  }

  return $res;

}

function ImageCreateFromType($type,$filename) {
 $im = null;
 switch ($type) {
   case 1:
     $im = ImageCreateFromGif($filename);
     break;
   case 2:
     $im = ImageCreateFromJpeg($filename);
     break;
   case 3:
     $im = ImageCreateFromPNG($filename);
     break;
  }
  return $im;
}

// generate thumb from image and save it
function GenerateThumbFile($from_name, $to_name, $max_x, $max_y) {

  global $save_to_file, $image_type, $image_quality;

  // if src is URL then download file first
  $temp = false;
  if (substr($from_name,0,7) == 'http://') {
    $tmpfname = tempnam("tmp/", "TmP-");
    $temp = @fopen($tmpfname, "w");
    if ($temp) {
      @fwrite($temp, @file_get_contents($from_name)) or die("Cannot download image");
      @fclose($temp);
      $from_name = $tmpfname;
    }
    else {
      die("Cannot create temp file");
    }
  }

  // get source image size (width/height/type)
  // orig_img_type 1 = GIF, 2 = JPG, 3 = PNG
  list($orig_x, $orig_y, $orig_img_type, $img_sizes) = GetImageSize($from_name);

  // should we override thumb image type?
  $image_type = ($image_type != -1 ? $image_type : $orig_img_type);

  // check for allowed image types
  if ($orig_img_type < 1 or $orig_img_type > 3) die("Image type not supported");
  
  if ($orig_x > $max_x or $orig_y > $max_y) {

    // resize
    $per_x = $orig_x / $max_x;
    $per_y = $orig_y / $max_y;
    if ($per_y > $per_x) {
      $max_x = $orig_x / $per_y;
    }
    else {
      $max_y = $orig_y / $per_x;
    }

  $max_x = $orig_x;
  $max_y = $orig_y;
 

  }
  else {
    // keep original sizes, i.e. just copy
    if ($save_to_file) {
      @copy($from_name, $to_name);
    }
    else {
      switch ($image_type) {
        case 1:
            header("Content-type: image/gif");
            readfile($from_name);
          break;
        case 2:
            header("Content-type: image/jpeg");
            readfile($from_name);
          break;
        case 3:
            header("Content-type: image/png");
            readfile($from_name);
          break;
      }
    }
    return;
  }

  if ($image_type == 1) {
    // should use this function for gifs (gifs are palette images)
    $ni = imagecreate($max_x, $max_y);
  }
  else {
    // Create a new true color image
    $ni = ImageCreateTrueColor($max_x,$max_y);
  }

  // Fill image with white background (255,255,255)
  $white = imagecolorallocate($ni, 255, 255, 255);
  imagefilledrectangle( $ni, 0, 0, $max_x, $max_y, $white);
  // Create a new image from source file
  $im = ImageCreateFromType($orig_img_type,$from_name);
  // Copy the palette from one image to another
  imagepalettecopy($ni,$im);
  // Copy and resize part of an image with resampling
  imagecopyresampled(
    $ni, $im,             // destination, source
    0, 0, 0, 0,           // dstX, dstY, srcX, srcY
    $max_x, $max_y,       // dstW, dstH
    $orig_x, $orig_y);    // srcW, srcH

  // save thumb file
  SaveImage($image_type, $ni, $to_name, $image_quality, $save_to_file);

  if($temp) {
    unlink($tmpfname); // this removes the file
  }
}

// generate
GenerateThumbFile($images_folder . $from_name, $thumbs_folder. $to_name, $max_x, $max_y);

?>

<?




exit;
function remote_image($urlstr){
  $url = parse_url($urlstr);
 

  $domain = str_replace("www.","",$url[host]);
  $ext = substr($urlstr,strrpos($urlstr,".") + 1);

  $string = "";

  $res = fsockopen("$domain", 80, $strErrorNo, $strErrStr, 2);

  if($res){
 
 
    $headerstr = "GET $urlstr HTTP/1.1\r\n";
    $headerstr.= "Host:$domain:80\r\n";
    $headerstr.= "\r\n";

    fputs($res, $headerstr);

    while (!feof($res)){
   
   $string.= fgets($res, 1024);
    }
    fclose($res);
  }

  if($ext == "gif")
    return substr($string,strpos($string,"GIF89a"));
  elseif($ext == "jpg" || $ext == "jpeg")
    return substr($string,strpos($string,"image/jpeg") + 14);
}

function image_save($file,$string){
  $fp = @fopen ($file,'w');
  if(!$fp) echo $file;

  fwrite ($fp,$string);
  fclose ($fp);
}


$col[14] = "http://image.gmarket.co.kr/service_image/2007/05/03/Admin_upload200753_165837.GIF";
$file1 = remote_image($col[14]);

          if($file1 && strpos($file1,"Not Found") < 1){
            $file_name = substr($col[14],strrpos($col[14],"/")+1);

            $file_first = substr($file_name,0,strrpos($file_name,"."));
            $file_last = substr($file_name,strrpos($file_name,".") + 1);
            $file_newname1 = "$file_first" . rand(100,999) . ".$file_last";
     
      image_save("$DOCUMENT_ROOT/a/$file_newname1",$file1);
          }




?>


<?


exit;?>

2009/04/27 19:24 2009/04/27 19:24
전 PHP에서 외부 웹페이지를 가져올 때 file_get_contents라는 함수를 즐겨쓰는데, 이 놈이 이미지까지 해결해 주더군요. 여기까진 다 아시겠고... :)

위 함수로 해결 안되는 것이 헤더인데요, 마임타입이라던지 잡다한 놈을 얻기 위해서 소켓을 열어서 헤더를 파싱해서 사용하시는 분이 많더군요(PHP Q&A게시판에서 자주 나온다고 할까나...)

1원짜리 팁은 바로 이것입니다.

$http_response_header

이 넘이 있다는 사실을 지금까진 몰랐는데, 상당히 재미있는 놈이더군요. 일단, PHP에서 미리 정의된 변수로, file_get_contents로 외부 페이지던 동영상이던 읽어오면 위 변수에는 헤더가 저장이 됩니다.

메뉴얼을 링크해놨는데, 뭐 이런 식으로 나온다고 하네요.

<?php
file_get_contents("http://example.com");
var_dump($http_response_header);
?>

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}

외부 이미지와 마임타입을 가져오기 위해서 다음과 같이 이용합니다.

$a = file_get_contents($imageUrl);
foreach($http_response_header as $item)
{
    if(preg_match('/Content-Type/', $item))
    {
        $contentType = trim(preg_replace('/.+:/', '', $item));
        continue;
    }
}
2009/04/27 19:22 2009/04/27 19:22
이 소스코드는 php 버전 5.x 이상에서 사용할수 있습니다

<?

// winamp 방송정보 클래스 정의문서를 포함시키기
include_once("class_cast_info.php");


//  winamp 방송정보 객체생성
$castObj = new winamp_cast_info();


// get_info() 메서드에 2번째인자에 1을 넣으면 청취자 관련 정보만 가져옴
$castObj->get_info("www.mukulcast.com");
//$castObj->get_info("sc20.saycast.com:8568",1);


echo "방송제목:", $castObj->info["Title"] , "<br>";
echo "방송장르:" , $castObj->info["Genre"] , "<br>";
echo "방송URL:" , $castObj->info["URL"] , "<br>";
echo "AIM:" , $castObj->info["AIM"] , "<br>";
echo "IRC채널:" , $castObj->info["IRC"] , "<br>";
echo "현재곡:" , $castObj->info["CurrentSong"] , "<br>";
echo "전송속도:" , $castObj->info["Kbps"] ,"<br>";


// 청취자 관련 요소들
echo "청취자수:" , $castObj->info["Listeners"] ,"<br>";
echo "최대청취가능인원:" , $castObj->info["MaxListeners"] , "<br>";
echo "최대청취자수:" , $castObj->info["ListenersPeak"] , "<br>";
echo "평균청취시간:" , $castObj->info["AverageListenTime"] , "<br>";


// get_info() 메서드에 1번째인자 방송주소가 www.mukulcast.com 이런형식이면 설정되는 요소
echo $castObj->real_ip , "<br>";
echo $castObj->real_port , "<br>";


/*

    세이케스트는 멀티서버로 되어 있으므로 청취자 인원을 정확히 가져오지 못합니다
    만약에 모든서버의 청취자 인원을 원하시면 아래처럼 하시면 됩니다(단! 모든방송서버의 주소를 알아야합니다)

    $castObj->get_info("sc20.saycast.com:8001",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc22.saycast.com:8003",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc24.saycast.com:8005",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc25.saycast.com:8007",1);
    $total_Listeners += $castObj->info["Listeners"];

    echo $total_Listeners;
    
    참고) 위에있는 주소는 설명을하기 위해서 임의로 작성된것입니다
    

*/


?>
2009/04/27 19:12 2009/04/27 19:12
음.. 브라우저별 핵. 뭐 꼼수죠? 어쨌든 정리했습니다.
참고용으로 하셔도 되고 실로 써먹어도 되겠지만..
우리나라 웹 현실에 쓸만한게 몇개나 있을까요?
어쨌든 착하게 정리했네요.

/***** 선택자 핵 ******/

/* IE 6 이상 */

* html #uno  { color: red }

/* IE 7 이상 */

*:first-child+html #dos { color: red }

/* IE 7 과 현대 브라우저 */

html>body #tres { color: red }

/* 현대 부라우저 (IE 7 빼고) */

html>/**/body #cuatro { color: red }

/* 오페라 9.27 이상 */

html:first-child #cinco { color: red }

/*사파리 */

html[xmlns*=""] body:last-child #seis { color: red }

/*사파리 3+, 크롬 1+, 오페라 9+, 불여우 3.5+ */

body:nth-of-type(1) #siete { color: red }

/* 사파리 3+, 크롬 1+,  오페라 9+, 불여우 3.5+ */

body:first-of-type #ocho {  color: red }

/* 사파리 3, 크롬 1+ */

@media screen and (-webkit-min-device-pixel-ratio:0) {

 #diez  { background: #FFDECE; border: 2px solid #ff0000  }

}

/***** 속성 핵 ******/

/* ie6 이상 */

#once { _color:blue }

/* ie7 이상 */

#doce { *color: blue } /* or #color:blue */

/* '현대 브라우저'는 IE8 을 포함합니다, 여기에 동의하던 말던.. :) */
2009/04/27 19:08 2009/04/27 19:08
팁이라기보단 참고정도로 봐주세요...^^;
prototypejs 를 이용하구요...일반적으로 사용하지 않는 분들도 테스트 해볼 수 있는 페이지를 따로 올려볼께욤 조만간에;;;
iframe resize 에 대해 질문도 많이 올라오고 해서 테스트 해보시라고 올립니다.

참고는 여기서...
http://ajaxstudy.net/demo/view.php?&uid=17&page=1

Event.observe(window,'load',function() {

    Event.observe('aa','load',function() {

        new ASiframeresize($('aa'));

    });

    new ASiframeresize($('aa'));

});

function ASiframeresize(el) {

    this.El = el;
    this.oldLocation = null;
    this.setCount = 0;
    this.maxCount = 10;
    this.setDelay = 200;
    this.setTimer = null;
    this.setup();


}

ASiframeresize.prototype = {

    setup : function() {

        var oThis = this;
        Event.observe(this.El.contentWindow.document,'mousedown', function(event) {

            if(Event.element(event).tagName.toLowerCase() != 'body') {

                if(oThis.setTimer) {
                    oThis.setCount = 0;
                    window.clearTimeout(oThis.setTimer);
                    oThis.setTimer = null;
                }
                oThis.resize();

            }

        });

        this.resize();

    },

    resize : function() {

        this.setCount++;

        if(this.El.contentWindow.document.body) {

            this.El.setStyle({
                
                height : this.El.contentWindow.document.body.offsetHeight + 'px'

            });

        } else {

            this.El.setStyle({
                
                height : this.El.contentWindow.document.documentElement.offsetHeight + 'px'

            });


        }
        this.move();

    },

    move : function() {

        if(this.setCount > this.maxCount) {

            this.setCount = 0;
            if(this.setTimer) {
                window.clearTimeout(this.setTimer);
                this.setTimer = null;
            }

        } else {

            var oThis = this;
            var fn = function(){ oThis.resize();}
            this.setTimer = window.setTimeout(fn,oThis.setDelay);

        }

    }

    

}

허접하지만 혹시라도 그럼^^;

출처: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=ajax&wr_id=893&page=1
2009/04/27 19:07 2009/04/27 19:07

사용자 삽입 이미지

디스크 파티션 복구에 유용한 testdisk 입니다.
 
리눅스용과 윈도우용 2개입니다.
 
의외로 강력한 기능을 자랑합니다.
2009/04/27 17:18 2009/04/27 17:18
사용자 삽입 이미지

Tag&Rename은 MP3 파일에 포함된 가수 및 장르, 앨범 타이틀 등의 태그 정보를 편집할 수 있는 태그 편집기 입니다.


MP3 태그라 하면 MP3 파일의 마지막에 파일에 관련된 각종 정보를 저장하고 있는 부분을 말합니다. 이러한 태그에 제목 및 가수, 장르 등의 데이터를 정확히 입력, 관리 함으로써 좀더 편리하게 MP3 파일을 관리할 수 있도록 해주며 프로그램에서는 한 개의 태그에 대한 편집 뿐만 아니라 다수의 MP3 파일에 대해 손쉬운 방법으로 태그 편집이 가능합니다.


주요특징


멀티 파일 및 메뉴얼 태그 편집기

ID3v1 및 ID3v2 MP3 태그 지원

ID3v1를 ID3v2 태그 원 클릭 변환

CSV 추출 마법사

CDDB1 지원

ID3 태그 필드 Swap

M3U 플레이 리스트 생성 지원

외부 기본 재생기를 사용한 MP3 및 VQF 포맷 재생 연동
2009/04/27 17:16 2009/04/27 17:16
CD 또는 DVD 매체의 이미지 파일을 처리하는 툴입니다. 이미지 파일들을 열기, 추출, 생성, 편집, 압축, 암호화, 나누기, ISO 파일 변환, 가상 드라이브 구축 등의 기능이 있습니다.




  • ISO/DAA 파일 버닝 기능 추가
  • 8개 까지의 가상 드라이브 지원


    ISO, BIN을 포함한 대부분의 CD-ROM 이미지 파일들을 처리할 수 있다고 합니다.

    셰어웨어로서 비등록 버전에서는 300MB 이상의 이미지 파일을 생성하거나 편집할 수 없습니다.




  • 대부분의 CD/DVD-ROM 이미지 파일 포맷 지원 (ISO, BIN, NRG, CDI, DAA 등등)

  • ISO 파일의 열기 및 추출

  • 하드디스크 내의 파일들 또는 CD/DVD-ROM으로로부터 ISO 파일 생성

  • ISO 파일을 직접 편집

  • BIN 등 다른 포맷을 ISO 포맷으로 변환

  • 부팅가능 ISO 파일 만들기

  • 플로피 디스크 이미지 파일 만들기

  • 디스크 공간 절약을 위한 최적화된 ISO 파일 생성

  • ISO 파일을 이용해서 가상 드라이브 마운트

  • 쉘 결합, 컨텍스트 메뉴, 드래그 & 드롭, 클립보드 등의 간편한 인터페이스
  • 2009/04/27 17:14 2009/04/27 17:14
    사용자 삽입 이미지
    높은 호환성으로 세계적으로 많이 사용되고 있는 Adobe의 PDF(Portable Document Format) 파일을 볼 수 있는 프로그램 Adobe Reader 입니다
    2009/04/27 17:10 2009/04/27 17:10

    사용자 삽입 이미지

    오랜만에 업그레이드 되었군요
     
    카리스마조님의 윈도우즈 인증 패키지 입니다.
     
    간단하게 인증하실 분은 라이트 버전만 받아서 하시고 다른 추가적인 기능도 같이 변경하시고 싶을 경우는 풀버전 쓰시면됩니다.
     
    이번버전의 변경사항은 아직 공개를 안하셨네요
     
    XP / Vista / 2008 인증크렉이라고 보시면 됩니다.
    2009/04/27 17:05 2009/04/27 17:05

    String.prototype.trim = function() {

    return this.replace(/^\s+|\s+$/g,"");

    }

    String.prototype.ltrim = function() {

    return this.replace(/^\s+/,"");

    }

    String.prototype.rtrim = function() {

    return this.replace(/\s+$/,"");

    }

    2009/04/21 10:57 2009/04/21 10:57

    경고: 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. 필자는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다.

    HKLMSystemCurrentControlSetServicesTcpipParameters
    값 이름: SynAttackProtect
    키: TcpipParameters
    값 종류: REG_DWORD
    유효 범위: 0,1
    기본값: 0

    이 레지스트리 값은 TCP(Transmission Control Protocol)가 SYN-ACKS의 재전송을 조정하도록 합니다. 이 값을 구성하면 SYN 공격(서비스 거부 공격의 한 종류) 동안 연결 응답이 더 빨리 시간 초과됩니다.

    다음 매개 변수는 이 레지스트리 값과 함께 사용할 수 있습니다. ? 0(기본값): SYN 공격에 대한 일반적인 보호를 하려면 SynAttackProtect를 0으로 설정합니다.
    1 : SYN 공격에 대하여 보다 높은 수준의 보호를 하려면 SynAttackProtect를 1로 설정합니다. 이 매개 변수는 TCP가 SYN-ACKS의 재전송을 조정하도록 합니다. SynAttackProtect를 1로 설정하는 경우 시스템에서 SYN 공격이 이루어지고 있음을 감지하면 연결 응답이 더 빨리 시간 초과됩니다. Windows는 공격이 진행 중인지 확인하기 위하여 다음 값을 사용합니다.

    TcpMaxPortsExhausted
    TCPMaxHalfOpen
    TCPMaxHalfOpenRetried


    값 이름: EnableDeadGWDetect
    키: TcpipParameters
    값 종류: REG_DWORD
    유효 범위: 0, 1(False, True)
    기본값: 1(True)

    다음은 이 레지스트리 값과 함께 사용할 수 있는 매개 변수입니다. ? 1 : EnableDeadGWDetect를 1로 설정하면 TCP는 더 이상 작동하지 않는 게이트웨이를 검색할 수 있습니다. 더 이상 작동하지 않는 게이트웨이 감지가 사용되면 TCP는 여러 연결에 문제가 발생하는 경우 인터넷 프로토콜(IP)에 백업 게이트웨이를 변경하도록 요청할 수 있습니다. 백업 게이트웨이는 제어판의 네트워크 도구에 있는 TCP/IP 구성 대화 상자의 고급 섹션에서 정의됩니다.
    0: EnableDeadGWDetect 값은 0으로 설정하는 것이 좋습니다. 0으로 설정하지 않으면 공격으로 인하여 서버가 강제로 원하지 않는 게이트웨이로 전환될 수 있습니다.

    값 이름: EnablePMTUDiscovery
    키: TcpipParameters
    값 종류: REG_DWORD
    유효 범위: 0, 1(False, True)
    기본값: 1(True)

    다음은 이 레지스트리 값과 함께 사용할 수 있는 매개 변수입니다. ? 1 : EnablePMTUDiscovery를 1로 설정하면 TCP는 최대 전송 단위(MTU)나 원격 호스트 경로에 대한 최대 패킷 크기를 검색하려 합니다. TCP는 경로의 MTU를 검색하고 TCP 세그먼트를 이 크기로 제한하여 경로에 있는 각자 다른 MTU로 네트워크에 연결하는 라우터에서 조각을 제거할 수 있습니다. 조각이 있으면 TCP 처리량에 좋지 않은 영향을 줍니다.
    ? 0 : EnablePMTUDiscovery는 0으로 설정하는 것이 좋습니다. 이렇게 하면 로컬 서브넷에서 호스트하지 않는 모든 연결에 576바이트의 MTU가 사용됩니다. 이 값을 0으로 설정하지 않으면 공격자가 강제로 MTU를 아주 작은 값으로 설정하여 스택의 부하가 커집니다.

    값 이름: KeepAliveTime
    키: TcpipParameters
    값 종류: REG_DWORD - 시간(밀리초)
    유효 범위: 1 - 0xFFFFFFFF
    기본값: 7,200,000(2시간)

    이 값은 TCP가 Keep Alive 패킷을 보내어 유휴 연결이 열려 있는지 확인하는 빈도를 결정합니다. 연결이 유지되어 있다면 원격 컴퓨터가 Keep-Alive 패킷을 인식합니다. Keep-Alive 패킷은 기본적으로 보내지지 않습니다. 연결에서 이 값을 구성하기 위한 프로그램을 사용할 수 있습니다. 권장값은 300,000(5분)입니다.

    값 이름: NoNameReleaseOnDemand
    키: NetbtParameters
    값 종류: REG_DWORD
    유효 범위: 0, 1(False, True)
    기본값: 0(False)

    이 값은 컴퓨터가 이름 해제 요청을 받을 때 NetBIOS 이름을 해제할지 여부를 결정합니다. 이 값은 관리자가 악의적인 이름 해제 공격으로부터 컴퓨터를 보호할 수 있도록 추가되었습니다. NoNameReleaseOnDemand 값은 1로 설정하는 것이 좋습니다.


    DisableIPSourceRouting DWORD 2

    IP 원본 라우팅은 데이터그램이 네트워크를 통해 취해야 할 IP 경로를 보낸 사람이 결정할 수 있도록 하는 메커니즘입니다.
    보안 문제
    공격자는 원본에서 라우팅한 패킷을 사용하여 ID와 위치를 모호하게 만들 수 있습니다.
    패킷을 보내는 컴퓨터는 원본 라우팅을 통해 사용할 경로를 지정할 수 있습니다.
    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0, 1 또는 2, 기본값은 0(원본에서 라우팅한 패킷 확인됨)


    TcpMaxConnectResponseRetransmissions DWORD 2

    TcpMaxConnectResponseRetransmissions: SYN ? ACK retransmissions when a connection request is not acknowledged
    이 항목은 SCE에서 MSS: SYN ? ACK retransmissions when a connection request is not acknowledged로 나타납니다. 이 매개 변수는 중단하기 전에 TCP에서 SYN을 재전송하는 횟수를 결정합니다. 재전송 제한 시간은 지정한 연결 시도에서 재전송이 연속될 때마다 두 배로 증가합니다. 초기 시간 제한 값은 3초입니다.

    보안 문제
    SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

    대책
    MSS: SYN ? ACK retransmissions when a connection request is not acknowledged의 값을 3 seconds, half?open connections dropped after nine seconds로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0?0xFFFFFFFF, 기본값은 2


    TcpMaxDataRetransmissions DWORD 3

    TcpMaxDataRetransmissions: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)
    이 항목은 SCE에서 MSS: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)로 나타납니다. 이 매개 변수는 연결을 중단하기 전에 TCP에서 개별 데이터 세그먼트(연결되지 않은 세그먼트)를 재전송하는 횟수를 결정합니다. 재전송 제한 시간은 연결에서 재전송이 연속될 때마다 두 배로 증가하고 응답이 재개되면 다시 설정됩니다. 기본 제한 시간 값은 연결 시 측정된 Round-Trip Time에 따라 동적으로 결정됩니다.

    보안 문제
    SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

    대책
    MSS: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)의 값을 3으로 구성하십시오. 이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0 ~ 0xFFFFFFFF, 기본값은 5


    PerformRouterDiscovery DWORD 0

    PerformRouterDiscovery: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)
    이 항목은 SCE에서 MSS: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)로 나타납니다. 이 설정은 IRDP(Internet Router Discovery Protocol)의 사용 여부를 설정하는 데 사용됩니다. IRDP를 사용하면 시스템에서 기본 게이트웨이 주소를 자동으로 검색하고 구성할 수 있습니다.

    보안 문제
    같은 네트워크 세그먼트에서 시스템을 제어하는 공격자는 네트워크에서 컴퓨터가 라우터를 가장하도록 구성할 수 있습니다. 그러면 IRDP를 사용하도록 설정된 다른 컴퓨터에서 이미 손상된 시스템을 통해 트래픽을 라우팅하려고 시도할 수 있습니다.

    대책
    MSS: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)의 값을 사용 안 함으로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 1 또는 0, 기본값은 0(사용 안 함)


    TCPMaxPortsExhausted DWORD 5

    TCPMaxPortsExhausted: How many dropped connect requests to initiate SYN attack protection (5 is recommended)
    이 항목은 SCE에서 MSS: How many dropped connect requests to initiate SYN attack protection (5 is recommended)으로 나타납니다. 이 매개 변수는 SYN ? ATTACK 보호가 작동하기 시작하는 시점을 결정합니다. 사용 가능한 연결 백로그를 0으로 설정했기 때문에 시스템에서 TcpMaxPortsExhausted 연결 요청을 거부하면 SYN ? ATTACK 보호가 작동하기 시작합니다.

    보안 문제
    SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

    대책
    MSS: How many dropped connect requests to initiate SYN attack protection (5 is recommended)의 값을 5로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0 ~ 0xFFFF, 기본값은 5


    AFD 설정:

    DynamicBacklogGrowthDelta

    EnableDynamicBacklog
    MinimumDynamicBacklog

    MaximumDynamicBacklog
    FTP 서버 및 웹 서버와 같은 Windows 소켓 응용 프로그램의 연결 시도는 Afd.sys에 의해 처리됩니다. Afd.sys는 합법적 클라이언트에 대한 액세스를 거부하지 않고 부분 공개 상태에서 여러 번의 연결을 지원하도록 수정되었습니다.
    관리자가 동적 백로그를 구성할 수 있도록 함으로써 이러한 지원이 가능해졌습니다.
    DynamicBacklogGrowthDelta는 연결이 더 필요할 때 만들 사용 가능 연결 수를 결정합니다. 값이 크면 free 연결 할당이 폭주할 수 있으므로 이 값을 주의하여 설정하십시오.
    SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.


    DisableIPSourceRouting
    IP 원본 라우팅은 데이터그램이 네트워크를 통해 취해야 할 IP 경로를 보낸 사람이 결정할 수 있도록 하는 메커니즘입니다. 이 값을 2로 설정하면 원본에서 라우팅한 모든 들어오는 패킷이 삭제됩니다.
    공격자는 원본에서 라우팅한 패킷을 사용하여 ID와 위치를 모호하게 만듭니다. 패킷을 보내는 컴퓨터는 원본 라우팅을 통해 취할 경로를 지정할 수 있게 됩니다.


    PerformRouterDiscovery
    이 매개 변수는 IRDP(Internet Router Discovery Protocol)를 지원하는 Windows 2000이 컴퓨터에서 기본 게이트웨이 주소를 자동으로 검색 및 구성하지 못하도록 하기 위해 설정됩니다.
    같은 네트워크 세그먼트에서 시스템을 제어하는 공격자는 네트워크에서 컴퓨터가 라우터를 가장하도록 구성할 수 있습니다.
    그러면 IRDP를 사용하도록 설정된 다른 컴퓨터에서 이미 손상된 시스템을 통해 트래픽을 라우팅하려고 시도할 수 있습니다.

    자동 실행 사용 안 함: 모든 드라이브에 대해 자동 실행 사용 안 함
    이 항목은 SCE에서 MSS: 모든 드라이브에 대해 자동 실행 사용 안 함으로 나타납니다. 자동 실행은 컴퓨터의 드라이브에 미디어가 삽입되는 즉시 읽기를 시작하는 기능입니다. 따라서 프로그램의 설치 파일과 오디오 미디어의 사운드가 즉시 시작됩니다.

    다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesExplorer 레지스트리 키에 추가되었습니다.

    표 5. 자동 실행을 사용하지 않도록 구성하기 위해 레지스트리에 추가된 설정

    하위 키 레지스트리 값 항목 형식 권장 값(10진수)
    NoDriveTypeAutoRun
    DWORD
    0xFF


    다음 설정의 값을 1로 설정하여 CD/DVD 자동 실행만 사용할 수 없도록 할 수도 있습니다. 다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesCdrom 레지스트리 키에 추가되었습니다.

    표 6. 자동 실행을 사용하지 않도록 구성하기 위해 레지스트리에 추가할 설정

    하위 키 레지스트리 값 항목 형식 권장 값(10진수)
    AutoRun
    DWORD
    0


    보안 문제
    미디어를 삽입할 때 악의적인 프로그램이 시작되지 않도록 하기 위해 그룹 정책을 통해 모든 드라이브에서 자동 실행을 사용하지 않도록 합니다.

    시스템에 실제로 액세스할 수 있는 공격자는 자동 실행이 가능한 DVD 또는 CD를 컴퓨터에 삽입할 수 있으므로 이로 인해 악의적인 코드가 자동으로 시작됩니다. 이 악의적 프로그램에는 공격자가 원하는 모든 코드가 포함되어 있습니다.

    화면 보호기 암호 보호 즉시 적용: 화면 보호기 유예 기간 만료 시간(초)(0 권장)
    이 항목은 SCE에서 MSS: 화면 보호기 유예 기간 만료 시간(초)(0 권장)으로 나타납니다. Windows에는 화면 보호기 잠금이 활성화되어 있는 경우 화면 보호기가 실행된 후 실제로 콘솔이 자동으로 잠길 때까지의 유예 기간이 설정되어 있습니다.

    다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINESYSTEMSoftwareMicrosoftWindows NTCurrentVersionWinlogon 레지스트리 키에 추가되었습니다.

    표 7. 화면 보호기 암호 보호를 즉시 적용하기 위해 레지스트리에 추가된 설정

    하위 키 레지스트리 값 항목 형식 권장 값(10진수)
    ScreenSaverGracePeriod
    String
    0


    보안 문제
    화면 보호기 잠금이 실행되기 전에 사용자 동작에 허용된 기본 유예 기간은 5초입니다. 기본 유예 기간의 기본 설정을 그대로 유지하면 화면 보호기 잠금이 실행되기 전에 시스템에 로그온하기 위해 콘솔에 들어가는 사람으로부터 컴퓨터가 쉽게 공격을 받을 수 있습니다. 레지스트리 항목을 만들어 유예 기간을 조정할 수 있습니다.

    대책
    MSS: 화면 보호기 유예 기간 만료 시간(초)(0 권장)의 값을 0으로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0 ~ 255, 기본값은 5초

    보안 로그 용량 경고: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값
    이 항목은 SCE에서 MSS: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값으로 나타납니다. Windows Server 2003과 Windows 2000 서비스 팩 3에는 보안 로그가 사용자 정의된 임계값에 도달하면 보안 이벤트 로그에 보안 감사를 생성하는 새로운 기능이 포함되어 있습니다. 예를 들어 이 값이 90으로 설정된 경우에는 보안 로그가 용량의 90%에 도달하면 eventID 523에 대한 이벤트 항목과 보안 이벤트 로그가 90% 찼습니다.라는 텍스트가 표시됩니다.

    참고: 필요에 따라 이벤트를 덮어쓰도록 보안 이벤트 로그를 구성한 경우에는 이 설정이 적용되지 않습니다.

    다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesEventlogSecurity 레지스트리 키에 추가되었습니다.

    표 8. 안전한 DLL 검색 모드를 사용할 수 있도록 레지스트리에 추가된 설정

    하위 키 레지스트리 값 항목 형식 권장 값(10진수)
    WarningLevel
    DWORD
    0


    보안 문제
    필요에 따라 이벤트를 덮어쓰도록 컴퓨터를 구성하지 않은 경우 보안 로그가 꽉 차면 최신 이벤트가 로그에 기록되지 않습니다. 보안 로그에 더 이상 이벤트를 기록할 수 없을 때 컴퓨터를 종료하도록 구성한 경우 로그가 꽉 차면 컴퓨터가 종료되고 네트워크 서비스를 더 이상 제공할 수 없게 됩니다.

    대책
    MSS: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값의 값을 90으로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 0 ~ 100, 기본값은 0(경고 이벤트가 생성되지 않음)

    안전한 DLL 검색 순서 사용: 안전한 DLL 검색 모드 사용(권장)
    이 항목은 SCE에서 MSS: 안전한 DLL 검색 모드 사용(권장)으로 나타납니다. 다음 두 가지 중 한 가지 방법으로 프로세스를 실행하여 요청된 DLL(동적 연결 라이브러리)을 검색하도록 DLL 검색 순서를 구성할 수 있습니다.

    ? 시스템 경로에 지정된 폴더를 먼저 검색한 다음 현재 작업 중인 폴더를 검색합니다.

    ? 현재 작업 중인 폴더를 먼저 검색한 다음 시스템 경로에 지정된 폴더를 검색합니다.


    이 레지스트리 값은 1로 설정되어 있습니다. 이 경우 시스템에서는 시스템 경로에 지정된 폴더를 먼저 검색한 다음 현재 작업 중인 폴더를 검색합니다. 0으로 설정하면 시스템에서는 현재 작업 중인 폴더를 먼저 검색한 다음 시스템 경로에 지정된 폴더를 검색합니다.

    다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetControlSession Manager 레지스트리 키에 추가되었습니다.

    표 9. 안전한 DLL 검색 모드를 사용할 수 있도록 레지스트리에 추가된 설정

    하위 키 레지스트리 값 항목 형식 권장 값(10진수)
    SafeDllSearchMode
    DWORD
    0


    보안 문제
    사용자가 실수로 악성 코드를 실행하는 경우 이 코드가 수정된 버전의 시스템 DLL을 포함하여 추가 파일과 함께 패키지되어 있으면 해당 DLL의 고유 버전이 로드되어 코드에서 렌더링할 수 있는 손상 유형 및 정도가 커집니다.

    대책
    MSS: 안전한 DLL 검색 모드 사용(권장)의 값을 사용으로 구성하십시오.

    이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

    ? 1 또는 0, 기본값은 0

    최종 로그온 사용자 이름 감추기
    레지스트리를 아래와 같이 설정하여 최종 로그온 한 사용자의 이름을 감추십시오.

    Win NT

    하이브
    HKEY_LOCAL_MACHINESOFTWARE


    MicrosoftWindows NTCurrent VersionWinlogon

    이름
    DontDisplayLastUserName

    형식
    REG_SZ (Win 2000 > REG_DWORD)


    1

    win NT

    공개 로컬 보안 인증(LSA)의 정보에 대한 액세스 제한

    시스템의 모든 사용자를 식별하여, 익명 사용자를 제한하고 Windows NT Security Subsystem의 LSA 구성 요소에 대해 얻을 수 있는 공개 정보를 최소화해야 합니다. LSA는 로컬 컴퓨터의 액세스와 사용 권한을 포함한 보안 관리 항목을 처리합니다. 이 제한을 적용하려면 아래와 같이 레지스트리 항목을 만들고 설정하십시오. 하이브

    HKEY_LOCAL_MACHINE SYSTEM


    CurrentControlSetControlLSA


    값 이름

    RestrictAnonymous


    종류

    REG_DWORD


    1

    win 2000
    RestrictAnonymous 레지스트리 값
    레지스트리 편집기를 사용하여 다음 레지스트리 키를 보고 이 키에 다음 값을 추가하거나 값이 이미 있는 경우 값을 수정하십시오.
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA
    값: RestrictAnonymous
    값 종류: REG_DWORD
    값 데이터: 0x2(16진수)

    윈도우 기본 공유 폴더 생성 또는 제거

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParametersAutoShareServer

    AutoShareServer의 값을 0으로 한경우 재시작시 공유 만들지 않음.
    1인경우 재시작시 공유 만들거나 복원.
    출처 : [기타] 인터넷 : support.microsoft.com 검색 내용

    2009/04/21 10:56 2009/04/21 10:56
    2009/04/21 10:55 2009/04/21 10:55
    http://www.samair.ru/proxy/type-01.htm
    2009/04/21 10:54 2009/04/21 10:54
    --//SQL Database documentation script
    --//Description: T-SQL script to generate the database document for SQL server 2000/2005

    Declare @i Int, @maxi Int
    Declare @j Int, @maxj Int
    Declare @sr int
    Declare @Output varchar(4000)
    --Declare @tmpOutput varchar(max)
    Declare @SqlVersion varchar(5)
    Declare @last varchar(155), @current varchar(255), @typ varchar(255), @description varchar(4000)

    create Table #Tables  (id int identity(1, 1), Object_id int, Name varchar(155), Type varchar(20), [description] varchar(4000))
    create Table #Columns (id int identity(1,1), Name varchar(155), Type Varchar(155), Nullable varchar(2), [description] varchar(4000))
    create Table #Fk(id int identity(1,1), Name varchar(155), col Varchar(155), refObj varchar(155), refCol varchar(155))
    create Table #Constraint(id int identity(1,1), Name varchar(155), col Varchar(155), definition varchar(1000))
    create Table #Indexes(id int identity(1,1), Name varchar(155), Type Varchar(25), cols varchar(1000))

     If (substring(@@VERSION, 1, 25 ) = 'Microsoft SQL Server 2005')
       set @SqlVersion = '2005'
    else if (substring(@@VERSION, 1, 26 ) = 'Microsoft SQL Server  2000')
       set @SqlVersion = '2000'
    else
       set @SqlVersion = '2005'


    Print '<head>'
    Print '<title>::' + DB_name() + '::</title>'
    Print '<style>'
       
    Print '      body {'
    Print '      font-family:verdana;'
    Print '      font-size:9pt;'
    Print '      }'
         
    Print '      td {'
    Print '      font-family:verdana;'
    Print '      font-size:9pt;'
    Print '      }'
         
    Print '      th {'
    Print '      font-family:verdana;'
    Print '      font-size:9pt;'
    Print '      background:#d3d3d3;'
    Print '      }'
    Print '      table'
    Print '      {'
    Print '      background:#d3d3d3;'
    Print '      }'
    Print '      tr'
    Print '      {'
    Print '      background:#ffffff;'
    Print '      }'
    Print '   </style>'
    Print '</head>'
    Print '<body>'

    set nocount on
       if @SqlVersion = '2000'
          begin
          insert into #Tables (Object_id, Name, Type, [description])
             --FOR 2000
             select object_id(table_name),  '[' + table_schema + '].[' + table_name + ']', 
             case when table_type = 'BASE TABLE'  then 'Table'   else 'View' end,
             cast(p.value as varchar(4000))
             from information_schema.tables t
             left outer join sysproperties p on p.id = object_id(t.table_name) and smallid = 0 and p.name = 'MS_Description'
             order by table_type, table_schema, table_name
          end
       else if @SqlVersion = '2005'
          begin
          insert into #Tables (Object_id, Name, Type, [description])
          --FOR 2005
          Select o.object_id,  '[' + s.name + '].[' + o.name + ']',
                case when type = 'V' then 'View' when type = 'U' then 'Table' end, 
                cast(p.value as varchar(4000))
                from sys.objects o
                   left outer join sys.schemas s on s.schema_id = o.schema_id
                   left outer join sys.extended_properties p on p.major_id = o.object_id and minor_id = 0 and p.name = 'MS_Description'
                where type in ('U', 'V')
                order by type, s.name, o.name
          end
    Set @maxi = @@rowcount
    set @i = 1

    print '<table border="0" cellspacing="0" cellpadding="0" width="550px" align="center"><tr><td colspan="3" style="height:50;font-size:14pt;text-align:center;"><a name="index"></a><b>Index</b></td></tr></table>'
    print '<table border="0" cellspacing="1" cellpadding="0" width="550px" align="center"><tr><th>Sr</th><th>Object</th><th>Type</th></tr>'
    While(@i <= @maxi)
    begin
       select @Output =  '<tr><td align="center">' + Cast((@i) as varchar) + '</td><td><a href="#' + Type + ':' + name + '">' + name + '</a></td><td>' + Type + '</td></tr>'
             from #Tables where id = @i
      
       print @Output
       set @i = @i + 1
    end
    print '</table><br />'

    set @i = 1
    While(@i <= @maxi)
    begin
       --table header
       select @Output =  '<tr><th align="left"><a name="' + Type + ':' + name + '"></a><b>' + Type + ':' + name + '</b></th></tr>',  @description = [description]
             from #Tables where id = @i
      
       print '<br /><br /><br /><table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td align="right"><a href="#index">Index</a></td></tr>'
       print @Output
       print '</table><br />'
       print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Description</b></td></tr><tr><td>' + isnull(@description, '') + '</td></tr></table><br />'

       --table columns
       truncate table #Columns
       if @SqlVersion = '2000'
          begin
          insert into #Columns  (Name, Type, Nullable, [description])
          --FOR 2000
          Select c.name,
                   type_name(xtype) + (
                   case when (type_name(xtype) = 'varchar' or type_name(xtype) = 'nvarchar' or type_name(xtype) ='char' or type_name(xtype) ='nchar')
                      then '(' + cast(length as varchar) + ')'
                    when type_name(xtype) = 'decimal' 
                         then '(' + cast(prec as varchar) + ',' + cast(scale as varchar)   + ')'
                   else ''
                   end           
                   ),
                   case when isnullable = 1 then 'Y' else 'N'  end,
                   cast(p.value as varchar(8000))
                from syscolumns c
                   inner join #Tables t on t.object_id = c.id
                   left outer join sysproperties p on p.id = c.id and p.smallid = c.colid and p.name = 'MS_Description'
                where t.id = @i
                order by c.colorder
          end
       else if @SqlVersion = '2005'
          begin
          insert into #Columns  (Name, Type, Nullable, [description])
          --FOR 2005  
          Select c.name,
                   type_name(user_type_id) + (
                   case when (type_name(user_type_id) = 'varchar' or type_name(user_type_id) = 'nvarchar' or type_name(user_type_id) ='char' or type_name(user_type_id) ='nchar')
                      then '(' + cast(max_length as varchar) + ')'
                    when type_name(user_type_id) = 'decimal' 
                         then '(' + cast([precision] as varchar) + ',' + cast(scale as varchar)   + ')'
                   else ''
                   end           
                   ),
                   case when is_nullable = 1 then 'Y' else 'N'  end,
                   cast(p.value as varchar(4000))
          from sys.columns c
                inner join #Tables t on t.object_id = c.object_id
                left outer join sys.extended_properties p on p.major_id = c.object_id and p.minor_id  = c.column_id and p.name = 'MS_Description'
          where t.id = @i
          order by c.column_id
          end
       Set @maxj =   @@rowcount
       set @j = 1

       print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Table Columns</b></td></tr></table>'
       print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Datatype</th><th>Nullable</th><th>Description</th></tr>'
      
       While(@j <= @maxj)
       begin
          select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  upper(isnull(Type,'')) + '</td><td width="50px" align="center">' + isnull(Nullable,'N') + '</td><td>' + isnull([description],'') + '</td></tr>'
             from #Columns  where id = @j
         
          print    @Output   
          Set @j = @j + 1;
       end

       print '</table><br />'

       --reference key
       truncate table #FK
       if @SqlVersion = '2000'
          begin
          insert into #FK  (Name, col, refObj, refCol)
       --      FOR 2000
          select object_name(constid), s.name,  object_name(rkeyid) ,  s1.name 
                from sysforeignkeys f
                   inner join sysobjects o on o.id = f.constid
                   inner join syscolumns s on s.id = f.fkeyid and s.colorder = f.fkey
                   inner join syscolumns s1 on s1.id = f.rkeyid and s1.colorder = f.rkey
                   inner join #Tables t on t.object_id = f.fkeyid
                where t.id = @i
                order by 1
          end  
       else if @SqlVersion = '2005'
          begin
          insert into #FK  (Name, col, refObj, refCol)
    --      FOR 2005
          select f.name, COL_NAME (fc.parent_object_id, fc.parent_column_id) , object_name(fc.referenced_object_id) , COL_NAME (fc.referenced_object_id, fc.referenced_column_id)    
          from sys.foreign_keys f
             inner  join  sys.foreign_key_columns  fc  on f.object_id = fc.constraint_object_id  
             inner join #Tables t on t.object_id = f.parent_object_id
          where t.id = @i
          order by f.name
          end
      
       Set @maxj =   @@rowcount
       set @j = 1
       if (@maxj >0)
       begin

          print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Refrence Keys</b></td></tr></table>'
          print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Reference To</th></tr>'

          While(@j <= @maxj)
          begin

             select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>[' + isnull(refObj,'N') + '].[' +  isnull(refCol,'N') + ']</td></tr>'
                from #FK  where id = @j

             print @Output
             Set @j = @j + 1;
          end

          print '</table><br />'
       end

       --Default Constraints
       truncate table #Constraint
       if @SqlVersion = '2000'
          begin
          insert into #Constraint  (Name, col, definition)
          select object_name(c.constid), col_name(c.id, c.colid), s.text
                from sysconstraints c
                   inner join #Tables t on t.object_id = c.id
                   left outer join syscomments s on s.id = c.constid
                where t.id = @i
                and
                convert(varchar,+ (c.status & 1)/1)
                + convert(varchar,(c.status & 2)/2)
                + convert(varchar,(c.status & 4)/4)
                + convert(varchar,(c.status & 8)/8)
                + convert(varchar,(c.status & 16)/16)
                + convert(varchar,(c.status & 32)/32)
                + convert(varchar,(c.status & 64)/64)
                + convert(varchar,(c.status & 128)/128) = '10101000'
          end
       else if @SqlVersion = '2005'
          begin
          insert into #Constraint  (Name, col, definition)
          select c.name,  col_name(parent_object_id, parent_column_id), c.definition
          from sys.default_constraints c
             inner join #Tables t on t.object_id = c.parent_object_id
          where t.id = @i
          order by c.name
          end
       Set @maxj =   @@rowcount
       set @j = 1
       if (@maxj >0)
       begin

          print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Default Constraints</b></td></tr></table>'
          print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Value</th></tr>'

          While(@j <= @maxj)
          begin

             select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="250px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>' +  isnull(definition,'') + '</td></tr>'
                from #Constraint  where id = @j

             print @Output
             Set @j = @j + 1;
          end

       print '</table><br />'
       end


       --Check  Constraints
       truncate table #Constraint
       if @SqlVersion = '2000'
          begin
          insert into #Constraint  (Name, col, definition)
             select object_name(c.constid), col_name(c.id, c.colid), s.text
                from sysconstraints c
                   inner join #Tables t on t.object_id = c.id
                   left outer join syscomments s on s.id = c.constid
                where t.id = @i
                and ( convert(varchar,+ (c.status & 1)/1)
                   + convert(varchar,(c.status & 2)/2)
                   + convert(varchar,(c.status & 4)/4)
                   + convert(varchar,(c.status & 8)/8)
                   + convert(varchar,(c.status & 16)/16)
                   + convert(varchar,(c.status & 32)/32)
                   + convert(varchar,(c.status & 64)/64)
                   + convert(varchar,(c.status & 128)/128) = '00101000'
                or convert(varchar,+ (c.status & 1)/1)
                   + convert(varchar,(c.status & 2)/2)
                   + convert(varchar,(c.status & 4)/4)
                   + convert(varchar,(c.status & 8)/8)
                   + convert(varchar,(c.status & 16)/16)
                   + convert(varchar,(c.status & 32)/32)
                   + convert(varchar,(c.status & 64)/64)
                   + convert(varchar,(c.status & 128)/128) = '00100100')

          end
       else if @SqlVersion = '2005'
          begin
          insert into #Constraint  (Name, col, definition)
             select c.name,  col_name(parent_object_id, parent_column_id), definition
             from sys.check_constraints c
                inner join #Tables t on t.object_id = c.parent_object_id
             where t.id = @i
             order by c.name
          end
       Set @maxj =   @@rowcount
      
       set @j = 1
       if (@maxj >0)
       begin

          print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Check  Constraints</b></td></tr></table>'
          print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Definition</th></tr>'

          While(@j <= @maxj)
          begin

             select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="250px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>' +  isnull(definition,'') + '</td></tr>'
                from #Constraint  where id = @j
             print @Output
             Set @j = @j + 1;
          end

          print '</table><br />'
       end


       --Triggers
       truncate table #Constraint
       if @SqlVersion = '2000'
          begin
          insert into #Constraint  (Name)
             select tr.name
             FROM sysobjects tr
                inner join #Tables t on t.object_id = tr.parent_obj
             where t.id = @i and tr.type = 'TR'
             order by tr.name
          end
       else if @SqlVersion = '2005'
          begin
          insert into #Constraint  (Name)
             SELECT tr.name
             FROM sys.triggers tr
                inner join #Tables t on t.object_id = tr.parent_id
             where t.id = @i
             order by tr.name
          end
       Set @maxj =   @@rowcount
      
       set @j = 1
       if (@maxj >0)
       begin

          print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Triggers</b></td></tr></table>'
          print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Description</th></tr>'

          While(@j <= @maxj)
          begin
             select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td></td></tr>'
                from #Constraint  where id = @j
             print @Output
             Set @j = @j + 1;
          end

          print '</table><br />'
       end

       --Indexes
       truncate table #Indexes
       if @SqlVersion = '2000'
          begin
          insert into #Indexes  (Name, type, cols)
             select i.name, case when i.indid = 0 then 'Heap' when i.indid = 1 then 'Clustered' else 'Nonclustered' end , c.name
             from sysindexes i
                inner join sysindexkeys k  on k.indid = i.indid  and k.id = i.id
                inner join syscolumns c on c.id = k.id and c.colorder = k.colid
                inner join #Tables t on t.object_id = i.id
             where t.id = @i and i.name not like '_WA%'
             order by i.name, i.keycnt
          end
       else if @SqlVersion = '2005'
          begin
          insert into #Indexes  (Name, type, cols)
             select i.name, case when i.type = 0 then 'Heap' when i.type = 1 then 'Clustered' else 'Nonclustered' end,  col_name(i.object_id, c.column_id)
                from sys.indexes i
                   inner join sys.index_columns c on i.index_id = c.index_id and c.object_id = i.object_id
                   inner join #Tables t on t.object_id = i.object_id
                where t.id = @i
                order by i.name, c.column_id
          end

       Set @maxj =   @@rowcount
      
       set @j = 1
       set @sr = 1
       if (@maxj >0)
       begin

          print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Indexes</b></td></tr></table>'
          print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Type</th><th>Columns</th></tr>'
          set @Output = ''
          set @last = ''
          set @current = ''
          While(@j <= @maxj)
          begin
             select @current = isnull(name,'') from #Indexes  where id = @j
                   
             if @last <> @current  and @last <> ''
                begin  
                print '<tr><td width="20px" align="center">' + Cast((@sr) as varchar) + '</td><td width="150px">' + @last + '</td><td width="150px">' + @typ + '</td><td>' + @Output  + '</td></tr>'
                set @Output  = ''
                set @sr = @sr + 1
                end
            
               
             select @Output = @Output + cols + '<br />' , @typ = type
                   from #Indexes  where id = @j
            
             set @last = @current   
             Set @j = @j + 1;
          end
          if @Output <> ''
                begin  
                print '<tr><td width="20px" align="center">' + Cast((@sr) as varchar) + '</td><td width="150px">' + @last + '</td><td width="150px">' + @typ + '</td><td>' + @Output  + '</td></tr>'
                end

          print '</table><br />'
       end

        Set @i = @i + 1;
       --Print @Output
    end


    Print '</body>'
    Print '</html>'

    drop table #Tables
    drop table #Columns
    drop table #FK
    drop table #Constraint
    drop table #Indexes
    set nocount off

    2009/04/21 10:53 2009/04/21 10:53

    FSO example

    프로그래밍/Asp 2009/04/21 10:53

    2001년도쯤에 작성한걸로 기억하는 코드인데 괴상한 목적으로 사용하지 않는게 좋고 관리를 목적으로 사용하려면 security validation정도는 해주시는 센스필요하구요. 잘 응용하고 파일전송을 안정적으로 할 수 있는 application을 개발하시면 웹하드 용도로도 괜찮을 것 같은데. 그냥 생각일 뿐입니다.

    <%@ language=vbscript %>
    <%
    option explicit

    On Error Resume Next

    dim command

    command = request.querystring("command")

    select case command

     case "drives"
      call drivelist
     case "folders"
      call folderlist
     case "viewfile"
      call viewfile
     case "downfile"
      call downfile
     case "delfile"
      call delFile
     case "editfile"
      call editFile
     case "upload"
      call upload
     case "copyfile"
      call copyfile
     case "movefile"
      call movefile
     case "pastefile"
      call pastefile
     case "dumplist"
      call dumplist
     case else
      call drivelist
    end select

    if err.description <> "" then
     response.clear
     response.write "<script language=javascript> alert (""" & err.description & """); history.back();</script>"
     err.clear
    end if

    Function CalcByte(xspace)
     If xspace < 1024 Then
      CalcByte = xspace
     ElseIf xspace >= 1024 And xspace < 1048576 Then
      CalcByte = FormatNumber((xspace / 1024),2) & " K"
     ElseIf xspace >= 1048576  And xspace < 1073741824 Then
      CalcByte = FormatNumber((xspace / 1048576),2) & " M"
     ElseIf xspace >= 1073741824 then
      CalcByte = FormatNumber((xspace/1073741824),2) & "G"
     End If
    End Function

    Function FileAttributes(intAttribute)

    select case intAttribute
     case 0
      FileAttributes = "Normal"
     case 1
      FileAttributes = "Read Only"
     case 2
      FileAttributes = "Hidden"
     case 4
      FileAttributes = "System"
     case 16
      FileAttributes = "Directory"
     case 32
      FileAttributes = "Archive"
     case 1024
      FileAttributes = "Alias"
     case 2048
      FileAttributes = "Compressed"
     case else
      FileAttributes = intAttribute
    end select

    End Function

    Function xLeft(strTemp, intPoint)
     if Len(strTemp) <= intPoint then
      xLeft = strTemp
     else
      xLeft = mid(strTemp,1, intPoint) & "..."
     end if
    End Function

    Function  FileExists(strFilename)
    Dim  FSO
    Set  FSO  =  server.createobject("Scripting.FileSystemObject")
    FileExists  =  FSO.FileExists(strFilename)
    Set  FSO  =  Nothing
    End  Function

    Sub goBack(Msg)
    response.clear
    response.write "<html><body><form action=""" & request.servervariables("HTTP_REFERER") & """ method=post name=form1></form>"
    response.write "<script language=javascript>"
    if Msg <> "" then
     response.write " alert (""" & Msg & """);"
    end if
    response.write " document.form1.submit();</script>"
    response.write "</body></html>"
    if err.description = "" then
     response.end
    end if
    End Sub
    Sub drivelist
    dim fso
    dim objDrive
    dim drivetype(5)
    dim strDriveTypeImg
    dim strDriveLetter
    dim strDriveName
    dim intFreeSpace
    dim intTotalSpace

    drivetype(0) = "알 수 없음"
    drivetype(1) = "<img src=""images/drivetype1.jpg"">"
    drivetype(2) = "<img src=""images/drivetype2.jpg"">"
    drivetype(3) = "<img src=""images/drivetype3.jpg"">"
    drivetype(4) = "<img src=""images/drivetype4.jpg"">"
    drivetype(5) = "RAM"

    set fso = server.createobject("scripting.filesystemobject")
    response.write "<table border=0 cellpadding=5 cellspacing=1 bgcolor=black align=center width=95% >"
    response.write "<tr bgcolor=#eeeeee align=center><td>종류</td><td>드라이브 이름</td><td>공간(빈/총)</td></tr>"
    for each objDrive in fso.drives

     strDriveTypeImg = drivetype(objDrive.drivetype)
     strDriveLetter = objDrive
     if objDrive.drivetype = 3 then

      if objDrive.isReady then
       strDriveName = objDrive.ShareName
       intFreeSpace = objDrive.FreeSpace
       intTotalSpace = objDrive.TotalSize
      else
       strDriveName = "연결안됨"
       intFreeSpace = 0
       intTotalSpace = 0
      end if

     else

      if objDrive.isReady then
       strDriveName = objDrive.VolumeName
       intFreeSpace = objDrive.FreeSpace
       intTotalSpace = objDrive.TotalSize
      else
       strDriveName = "비어있음"
       intFreeSpace = 0
       intTotalSpace = 0
      end if

     end if

     response.write "<tr bgcolor=white><td align=center>" & strDriveTypeImg & "</td><td align=center>"
     if objDrive.isReady then
      response.write "<a href=""?command=folders&folder=" & server.urlencode(strDriveLetter) & """>"
     end if
     response.write strDriveName & " (" & strDriveLetter & ")"
     if objDrive.isReady then
      response.write "</a>"
     end if
     response.write "</td><td>" & CalcByte(intFreeSpace) & " / " & CalcByte(intTotalSpace) & "</td></tr>"

    next
    response.write "</table>"
    set fso = nothing


    end sub

    sub folderlist
    dim fso
    dim objFolder
    dim objSubFolder
    dim objFile
    dim strName
    dim intSize
    dim strSort
    dim strEditDate
    dim strFolder
    strFolder = request("folder")
    response.write "<table border=0 cellpadding=5 cellspacing=0 align=center width=95% >"
    response.write "<tr><td><img src=""images/move.jpg"" border=0 alt=""잘라내기"" style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=movefile';document.explorer.submit();""> <img src=""images/copy.jpg"" border=0 alt=""복사"" style=""cursor:hand;""  onclick=""javascript:document.explorer.action='?command=copyfile';document.explorer.submit();""> <img src=""images/paste.jpg"" border=0 alt=""붙여넣기"""
    if request.cookies("webexplorer")("filelist") <> "" then
     response.write " style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=pastefile&folder=" & server.urlencode(strFolder) & "';document.explorer.submit();"""
    end if
    response.write "> <img src=""images/del.jpg"" border=0 alt=""삭제"" style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=delfile';document.explorer.submit();""> <img src=""images/viewfile.jpg"" border=0 alt=""대기작업보기"""
    if request.cookies("webexplorer")("filelist") <> "" then
     response.write " style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=dumplist';document.explorer.submit();"""
    end if
    response.write "></td></tr>"
    response.write"<tr><td align=center><form action=""?command=upload"" name=frmupload method=post enctype=multipart/form-data><input type=file name=ufile> <input type=hidden name=folder value=""" & strFolder & """><input type=button value=""파일올리기"" onclick=""uploadform()""></form></td></tr>"
    response.write "</table>" & vbcrlf
    response.write "<script language=""javascript"">" & vbcrlf
    response.write "function uploadform()" & vbcrlf
    response.write "{" & vbcrlf
    response.write "if (document.frmupload.ufile.value == """") " & vbcrlf
    response.write "  {" & vbcrlf
    response.write " alert (""업로드할 파일을 선택해주십시요."");" & vbcrlf
    response.write "  return false;" & vbcrlf
    response.write "  }" & vbcrlf
    response.write "document.frmupload.submit();" & vbcrlf
    response.write "}" & vbcrlf
    response.write "</script>" & vbcrlf
    response.write "<form name=explorer method=post>"
    response.write "<table border=0 cellpadding=5 cellspacing=1 bgcolor=black align=center width=95% >"
    response.write "<tr bgcolor=#eeeeee align=center><td>&nbsp;</td><td>&nbsp;</td><td>이름</td><td>크기</td><td>종류</td><td>수정된 날짜</td></tr>"

    set fso = server.createobject("scripting.filesystemobject")
    set objFolder = fso.getfolder( strFolder & "\")

    if objFolder.IsRootFolder then
     response.write "<tr bgcolor=white><td>&nbsp;</td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=drives"">..</a></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>"
    else
     response.write "<tr bgcolor=white><td>&nbsp;</td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=folders&folder=" & server.urlencode(objFolder.ParentFolder) & """>..</a></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>"
    end if


    for each objSubFolder in objFolder.subfolders
     strName = objSubFolder.Name
     strSort = objSubFolder.Type
     strEditDate = objSubFolder.DateLastModified
     response.write "<tr bgcolor=white><td><input type=checkbox name=""" & objSubFolder & """></td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=folders&folder=" & server.urlencode(objSubFolder) & """>" & strName & "</a></td><td>&nbsp;</td><td>" & xLeft(strSort,5) & "</td><td>" & mid(strEditDate,1,10) & "</td></tr>"
    next

    set objSubFolder = nothing

    for each objFile in objFolder.files
     strName = objFile.Name
     intSize = objFile.Size
     strSort = objFile.Type
     strEditDate = objFile.DateLastModified
     response.write "<tr bgcolor=white><td><input type=checkbox name=""" & objFile & """></td><td align=center><a href=""?command=downfile&file=" & server.urlencode(objFile) & """><img src=""images/unknownfiletype.jpg"" border=0></a></td><td><a href=""?command=viewfile&file=" & server.urlencode(objFile) & """>" & strName & "</a></td><td align=right>" & CalcByte(intSize) & "</td><td>" & xLeft(strSort,5) & "</td><td>" & mid(strEditDate,1,10) & "</td></tr>"
    next

    set objFile = nothing

    set objFolder = nothing
    set fso = nothing

    response.write "</table>"
    response.write "</form>"
    end sub

    Sub downFile()

    Dim DownFileName
    Dim xDownFileName
    Dim fso
    Dim file

    DownFileName  =  Request("file")

    If  Not  FileExists(DownFileName)  Then
            Err.Raise  3,  "한머리의  조언",  "해당  파일이  존재하지  않습니다."
            Exit  Sub
    End  If

    Response.Clear
    Response.Buffer  =  true
    Response.Expires  =  0
    Response.ExpiresAbsolute  =  Now()  -  1
    Response.AddHeader  "pragma",  "no-cache"
    Response.AddHeader  "cache-control",  "private"
    Response.CacheControl  =  "no-cache"

            xDownFileName  =  Mid(DownFileName,  InStrRev(DownFileName,  "\")  +  1,  Len(DownFileName)  -  InStrRev(DownFileName,  "\"))

    Response.clear
    Response.AddHeader  "Content-Disposition",  "  inline;  filename="  &  xDownFileName  &  ";"
    Response.ContentType  =  "application/unknown"

    set  fso  =  server.CreateObject("SiteGalaxyUpload.FileSystemObject")
    set  file  =  fso.OpenBinaryFile(DownFileName,  1,  false)
    Response.BinaryWrite  file.ReadAll
    Response.End
    set  file  =  nothing
    set  fso  =  nothing

    End Sub

    Sub viewfile()
    dim fso
    set fso  = server.createobject("scripting.filesystemobject")
    if fso.getfile(request("file")).size > 1048576 then
     Err.Raise  3,  "한머리의  조언",  "1M이상의 파일을 열 수 없습니다."
    else
     response.write "<form action=""?command=editfile&file=" & server.urlencode(request("file")) & """ method=post>"
     response.write "<textarea name=editfile cols=65 rows=20>"
     response.write fso.opentextfile(request("file")).readall
     response.write "</textarea>"
     response.write "<input type=submit value=""수정하기""> <input type=reset>"
     response.write "</form>"
    end if
    set fso = nothing
    End Sub

    Sub editFile()
    Dim fso

    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    fso.opentextfile(request("file"),2).write request("editfile")
    Set fso = Nothing
    response.redirect "?command=folders&folder=" & server.urlencode(mid(request("file"),1,instrrev(request("file"),"\")-1))
    End Sub

    Sub delFile()
    Dim key
    Dim fso

    Set fso = server.createobject("scripting.filesystemobject")
    if request.form.count=0 then
     call goback("폴더나 파일을 선택해주십시요")
    else
     for each key in request.form
      if fso.FolderExists(key) then
       fso.DeleteFolder(key)
      else
       fso.DeleteFile(key)
      end if
     next
     Set fso = Nothing

     call goback("요청하신 폴더및 파일이 삭제되었습니다.")
    end if
    End Sub

    Sub upload()
    dim uploadform
    dim fso
    dim fn

    Set uploadform = Server.CreateObject("SiteGalaxyUpload.Form")

    if uploadform.ContentDisposition <> "form-data" then
     err.raise 3,"한머리의 조언", "잘못된 파일 전송 포멧입니다. 관리자에게 연락해주세요"
     Exit Sub
    end if

    if uploadform.Item("ufile").Size > (1048576 * 5) then
     Err.Raise 3,"한머리의 조언", "5M이상의 파일을 업로드 할 수 없습니다."
     Exit Sub
    end if

    set fso = server.CreateObject("Scripting.FileSystemObject")
    fn = uploadform.item("folder") & "\" & fso.GetFileName(uploadform("ufile").FilePath)
    set fso = Nothing

    uploadform("ufile").SaveAs(fn)

    Set uploadform = Nothing

    call goback("파일이 성공적으로 업로드되었습니다.")

    End Sub

    Sub copyFile()
    dim Key
    if request.form.count = 0 then
     call goback("폴더나 파일을 선택해주십시요.")
    else
     Response.Cookies("webexplorer")("cmd")="copy"
     Response.Cookies("webexplorer")("filelist")=""
     For Each Key In request.form
      Response.Cookies("webexplorer")("filelist")=Request.Cookies("webexplorer")("filelist") & Key & "/"
     Next
     call goback("")
    end if
    End Sub

    Sub moveFile()
    dim Key
    if request.form.count = 0 then
     call goback("폴더나 파일을 선택해주십시요.")
    else
     Response.Cookies("webexplorer")("cmd")="move"
     Response.Cookies("webexplorer")("filelist")=""
     For Each Key In request.form
      Response.Cookies("webexplorer")("filelist")=Request.Cookies("webexplorer")("filelist") & Key & "/"
     Next
     call goback("")
    end if
    End Sub

    Sub pasteFile()
    dim fso
    dim strFileList
    dim i

    if Request.Cookies("webexplorer")("cmd")="move" then
     strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
     Set fso = server.createobject("scripting.filesystemobject")
     For i = 0 to Ubound(strFileList)-1
      if fso.FolderExists(strFileList(i)) then
       fso.MoveFolder strFileList(i), request.querystring("folder") & "\"
      else
       fso.MoveFile strFileList(i), request.querystring("folder") & "\"
      end if
     Next
     set fso = Nothing
     response.cookies("webexplorer")("filelist")=""
     call goback("폴더 또는 파일 이동을 완료하였습니다.")
    else
     strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
     Set fso = server.createobject("scripting.filesystemobject")
     For i = 0 to Ubound(strFileList)-1
      if fso.FolderExists(strFileList(i)) then
       fso.CopyFolder strFileList(i), request.querystring("folder") & "\"
      else
       fso.CopyFile strFileList(i), request.querystring("folder") & "\"
      end if
     Next
     set fso = Nothing
     call goback("폴더 또는 파일 복사를 완료하였습니다.")
    end if
    End Sub

    Sub dumpList()
    dim strFileList
    dim i
    Response.write "대기 작업 : " & Request.Cookies("webexplorer")("cmd") & "<br>"
    strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
    For i = 0 to Ubound(strFileList)
     response.write strFileList(i) & "<br>"
    Next
    End Sub
    %>

    2009/04/21 10:53 2009/04/21 10:53

    <%
    'Option Explicit

    Class configs

    Private mClassName
    Private mConfigRootPath
    Private mItems
    Private mXmlRootNodeName
    Private mConfigName

    Private Sub Class_Initialize()
     mClassName = "configs class"
     mXmlRootNodeName = "configs"
     mConfigRootPath = server.mappath("./")
    End Sub

    Public Sub Load(configname)
     Dim xdom
     Dim i
     
     mConfigName = configname
     Set mItems = Server.CreateObject("scripting.dictionary")
     Set xdom = server.CreateObject("microsoft.xmldom")
     xdom.load mconfigrootpath & "\" & configname & ".xml"
     If xdom.parseerror.errorcode <> 0 Then
      Err.raise vbObjectError, mClassName, xdom.parseerror.reason
     Else
      if xdom.documentelement.nodename = mXmlRootNodeName Then
       For i=0 To xdom.documentelement.childnodes.length-1
        mItems.add xdom.documentelement.childnodes(i).nodename, xdom.documentelement.childnodes(i).text
       Next
      Else
       Err.raise vbObjectError, mClassName, "Invalid Configuration File"
      End If
     End If
     Set xdom = nothing
    End Sub

    Public Sub Save()
     Dim xdom
     Dim i

     Set xdom = server.CreateObject("microsoft.xmldom")
     xdom.load mconfigrootpath & "\" & mConfigName & ".xml"
     If xdom.parseerror.errorcode <> 0 Then
      Err.raise vbObjectError, mClassName, xdom.parseerror.reason
     Else
      if xdom.documentelement.nodename = mXmlRootNodeName Then
       For i= xdom.documentelement.childnodes.length-1 To 0 Step -1
        xdom.documentelement.removechild(xdom.documentelement.childnodes(i))
       Next
       Dim keys, items, newelement
       keys = mItems.keys()
       items = mItems.items()
       For i=0 To mItems.count-1
        Set newelement = xdom.createElement(keys(i))
        newelement.text = items(i)
        xdom.documentelement.appendchild newelement
        Set newelement = Nothing
       Next
       xdom.save mconfigrootpath & "\" & mConfigName & ".xml"
      Else
       Err.raise vbObjectError, mClassName, "Invalid Configuration File"
      End If
     End If
     Set xdom = nothing
     Set mItems = Nothing
    End Sub

    Public Sub Add(key, value)
     mItems.Add key, value
    End Sub

    Public Function Item(key)
     Item = mItems.Item(key)
    End Function

    End Class

    'example.asp
    '
    'Dim a
    'Set a = new configs
    'a.load "example"
    'response.write a.item("test1")
    'a.add "test4", "33>3"
    'a.save
    'Set a = nothing

    'example.xml
    '
    '<configs><test1>1111</test1><test2>2222</test2><test3>3333</test3></configs>
    %>

    2009/04/21 10:52 2009/04/21 10:52

    dbhelper class

    프로그래밍/Asp 2009/04/21 10:52

    <!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library"
          FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"  -->
    <%
     Class clsDBHelper
      Private DefaultConnString
      Private DefaultConnection
     
      private sub Class_Initialize()
       DefaultConnString = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=1;"
       Set DefaultConnection = Nothing
      End Sub

        '---------------------------------------------------
        ' SP를 실행하고, RecordSet을 반환한다.
        '---------------------------------------------------
        Public Function ExecSPReturnRS(spName, params, connectionString)
          If IsObject(connectionString) Then
            If connectionString is Nothing Then
              If DefaultConnection is Nothing Then
                Set DefaultConnection = CreateObject("ADODB.Connection")
                DefaultConnection.Open DefaultConnString       
              End If     
              Set connectionString = DefaultConnection
            End If
          End If
         
         Set rs = CreateObject("ADODB.RecordSet")
         Set cmd = CreateObject("ADODB.Command")

         cmd.ActiveConnection = connectionString
         cmd.CommandText = spName
         cmd.CommandType = adCmdStoredProc
         Set cmd = collectParams(cmd, params)
         'cmd.Parameters.Refresh

         rs.CursorLocation = adUseClient
         rs.Open cmd, ,adOpenStatic, adLockReadOnly
        
         For i = 0 To cmd.Parameters.Count - 1  
           If cmd.Parameters(i).Direction = adParamOutput OR cmd.Parameters(i).Direction = adParamInputOutput OR cmd.Parameters(i).Direction = adParamReturnValue Then
             If IsObject(params) Then    
               If params is Nothing Then
                 Exit For        
               End If      
             Else
               params(i)(4) = cmd.Parameters(i).Value
             End If
           End If
         Next

         Set cmd.ActiveConnection = Nothing
         Set cmd = Nothing
         Set rs.ActiveConnection = Nothing

         Set ExecSPReturnRS = rs
        End Function

        '---------------------------------------------------
        ' SQL Query를 실행하고, RecordSet을 반환한다.
        '---------------------------------------------------
        Public Function ExecSQLReturnRS(strSQL, params, connectionString)
          If IsObject(connectionString) Then
            If connectionString is Nothing Then
              If DefaultConnection is Nothing Then
                Set DefaultConnection = CreateObject("ADODB.Connection")
                DefaultConnection.Open DefaultConnString       
              End If     
              Set connectionString = DefaultConnection
            End If
          End If
         
         Set rs = CreateObject("ADODB.RecordSet")
         Set cmd = CreateObject("ADODB.Command")

         cmd.ActiveConnection = connectionString
         cmd.CommandText = strSQL
         cmd.CommandType = adCmdText
         Set cmd = collectParams(cmd, params)
        
         rs.CursorLocation = adUseClient
         rs.Open cmd, , adOpenStatic, adLockReadOnly
        
         Set cmd.ActiveConnection = Nothing
         Set cmd = Nothing
         Set rs.ActiveConnection = Nothing
        
         Set ExecSQLReturnRS = rs
        End Function

        '---------------------------------------------------
        ' SP를 실행한다.(RecordSet 반환없음)
        '---------------------------------------------------
        Public Sub ExecSP(strSP,params,connectionString)
          If IsObject(connectionString) Then
            If connectionString is Nothing Then
              If DefaultConnection is Nothing Then
                Set DefaultConnection = CreateObject("ADODB.Connection")
                DefaultConnection.Open DefaultConnString       
              End If     
              Set connectionString = DefaultConnection
            End If
          End If
         
         Set cmd = CreateObject("ADODB.Command")

         cmd.ActiveConnection = connectionString
          cmd.CommandText = strSP
          cmd.CommandType = adCmdStoredProc
         Set cmd = collectParams(cmd, params)

         cmd.Execute , , adExecuteNoRecords
        
         For i = 0 To cmd.Parameters.Count - 1  
           If cmd.Parameters(i).Direction = adParamOutput OR cmd.Parameters(i).Direction = adParamInputOutput OR cmd.Parameters(i).Direction = adParamReturnValue Then
             If IsObject(params) Then    
               If params is Nothing Then
                 Exit For        
               End If      
             Else
               params(i)(4) = cmd.Parameters(i).Value
             End If
           End If
         Next

         Set cmd.ActiveConnection = Nothing
         Set cmd = Nothing
        End Sub

        '---------------------------------------------------
        ' SP를 실행한다.(RecordSet 반환없음)
        '---------------------------------------------------
        Public Sub ExecSQL(strSQL,params,connectionString)     
          If IsObject(connectionString) Then
            If connectionString is Nothing Then
              If DefaultConnection is Nothing Then
                Set DefaultConnection = CreateObject("ADODB.Connection")
                DefaultConnection.Open DefaultConnString       
              End If     
              Set connectionString = DefaultConnection
            End If
          End If
         
         Set cmd = CreateObject("ADODB.Command")

         cmd.ActiveConnection = connectionString
         cmd.CommandText = strSQL
         cmd.CommandType = adCmdText
         Set cmd = collectParams(cmd, params)

         cmd.Execute , , adExecuteNoRecords

         Set cmd.ActiveConnection = Nothing
         Set cmd = Nothing
        End Sub

        '---------------------------------------------------
        ' 트랜잭션을 시작하고, Connetion 개체를 반환한다.
        '---------------------------------------------------
        Public Function BeginTrans(connectionString)
          If IsObject(connectionString) Then
            If connectionString is Nothing Then
              connectionString = DefaultConnString
            End If
          End If

          Set conn = Server.CreateObject("ADODB.Connection")
          conn.Open connectionString
          conn.BeginTrans
          Set BeginTrans = conn
        End Function

        '---------------------------------------------------
        ' 활성화된 트랜잭션을 커밋한다.
        '---------------------------------------------------
        Public Sub CommitTrans(connectionObj)
          If Not connectionObj Is Nothing Then
            connectionObj.CommitTrans
            connectionObj.Close
            Set ConnectionObj = Nothing
          End If
        End Sub

        '---------------------------------------------------
        ' 활성화된 트랜잭션을 롤백한다.
        '---------------------------------------------------
        Public Sub RollbackTrans(connectionObj)
          If Not connectionObj Is Nothing Then
            connectionObj.RollbackTrans
            connectionObj.Close
            Set ConnectionObj = Nothing
          End If
        End Sub

        '---------------------------------------------------
        ' 배열로 매개변수를 만든다.
        '---------------------------------------------------
        Public Function MakeParam(PName,PType,PDirection,PSize,PValue)
          MakeParam = Array(PName, PType, PDirection, PSize, PValue)
        End Function

        '---------------------------------------------------
        ' 매개변수 배열 내에서 지정된 이름의 매개변수 값을 반환한다.
        '--------------------------------------------------- 
        Public Function GetValue(params, paramName)
          For Each param in params
            If param(0) = paramName Then
              GetValue = param(4)
              Exit Function
            End If
          Next
        End Function

        Public Sub Dispose
      if (Not DefaultConnection is Nothing) Then
       if (DefaultConnection.State = adStateOpen) Then DefaultConnection.Close
       Set DefaultConnection = Nothing
      End if
        End Sub

        '---------------------------------------------------------------------------
        'Array로 넘겨오는 파라메터를 Parsing 하여 Parameter 객체를
        '생성하여 Command 객체에 추가한다.
        '---------------------------------------------------------------------------
        Private Function collectParams(cmd,argparams)
         If VarType(argparams) = 8192 or VarType(argparams) = 8204 or VarType(argparams) = 8209 then
          params = argparams
          For i = LBound(params) To UBound(params)
           l = LBound(params(i))
           u = UBound(params(i))
           ' Check for nulls.
           If u - l = 4 Then
           
            If VarType(params(i)(4)) = vbString Then
             If params(i)(4) = "" Then
              v = Null
             Else
              v = params(i)(4)
             End If
            Else
             v = params(i)(4)
            End If
            cmd.Parameters.Append cmd.CreateParameter(params(i)(0), params(i)(1), params(i)(2), params(i)(3), v)
           End If
          Next

          Set collectParams = cmd
          Exit Function
         Else
          Set collectParams = cmd
         End If
        End Function

     End Class
    %>


    2009/04/21 10:52 2009/04/21 10:52
    interesting my example

    <%

    Sub viewCode(codefile)
    response.write "<p style=""background-color=#eeeeee;"">"
    set fso = server.createobject("scripting.filesystemobject")
    set f = fso.opentextfile(server.mappath(codefile),1)
    allViewCode = viewHTML(f.readall)
    set f = nothing
    response.write codingcolor(allviewcode,"brown")
    response.write "</p>"
    End Sub

    'Coding부분을  찾아서  Coloring함수로...
    function  CodingColor(strTemp,strFontColor)
              Dim  firstPos
              Dim  lastPos
              Dim  leftString
              Dim  midString
              Dim  rightString
              Dim  xmidString

              firstPos  =1
              lastPos  =  1
              do  until  lastPos  >=  len(strTemp)
                        firstPos  =  instr(lastPos,  strTemp,  "&lt;%")
                        if  firstPos  <=  0  then
                                  exit  do
                        end  if
                        lastPos  =  instr(firstPos,  strTemp,  "%&gt;")
                        if  lastPos  <=  0  then
                                  lastPos  =  len(strTemp)
                        end  if
                        lastPos  =  lastPos  +  len("%&gt;")  -  1
                        leftString  =  left(strTemp,firstPos-1)
                        midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                        rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                        xmidString  =  coloring(midString)
    '                    strTemp  =  leftString  &  xmidString  &  rightString
    '                    lastPos  =  firstPos  +  len(xmidString)-1
                        strTemp  =  leftString  &  "<span  style=color:"  &  strFontColor  &  ";>"  &  xmidString  &  "</span>"  &  rightString
                        lastPos  =  firstPos  +  len("<span  style=color:"  &  strFontColor  &  ";>"  &  xmidString  &  "</span>")-1
              loop

              CodingColor  =  strTemp
    end  function

    function  coloring(strViewCode)
              Dim  Reservedwords
              Dim  aryReservedword
              Dim  i
              Dim  strFunction
              Dim  aryFunction

              Reservedwords="And|Call|Case|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Erase|Error|Exit|Explicit|False|For|Function|If|Imp|In|Is|Loop|Mod|Next|Not|Nothing|Null|On|Option|Or|Private|Public|Randomize|ReDim|Resume|Select|Set|Step|Sub|Then|To|True|Until|Wend|While|Xor"
              aryReservedword=split(Reservedwords,"|")
              for  i  =  0  to  ubound(aryReservedword)
                        strViewCode  =  wordReplace(strViewCode,aryReservedword(i),"blue")
              next
             
              strFunction="Anchor|Array|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Dictionary|Document|Element|Err|Exp|FileSystemObject|Filter|Fix|Int|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetObject|Hex|History|Hour|InputBox|InStr|InstrRev|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Join|LBound|LCase|Left|Len|Link|LoadPicture|Location|Log|LTrim|RTrim|Trim|Mid|Minute|Month|MonthName|MsgBox|Navigator|Now|Oct|Replace|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|TextStream|TimeSerial|TimeValue|TypeName|UBound|UCase|VarType|Weekday|WeekDayName|Window|Year"
              aryFunction=split(strFunction,"|")
              for  i  =  0  to  ubound(aryFunction)
                        strViewCode  =  wordReplace(strViewCode,aryFunction(i),"red")
              next
              strviewcode  =  blockcomment(strviewcode,"""""magenta")
              strviewcode  =  linecomment(strviewcode,"'""green")
              coloring  =  linecomment(strviewcode,"Rem""green")
    end  function

    'HTML  보기에서  단어에  색상입히기
    Function  wordReplace(strSearchWithin,strSearchFor,fontcolor)
              Dim  lngStartingPosition
              Dim  lngFoundPosition
              Dim  strReplaced
              Dim  ascBlank
            lngStartingPosition=1
            lngFoundPosition=InStr(lngStartingPosition,strSearchWithin,strSearchFor,1)
            do  while  lngFoundPosition  >  0
                        ascBlank=asc(Mid(strSearchWithin,lngFoundPosition-1,1))
                        if  (ascBlank>=48  and  ascBlank<=57)  or  (ascBlank>=65  and  ascBlank<=90)  or  (ascBlank>=97  and  ascBlank<=122)  then
                                            strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))
                        else
                                  ascBlank=asc(Mid(strSearchWithin,lngFoundPosition+len(strSearchFor),1))
                                  if  (ascBlank>=48  and  ascBlank<=57)  or  (ascBlank>=65  and  ascBlank<=90)  or  (ascBlank>=97  and  ascBlank<=122)  then
                                            strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))
                                  else
                                            'found
                                            strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  "<font  color="  &  fontcolor  &  ">"  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))  &  "</font>"
                                  end  if
                        end  if
                    lngStartingPosition=lngFoundPosition+len(strSearchFor)
                    lngFoundPosition=InStr(lngStartingPosition,strSearchWithin,strSearchFor,1)
            Loop 
            wordReplace=strReplaced  &  Mid(strSearchWithin,lngStartingPosition)  'catch the  last  one
    End  Function

    'HTML  보기
    function  viewHTML(strHTML)
              viewHTML    =  replace(replace(replace(replace(replace(replace(strHTML,"&","&amp;"),"<","&lt;"),">","&gt;"),"  ","&nbsp;  "),"          ","&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  "),vbcrlf,"<br>"  &  vbcrlf)
    end  function

    '줄단위  주석문  처리
    function  linecomment(strTemp,  strCommentChar,  strFontColor)
              Dim  firstPos
              Dim  lastPos
              Dim  leftString
              Dim  midString
              Dim  rightString
              Dim  xmidString

              firstPos  =1
              lastPos  =  1
              do  until  lastPos  >=  len(strTemp)
                        firstPos  =  instr(lastPos,  strTemp,  strCommentChar)
                        if  firstPos  <=  0  then
                                  exit  do
                        end  if
                        lastPos  =  instr(firstPos,  strTemp,  "<br>"  &  vbcrlf)  +  5
                        if  lastPos  <=  0  then
                                  lastPos  =  len(strTemp)
                        end  if
                        'Single  Quotation  &  "Rem"  String  Exception  ("'",  "Rem")
                        If  not(mid(strTemp,  firstPos-1,  1)=""""  And  mid(strTemp,firstPos  +  Len(strCommentChar),1)="""")    Then
                                  leftString  =  left(strTemp,firstPos-1)
                                  midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                                  rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                                  xmidString  =  extractColor(midString)
                                  strTemp  =  leftString  &  "<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>"  &  rightString
                                  lastPos  =  instr(firstPos,  strTemp,  "<br>"  &  vbcrlf)  +  6
                        Else
                                  lastPos  =  lastPos  +  1
                        End  If
              loop

              linecomment  =  strTemp
    end  function

    '블럭단위  주석문  처리
    function  blockcomment(strTemp,  strCommentChar,  strFontColor)
              Dim  firstPos
              Dim  lastPos
              Dim  leftString
              Dim  midString
              Dim  rightString
              Dim  xmidString

              firstPos  =1
              lastPos  =  1
              do  until  lastPos  >=  len(strTemp)
                        firstPos  =  instr(lastPos,  strTemp,  strCommentChar)
                        if  firstPos  <=  0  then
                                  exit  do
                        end  if
                        lastPos  =  instr(firstPos+len(strCommentChar),  strTemp,  strCommentChar)
                        if  lastPos  <=  0  then
                                  lastPos  =  len(strTemp)
                        end  if
                        lastPos  =  lastPos  +  len(strCommentChar)-1
                        leftString  =  left(strTemp,firstPos-1)
                        midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                        rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                        xmidString  =  extractColor(midString)
                        strTemp  =  leftString  &  "<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>"  &  rightString
                        lastPos  =  firstPos  +  len("<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>")
              loop

              blockcomment  =  strTemp
    end  function

    function  extractColor(strColor)
              dim  exfirstPos
              dim  exlastPos
              Dim  xleftString
              Dim  xmidString
              Dim  xrightString

              extractColor  =  strColor
    '          exit  function

              exfirstPos  =1
              exlastPos  =  1
              do  until  exlastPos  >=  len(strColor)
                        exfirstPos  =  instr(exlastPos,  strColor,  "<font  color=")
                        if  exfirstPos  <=  0  then
                                  exit  do
                        end  if
                        exlastPos  =  instr(exfirstPos  +  11,  strColor,  ">")
                        if  exlastPos  <=  0  then
                                  exit  do
                        end  if
                        xleftString  =  left(strColor,exfirstPos-1)
                        xmidString  =  mid(strColor,exfirstPos,exlastPos-exfirstPos+1)
                        xrightString  =  mid(strColor,exlastPos+1,len(strColor)-exlastPos)
                        strColor  =  xleftString  &  xrightString
                        exlastPos  =  exfirstPos-1
                        exfirstPos  =  exlastPos
              loop
              extractColor  =  replace(strColor,"</font>","")
    end  function
    %>

    2009/04/21 10:51 2009/04/21 10:51

    http://www.codeproject.com/KB/asp/aspcallwebservice.aspx


    Introduction
    Recently, I tried to use for the first time a webservice from an ASP page and I really had problems, after hours I could access to my webservice from ASP with Microsoft.XMLHTTP, but the code was not very easy (if it is your first time), so I decided to package the implementation in a simple vbscript class with a few properties that allow to access to a webservice.

    The page that use the vbscript class is:
    <!--#include virtual="/webservice.asp"-->
    <html>
    <head>
    <title>testws</title>
    </head>
    <body>
    <%
        dim ws
     
        set ws = new webservice
        ws.url = "http://localhost/yourwebservice.asmx"
        ws.method = "MethodName"
        ws.parameters.Add "ParamName1",1
        ws.parameters.Add "ParamName2",300
        ws.parameters.Add "ParamNameN",500
     
        ws.execute
        response.Write ws.response
     
        set ws = nothing
    %>
    </body>
    </html>Like you can see, it is very simple to use; define the properties, call the execute method and the property response will return the information from webservice.

    The class that implement the call to webservice is:
    <%
    option explicit
    class WebService
      public Url
      public Method
      public Response
      public Parameters
     
      public function execute()
        dim xmlhttp
        Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
        xmlhttp.open "POST", Url & "/" & Method, false
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        xmlhttp.send Parameters.toString
        response = xmlhttp.responseText
        set xmlhttp = nothing
      end function
      Private Sub Class_Initialize()
        Set Parameters = new wsParameters
      End Sub
      Private Sub Class_Terminate()
        Set Parameters = Nothing
      End Sub
    End class
    class wsParameters
      public mCol
      public function toString()
        dim nItem
        dim buffer
        buffer = ""
        for nItem = 1 to Count
          buffer = buffer & Item(nItem).toString & "&"
        next
        if right(buffer,1)="&" then
          buffer = left(buffer,len(buffer)-1)
        end if
        toString = buffer
      end function
      public sub Clear
        set mcol = nothing
        Set mCol = CreateObject("Scripting.Dictionary")
      end sub
      public sub Add(pKey,pValue)
        dim newParameter
     
        set newParameter = new wsParameter
        newParameter.Key = pKey
        newParameter.Value = pValue
        mCol.Add mCol.count+1, newParameter
     
        set newParameter = nothing
      end sub
      public function Item(nKey)
        set Item=mCol.Item(nKey)
      end function
      public function ExistsXKey(pKey)
        dim nItem
     
        for nItem = 1 to mcol.count
          if mCol.Item(nItem).key = pKey then
            ExistsXKeyword = true
            exit for
          end if
        next
      end function
      public sub Remove(nKey)
        mCol.Remove(nKey)
      end sub
      public function Count()
        Count=mCol.count
      end function
      Private Sub Class_Initialize()
        Set mCol = CreateObject("Scripting.Dictionary")
      End Sub
      Private Sub Class_Terminate()
        Set mCol = Nothing
      End Sub
    end class
    class wsParameter
       public Key
       public Value
       public function toString()
         toString = Key & "=" & Value
       end function
    end class
    %>
    I hope that this small code of my implementation can help you, thanks, and if any question please send me an email.


    License
    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    About the Author
    asanoguera


     Estudie computacion desde los 12 años, a los 18 ya estaba trabajando en una empresa que desarrollaba soluciones para clinicas y laboratorios bioquimicos en QuickBasic y BTrieve, a los 21 comence a trabajar en una consultora que desarrollaba soluciones a medida para empresas en QBX, VB5 y MSAccess, tambien me desempeñé como programador senior durante 5 años en un ente gubernamental realizando analisis y desarrollando sistemas de gestion y estadisticas para la toma de decisiones en VB6, ASP y MS-SQL 2000, independientemente desarrolle varios proyectos y trabaje tambien para empresas en el extranjero en ASP/ASP.NET y MS-SQL 2000, actualmente desarrollo aplicaciones web en ASP.NET 2.0, Atlas, con WebServices y MS-SQL 2000
    Occupation:  Web Developer
    Location:   Argentina

    2009/04/21 10:51 2009/04/21 10:51

    <%
    '**************************************************************************************************************
    '* GAB_LIBRARY Copyright (C) 2003 - This file is part of GAB_LIBRARY
    '* For license refer to the license.txt
    '**************************************************************************************************************

    '**************************************************************************************************************

    '' @CLASSTITLE: JSON
    '' @CREATOR: Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec
    '' @CONTRIBUTORS: - Cliff Pruitt (opensource at crayoncowboy.com)
    '' - Sylvain Lafontaine
    '' @CREATEDON: 2007-04-26 12:46
    '' @CDESCRIPTION: Comes up with functionality for JSON (http://json.org) to use within ASP.
    '' Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures
    '' @REQUIRES: -
    '' @OPTIONEXPLICIT: yes
    '' @VERSION: 1.4.1

    '**************************************************************************************************************
    class JSON

    'private members
    private output, innerCall

    'public members
    public toResponse ''[bool] should generated results be directly written to the response? default = false

    '**********************************************************************************************************
    '* constructor
    '**********************************************************************************************************
    public sub class_initialize()
    newGeneration()
    toResponse = false
    end sub

    '******************************************************************************************
    '' @SDESCRIPTION: STATIC! takes a given string and makes it JSON valid
    '' @DESCRIPTION: all characters which needs to be escaped are beeing replaced by their
    '' unicode representation according to the
    '' RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627
    '' @PARAM: val [string]: value which should be escaped
    '' @RETURN: [string] JSON valid string
    '******************************************************************************************
    public function escape(val)
    dim cDoubleQuote, cRevSolidus, cSolidus
    cDoubleQuote = &h22
    cRevSolidus = &h5C
    cSolidus = &h2F

    dim i, currentDigit
    for i = 1 to (len(val))
    currentDigit = mid(val, i, 1)
    if asc(currentDigit) > &h00 and asc(currentDigit) < &h1F then
    currentDigit = escapequence(currentDigit)
    elseif asc(currentDigit) >= &hC280 and asc(currentDigit) <= &hC2BF then
    currentDigit = "\u00" + right(padLeft(hex(asc(currentDigit) - &hC200), 2, 0), 2)
    elseif asc(currentDigit) >= &hC380 and asc(currentDigit) <= &hC3BF then
    currentDigit = "\u00" + right(padLeft(hex(asc(currentDigit) - &hC2C0), 2, 0), 2)
    else
    select case asc(currentDigit)
    case cDoubleQuote: currentDigit = escapequence(currentDigit)
    case cRevSolidus: currentDigit = escapequence(currentDigit)
    case cSolidus: currentDigit = escapequence(currentDigit)
    end select
    end if
    escape = escape & currentDigit
    next
    end function

    '******************************************************************************************************************
    '' @SDESCRIPTION: generates a representation of a name value pair in JSON grammer
    '' @DESCRIPTION: the generation is done fully recursive so the value can be a complex datatype as well. e.g.
    '' toJSON("n", array(array(), 2, true), false) or toJSON("n", array(RS, dict, false), false), etc.
    '' @PARAM: name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value
    '' @PARAM: val [variant], [int], [float], [array], [object], [dictionary], [recordset]: value which needs
    '' to be generated. Conversation of the data types (ASP datatype -> Javascript datatype):
    '' NOTHING, NULL -> null, ARRAY -> array, BOOL -> bool, OBJECT -> name of the type,
    '' MULTIDIMENSIONAL ARRAY -> generates a 1 dimensional array (flat) with all values of the multidim array
    '' DICTIONARY -> valuepairs. each key is accessible as property afterwards
    '' RECORDSET -> array where each row of the recordset represents a field in the array.
    '' fields have properties named after the column names of the recordset (LOWERCASED!)
    '' e.g. generate(RS) can be used afterwards r[0].ID
    '' INT, FLOAT -> number
    '' OBJECT with reflect() method -> returned as object which can be used within JavaScript
    '' @PARAM: nested [bool]: is the value pair already nested within another? if yes then the {} are left out.
    '' @RETURN: [string] returns a JSON representation of the given name value pair
    '' (if toResponse is on then the return is written directly to the response and nothing is returned)
    '******************************************************************************************************************
    public function toJSON(name, val, nested)
    if not nested and not isEmpty(name) then write("{")
    if not isEmpty(name) then write("""" & escape(name) & """: ")
    generateValue(val)
    if not nested and not isEmpty(name) then write("}")
    toJSON = output

    if innerCall = 0 then newGeneration()
    end function

    '******************************************************************************************************************
    '* generate
    '******************************************************************************************************************
    private function generateValue(val)
    if isNull(val) then
    write("null")
    elseif isArray(val) then
    generateArray(val)
    elseif isObject(val) then
    if val is nothing then
    write("null")
    elseif typename(val) = "Dictionary" then
    generateDictionary(val)
    elseif typename(val) = "Recordset" then
    generateRecordset(val)
    else
    generateObject(val)
    end if
    else
    'bool
    dim varTyp
    varTyp = varType(val)
    if varTyp = 11 then
    if val then write("true") else write("false")
    'int, long, byte
    elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
    write(cLng(val))
    'single, double, currency
    elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
    write(replace(cDbl(val), ",", "."))
    else
    write("""" & escape(val & "") & """")
    end if
    end if
    generateValue = output
    end function

    '******************************************************************************************************************
    '* generateArray
    '******************************************************************************************************************
    private sub generateArray(val)
    dim item, i
    write("[")
    i = 0
    'the for each allows us to support also multi dimensional arrays
    for each item in val
    if i > 0 then write(",")
    generateValue(item)
    i = i + 1
    next
    write("]")
    end sub

    '******************************************************************************************************************
    '* generateDictionary
    '******************************************************************************************************************
    private sub generateDictionary(val)
    dim keys, i
    innerCall = innerCall + 1
    write("{")
    keys = val.keys
    for i = 0 to uBound(keys)
    if i > 0 then write(",")
    toJSON keys(i), val(keys(i)), true
    next
    write("}")
    innerCall = innerCall - 1
    end sub

    '******************************************************************************************************************
    '* generateRecordset
    '******************************************************************************************************************
    private sub generateRecordset(val)
    dim i
    write("[")
    while not val.eof
    innerCall = innerCall + 1
    write("{")
    for i = 0 to val.fields.count - 1
    if i > 0 then write(",")
    toJSON lCase(val.fields(i).name), val.fields(i).value, true
    next
    write("}")
    val.movenext()
    if not val.eof then write(",")
    innerCall = innerCall - 1
    wend
    write("]")
    end sub

    '******************************************************************************************************************
    '* generateObject
    '******************************************************************************************************************
    private sub generateObject(val)
    dim props
    on error resume next
    set props = val.reflect()
    if err = 0 then
    on error goto 0
    innerCall = innerCall + 1
    toJSON empty, props, true
    innerCall = innerCall - 1
    else
    on error goto 0
    write("""" & escape(typename(val)) & """")
    end if
    end sub

    '******************************************************************************************************************
    '* newGeneration
    '******************************************************************************************************************
    private sub newGeneration()
    output = empty
    innerCall = 0
    end sub

    '******************************************************************************************
    '* JsonEscapeSquence
    '******************************************************************************************
    private function escapequence(digit)
    escapequence = "\u00" + right(padLeft(hex(asc(digit)), 2, 0), 2)
    end function

    '******************************************************************************************
    '* padLeft
    '******************************************************************************************
    private function padLeft(value, totalLength, paddingChar)
    padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
    end function

    '******************************************************************************************
    '* clone
    '******************************************************************************************
    public function clone(byVal str, n)
    dim i
    for i = 1 to n : clone = clone & str : next
    end function

    '******************************************************************************************
    '* write
    '******************************************************************************************
    private sub write(val)
    if toResponse then
    response.write(val)
    else
    output = output & val
    end if
    end sub

    end class
    %>

    2009/04/21 10:50 2009/04/21 10:50

    editor/dialog 폴더에 있는 fck_image.html을 열어 27 라인쯤에 있는

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    라는 부분을 아래와 같이 수정한다.

    <meta http-equiv="Content-Language" content="ko">
    <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">


    그럼 해결됩니다.

    2009/04/21 10:48 2009/04/21 10:48

    <script language="javascript">

      self.opener=self;

      self.close();
    </script>


    방법 2 : 프래임 속에있을때 닫는 법

    <script language="javascript">

      top.opener=self;

      top.close();

    </script>

    2009/04/21 10:47 2009/04/21 10:47
    htmlarg은?
    에디트플러스2에 붙여쓸수 있는 태그 정리기 입니다.
    복잡한 태그들과 php, js코드들을 정렬시켜줍니다.

    실행파일 다운로드 : htmlarg.exe v2.0.2
    소스코드 다운로드 : htmlarg.cpp


    $2



    $2
    1. htmlarg.exe를 다운로드를 받아 Editplus 폴더에 넣는다.
    2. 에디트 플러스를 실행,, 메뉴->도구->사용자 도구 구성
    3. 추가버튼을 눌러 위와 같이 프로그램을 추가한다.
    4. 텍스트 필터 사용에 꼭 체크한다
    5. 저장하고 사용



    $2
    [들여쓰기][코드들여쓰기] [태그리스트1] [태그리스트2] [태그리스트3] ($CurSel)
    --------
    ex) 2t D D D $(CurSel)
    • 들여쓰기
      0~9까지의 숫자, 탭문자를 이용하고 싶으면 t를 사용
    • 코드들여쓰기
      0~9까지의 숫자, 탭문자를 이용하고 싶으면 t를 사용
      코드 정렬을 안하려면 n을 사용한다
    • 태그리스트1
      들여쓰기할 태그 리스트, D를 이용하면 기본 태그를 사용한다.
      기본 목록은 tr,td,div,ol,ul,li 이다.
      추가하고 싶다면, D뒤에 컴마(,)를 이용 추가하면 가능하다.
      D를 없애고 직접 적어주는것도 가능하다.
    • 태그리스트2
      들여쓰기는 안하지만 한줄에 하나만 있어야할 태그 리스트.
      D를 이용하면 기본 태그를 사용한다.
      기본 목록은 html,head,body,title,meta,table,link,map,select 이다.
    • 태그리스트3
      정리를 안할 태그 리스트, D를 이용하면 기본 태그를 사용한다.
      기본 목록은 pre,style 이다.
      script와 ? 를 넣어두면 php와 jacsript가 html의 정렬과 상관없이 정렬된다.


    $2
    • php javascript의 정렬
    • 주석제거, PHP코드 제거 기능 제거


    $2
    • 2.0.1 : 정렬무시 기능 오작동 수정
    • 2.0.2 : 태그이름이 겹치는경우(ex link,li) 옵션이 무시되는 버그수정

    출처 : http://www.killrain.net/channel/lab/dev.php?mode=view&no=310

    2009/04/21 10:46 2009/04/21 10:46
    USE TEMPDB
    GO
    declare @hash varbinary (255)
    CREATE TABLE tempdb..h (id_num int, hash varbinary (255))
    SET @hash = pwdencrypt('123') -- encryption
    INSERT INTO tempdb..h (id_num,hash) VALUES (1,@hash)
    SET @hash = pwdencrypt('123')
    INSERT INTO tempdb..h (id_num,hash) VALUES (2,@hash)
    SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 2
    SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
    SELECT * FROM tempdb..h
    INSERT INTO tempdb..h (id_num,hash) 
    VALUES (3,CONVERT(varbinary (255),
    0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8))
    SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 3
    SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
    SELECT * FROM tempdb..h
    DROP TABLE tempdb..h
    GO
    

    Results

    (1 row(s) affected)
    (1 row(s) affected)
    Success of check ------------------- 1 (1 row(s) affected)
    id_num hash ----------- ------------------------------------------------------ 1 0x01004A335DCEDB366D99F564D460B1965B146D6184E4E1025195 2 0x0100E11D573F359629B344990DCD3D53DE82CF8AD6BBA7B638B6 (2 row(s) affected)
    (1 row(s) affected)
    Success of check
    -------------------
    1
    (1 row(s) affected)
    id_num hash ----------- ------------------------------------------------------ 1 0x01004A335DCEDB366D99F564D460B1965B146D6184E4E1025195 2 0x0100E11D573F359629B344990DCD3D53DE82CF8AD6BBA7B638B6 3 0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8 (3 row(s) affected)
    2009/04/21 10:43 2009/04/21 10:43
    프로그래밍을 하다보면 불가피하게 dynamic query를 사용해야하는 경우가 발생한다.

    stored procedure를 사용하면서 exec statement를 사용하게 되는데 이렇게 되면 조금만 부주의해도 injection에 의한 공격이 허용되는 경우도 있고 같은 유형의 쿼리가 들어가도 미리 만들어진 실행계획을 이용하지 못하는 문제가 있어서 성능면에서 그 효과가 많이 줄어든다.

    그에 반해 sp_executesql을 이용하게 되면 parameters를 이용할 수 있으므로 injection에 의한 공격에도 자유로울 수 있고 아래의 옮겨 놓은 ms sql의 도움말에 적혀 있듯이 비슷한 유형의 경우 기 실행계획을 이용하게 되는 경우가 있으니 상대적으로 성능면에서 유리한 면이 있고 이를 보고 일석이조라고 해야 하지 않을까 한다.

    == 아래 == :: ms sql 도움말 옮김

    sp_executesql

    여러 번 사용할 수 있거나, 동적으로 만들어진 Transact-SQL문 또는 일괄 처리를 실행합니다. Transact-SQL문 또는 일괄 처리는 포함 매개 변수를 포함할 수 있습니다.

    구문

    sp_executesql [@stmt =] stmt[
       
    {, [@params =] N'@parameter_name  data_type [,...n]' }
         {, [@param1 =] 'value1' [,...n] }
    ]

    인수

    [@stmt =] stmt

    Transact-SQL문 또는 일괄 처리를 포함한 유니코드 문자열입니다. stmt는 암시적으로 ntext로 변환될 수 있는 변수 또는 유니코드 상수여야 합니다. + 연산자로 두 개의 문자열을 연결한 식 등과 같은 보다 복잡한 유니코드식은 사용할 수 없습니다. 문자 상수도 사용할 수 없습니다. 상수가 지정된 경우에는 N이라는 접두사가 있어야 합니다. 예를 들어, N'sp_who'라는 유니코드 상수는 사용할 수 있지만 'sp_who'는 사용할 수 없습니다. 문자열의 크기는 사용 가능한 데이터베이스 서버의 메모리의 용량에 따라서만 제한됩니다.

    stmt는 변수 이름과 동일한 형식의 매개 변수를 포함할 수 있습니다. 예를 들면 다음과 같습니다.

    N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'
    

    stmt에 포함된 각 매개 변수에는 @params 매개 변수 정의 목록과 매개 변수 값 목록 모두에 해당되는 항목이 있어야 합니다.

    [@params =] N'@parameter_name  data_type [,...n]'

    stmt에 포함된 모든 매개 변수의 정의를 포함하는 하나의 문자열입니다. 문자열은 암시적으로 ntext로 변환될 수 있는 변수 또는 유니코드 상수여야 합니다. 각 매개 변수의 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다. n은 추가 매개 변수 정의를 나타내는 자리 표시자입니다. stmt에서 지정된 모든 매개 변수는 반드시 @params에서 정의되어야 합니다. stmt의 Transact-SQL문 또는 일괄 처리에 매개 변수가 없는 경우에는 @params가 필요하지 않습니다. 이 매개 변수의 기본값은 NULL입니다.

    [@param1 =] 'value1'

    매개 변수 문자열에서 정의된 첫번째 매개 변수의 값입니다. 값은 상수 또는 변수가 될 수 있습니다. stmt에 포함된 모든 매개 변수에 대해 제공되는 매개 변수 값이 있어야 합니다. stmt의 Transact-SQL문 또는 일괄 처리에 매개 변수가 없는 경우에는 값이 필요하지 않습니다.

    n

    추가 매개 변수의 값에 대한 자리 표시자입니다. 값은 상수 또는 변수만 가능합니다. 값은 함수 또는 연산자를 사용하여 작성된 표현식 등과 같이, 보다 복잡한 표현식이 될 수 없습니다.

    반환 코드 값

    0(성공) 또는 1(실패)

    결과 집합

    SQL 문자열에 작성된 모든 SQL문에서 결과 집합을 반환합니다.

    비고

    sp_executesql은 일괄 처리, 이름의 범위 및 데이터베이스 컨텍스트면에서 EXECUTE와 동작이 동일합니다. sp_executesql stmt 매개 변수의 Transact-SQL문 또는 일괄 처리는 sp_executesql이 실행될 때까지 컴파일되지 않습니다. stmt의 내용은 sp_executesql이라는 일괄 처리의 실행 계획과 별도로 컴파일되고 실행됩니다. sp_executesql 일괄 처리는 sp_executesql을 호출하는 일괄 처리에서 선언된 변수를 참조할 수 없습니다. sp_executesql 일괄 처리의 로컬 커서 또는 변수는 sp_executesql을 호출하는 일괄 처리에는 보이지 않습니다. 데이터베이스 컨텍스트 내의 변경 사항은 sp_executesql문이 종료될 때까지만 지속됩니다.

    문에 대한 매개 변수의 변경 사항이 변형뿐인 경우, Transact-SQL문을 여러 번 실행하기 위해 저장 프로시저 대신 sp_executesql을 사용할 수 있습니다. Transact-SQL문 자체에 상수가 남아 있으며 매개 변수 값만이 변경되었으므로 Microsoft® SQL Server™ 쿼리 최적화 프로그램이 첫번째 실행에 대해 생성된 실행 계획을 다시 사용할 확률이 높습니다.

    참고   문의 문자열에 있는 개체 이름이 정식으로 규정되지 않은 경우에는 실행 계획이 다시 사용되지 않습니다.

    sp_executesql은 Transact-SQL 문자열과 별도로 매개 변수 값의 설정을 지원합니다.

    DECLARE @IntVariable INT
    DECLARE @SQLString NVARCHAR(500)
    DECLARE @ParmDefinition NVARCHAR(500)
    
    /* Build the SQL string once.*/
    SET @SQLString =
         N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level'
    SET @ParmDefinition = N'@level tinyint'
    /* Execute the string with the first parameter value. */
    SET @IntVariable = 35
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @level = @IntVariable
    /* Execute the same string with the second parameter value. */
    SET @IntVariable = 32
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @level = @IntVariable
    

    sp_executesql에서 매개 변수를 대치할 수 있는 경우에는 EXECUTE문을 사용하여 문자열을 실행하는 데 있어서 다음과 같은 장점이 있습니다.

    • sp_executesql 문자열에 있는 Transact-SQL문의 실제 텍스트가 실행 사이에 변경되지 않으므로 쿼리 최적화 프로그램이 두 번째 실행의 Transact-SQL문과 첫번째 실행에 대해 생성된 실행 계획을 일치시킬 가능성이 있습니다. 따라서 SQL Server가 두 번째 문을 컴파일할 필요가 없습니다.

    • Transact-SQL 문자열이 단 한 번만 작성됩니다.

    • 정수 매개 변수는 자신의 기본 형식으로 지정됩니다. 유니코드를 캐스팅할 필요가 없습니다.
    사용 권한

    public 역할에 대한 기본 권한을 실행합니다.

    예제
    A. 단순 SELECT문 실행

    다음은 @level이라는 포함 매개 변수를 포함한 단순 SELECT 문을 작성하고 실행하는 예제입니다.

    execute sp_executesql 
              N'select * from pubs.dbo.employee where job_lvl = @level',
              N'@level tinyint',
              @level = 35
    
    B. 동적으로 작성된 문자열 실행

    다음은 sp_executesql을 사용하여 동적으로 작성된 문자열을 실행하는 예제입니다. 예로 든 저장 프로시저는 일 년 간의 판매 데이터를 파티션으로 분리하는데 사용되는 일련의 테이블에 데이터를 삽입하는 데 사용됩니다. 일 년의 각 달에는 다음과 같은 형식의 테이블이 한 개씩 있습니다.

    CREATE TABLE May1998Sales
        (OrderID      INT      PRIMARY KEY,
        CustomerID      INT      NOT NULL,
        OrderDate      DATETIME   NULL
            CHECK (DATEPART(yy, OrderDate) = 1998),
        OrderMonth      INT
            CHECK (OrderMonth = 5),
        DeliveryDate   DATETIME   NULL,
            CHECK (DATEPART(mm, OrderDate) = OrderMonth)
        )
    

    파티션으로 분리된 테이블에서 데이터를 검색하는 것에 관한 자세한 내용은 파티션으로 분리된 데이터로 보기 사용을 참조하십시오.

    각 테이블의 이름은 달 이름의 첫 세 글자, 연도를 표시하는 네 자리 수 및 상수인 Sales로 구성됩니다. 이름은 주문 날짜에서 동적으로 작성될 수 있습니다.

    /* Get the first three characters of the month name. */
    SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +
    /* Concatenate the four-digit year; cast as character. */
    CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +
    /* Concatenate the constant 'Sales'. */
    'Sales'
    

    이러한 견본 저장 프로시저는 동적으로 INSERT 문을 작성하고 실행하여 새 주문을 올바른 테이블에 삽입합니다. 또한 반드시 데이터를 포함해야 하는 테이블의 이름을 작성하는 데 주문 날짜를 사용하며, 작성된 이름은 INSERT 문에 병합됩니다. 이는 sp_executesql의 단순한 예입니다. 여기에는 오류 확인 및 테이블 간에 주문 번호가 중복되지 않았는지를 확인하는 등의 업무 규칙 확인이 포함되지 않습니다.

    CREATE PROCEDURE InsertSales @PrmOrderID INT, @PrmCustomerID INT,
                     @PrmOrderDate DATETIME, @PrmDeliveryDate DATETIME
    AS
    DECLARE @InsertString NVARCHAR(500)
    DECLARE @OrderMonth INT
    
    -- Build the INSERT statement.
    SET @InsertString = 'INSERT INTO ' +
           /* Build the name of the table. */
           SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +
           CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +
           'Sales' +
           /* Build a VALUES clause. */
           ' VALUES (@InsOrderID, @InsCustID, @InsOrdDate,' +
           ' @InsOrdMonth, @InsDelDate)'
    
    /* Set the value to use for the order month because
       functions are not allowed in the sp_executesql parameter
       list. */
    SET @OrderMonth = DATEPART(mm, @PrmOrderDate)
    
    EXEC sp_executesql @InsertString,
         N'@InsOrderID INT, @InsCustID INT, @InsOrdDate DATETIME,
           @InsOrdMonth INT, @InsDelDate DATETIME',
         @PrmOrderID, @PrmCustomerID, @PrmOrderDate,
         @OrderMonth, @PrmDeliveryDate
    
    GO
    

    이 프로시저에서는 EXECUTE를 실행하는 것보다 sp_executesql을 실행하여 문자열을 실행하는 것이 더 효과적입니다. sp_executesql을 실행하는 경우, 각 개월별 테이블에 대해 한 개씩, 12 버전의 INSERT 문자열만이 생성됩니다. EXECUTE의 경우, 매개 변수 값이 다르므로 각 INSERT 문자열이 고유합니다. 두 가지 방법 모두 같은 수의 일괄 처리를 생성하지만 sp_executesql에 의해 생성된 INSERT 문자열의 유사성으로 인해 쿼리 최적화 프로그램이 실행 계획을 다시 사용할 확률이 높습니다.

    2009/04/21 10:43 2009/04/21 10:43
    먼저 아래와 같이 c#을 작성하여 test.cs로 저장합니다.

    public class testvbscriptcallabledll
    {
    	public string testmethod()
    	{
    		return "this is a string returned from .net compiled library";
    	}
    }
    
    

    콘솔에서 해당 경로로 이동 아래와 같이 컴파일 합니다.
    csc /nologo /t:library test.cs
    그리고 어셈블리에 등록 합니다.
    regasm /nologo /codebase test.dll

    그리고 아래와 같이 test.vbs를 작성합니다.

    
    Dim f
    
    Set f = CreateObject("testvbscriptcallabledll")
    msgbox f.testmethod
    Set f = Nothing
    
    
    


    test.vbs를 실행합니다. :)
    2009/04/21 10:40 2009/04/21 10:40