'인터넷관련'에 해당되는 글 1181건

  1. 2008.01.18 get_magic_quotes_gpc()
  2. 2008.01.18 Error Page Code
  3. 2008.01.18 호스팅 받는 업체들 용량체크하는법
  4. 2008.01.18 mysql query 관련 class
  5. 2008.01.18 파일네임 금지
  6. 2008.01.18 문자열 내의 HTML 태그를 모두 없애는 방법
  7. 2008.01.18 nowrap 과 break-all 로 테이블 안의 줄바꿈 제어
  8. 2008.01.18 한글로된 색상표
  9. 2008.01.18 <frame> style:bgColor scrollbarFaceColor
  10. 2008.01.18 textbox의 값을 오른쪽부터 채우기.
  11. 2008.01.18 IFRAME 삽입 방법
  12. 2008.01.18 제목 길이 맞추기 위해 substring를 사용하기..
  13. 2008.01.18 웹상에서 음악/동영상 재생 코드 파헤치기
  14. 2008.01.18 브라우저 내장객체 - select, option
  15. 2008.01.18 프레임 페이지 새로고침[F5] 후에도 현재 페이지 계속 보이기
  16. 2008.01.05 알아두면 편리한 자판 단축키들(웹서핑용)
  17. 2008.01.04 플래시플레이어(Adobe Flash Player 7,8,9) 재설치
  18. 2007.12.27 문자열 1바이트씩 배열에 담기
  19. 2007.12.22 [함수] 어설픈 GD 사용 EZBtn ???
  20. 2007.12.22 PHP Shorthand If / Else Examples
  21. 2007.12.22 cron을 사용하지않고 화일 캐쉬
  22. 2007.12.22 [서버운영] Apache mod_gzip 압축
  23. 2007.12.19 [스크립트] 스크립트만으로 움직이는 막대 Chart 그래프
  24. 2007.12.19 [스크립트] 드래그 & 드롭 객체 Drag
  25. 2007.12.13 문자열 더할 때 속도 비교
  26. 2007.12.13 INPUT label - 인풋 라벨태그
  27. 2007.12.04 웹서버에 부하없는.. 실시간 상담용 채팅프로그램 , AJAX
  28. 2007.12.04 [함수] 'ㅅㅂㄹㅁ','凸' 욕 필터링
  29. 2007.12.04 [알고리즘] 큰 배열에서 검색방법
  30. 2007.12.04 제로보드 스팸광고게시물,덧글 자동등록 방지 ZM_Crypt 2.0

if ( !get_magic_quotes_gpc() ) {
 #$comment = stripslashes($comment);
 #$subject = stripslashes($subject);
} else {
 $comment = stripslashes($comment);
 $subject = stripslashes($subject);
}


if ( ! get_magic_quotes_gpc() ) {
 $comment = addslashes($comment);
 $subject = addslashes($subject);
} else {
}






================================

http://man.phpschool.com/manual/en/function.get-magic-quotes-gpc.php



<?php
if (get_magic_quotes_gpc
()) {
   function
maybeaddslashes(&$inthing
) { }
   function
maybestripslashes(&$inthing
) {
       if (
is_array($inthing
)) {
           foreach (
$inthing as $element
) {
              
$element = stripslashes($element
);
           }
       } else {
          
$inthing = stripslashes($inthing
);
       }
   }
} else {
   function
maybeaddslashes(&$inthing
) {
       if (
is_array($inthing
)) {
           foreach (
$inthing as $element
) {
              
$element = addslashes($element
);
           }
       } else {
          
$inthing = addslashes($inthing
);
       }
   }
   function
maybestripslashes(&$inthing
) {}
}
?>


'인터넷관련' 카테고리의 다른 글

파일업로드 삭제 클래스  (0) 2008.01.18
디렉토리..class.sh_dir_cls.inc  (0) 2008.01.18
session_save_path() 2  (0) 2008.01.18
table_sql 을 엑셀파일로 다운받기.  (0) 2008.01.18
Error Page Code  (0) 2008.01.18
호스팅 받는 업체들 용량체크하는법  (0) 2008.01.18
mysql query 관련 class  (0) 2008.01.18
파일네임 금지  (0) 2008.01.18
Posted by 알 수 없는 사용자
,

Error Page Code

인터넷관련 2008. 1. 18. 09:59
'100' => 'Continue',
'101' => 'Switching Protocols',
'200' => 'OK',
'201' => 'Created',
'202' => 'Accepted',
'203' => 'Non-Authoritative Information',
'204' => 'No Content',
'205' => 'Reset Content',
'206' => 'Partial Content',
'300' => 'Multiple Choices',
'301' => 'Moved Permanently',
'302' => 'Moved Temporarily',
'303' => 'See Other',
'304' => 'Not Modified',
'305' => 'Use Proxy',
'400' => 'Bad Request',
'401' => 'Unauthorized',
'402' => 'Payment Required',
'403' => 'Forbidden',
'404' => 'Not Found',
'405' => 'Method Not Allowed',
'406' => 'Not Acceptable',
'407' => 'Proxy Authentication Required',
'408' => 'Request Time-out',
'409' => 'Conflict',
'410' => 'Gone',
'411' => 'Length Required',
'412' => 'Precondition Failed',
'413' => 'Request Entity Too Large',
'414' => 'Request-URI Too Large',
'415' => 'Unsupported Media Type',
'500' => 'Internal Server Error',
'501' => 'Not Implemented',
'502' => 'Bad Gateway',
'503' => 'Service Unavailable',
'504' => 'Gateway Time-out',
'505' => 'HTTP Version not supported'


404 에러 강제로 띄우기
<?
header("HTTP/1.0 404 Not Found");
exit;
?>
Posted by 알 수 없는 사용자
,

얼마전 오너의 지시로 웹상에서 호스팅 받는 업체들 용량체크하는법을 연구중에 딴분이 쓰고 있는 방법을 알아내서 유용하게 사용하고 있습니다.


필요하신분 함 사용해보세요. 웹 에이전시에서 사용하기에 적합 합니다.


<?
function direc($shellcommand) {
$used = explode("\t", exec($shellcommand));
return (int) $used[0];
}
?>


<?=sprintf('%d', direc("du -m "."홈디렉토리절대경로"))?>


이렇게 하면 용량이 표시됩니다.

'인터넷관련' 카테고리의 다른 글

session_save_path() 2  (0) 2008.01.18
table_sql 을 엑셀파일로 다운받기.  (0) 2008.01.18
get_magic_quotes_gpc()  (0) 2008.01.18
Error Page Code  (0) 2008.01.18
mysql query 관련 class  (0) 2008.01.18
파일네임 금지  (0) 2008.01.18
문자열 내의 HTML 태그를 모두 없애는 방법  (0) 2008.01.18
nowrap 과 break-all 로 테이블 안의 줄바꿈 제어  (0) 2008.01.18
Posted by 알 수 없는 사용자
,

아래 소스는 MySQL 접속 및 쿼리에 필요한 Class 입니다.

MySQL 사용시 필요한 모든 함수를 사용할 수 있도록 할 수도 있지만...

가장 많이 쓰이는 query 부분만이라도 좀 더 쉽게 구연하고자 만들었습니다.


사용방법은 간단합니다.


<?

include_once "Mysql.class.php";

$sq = new Mysql("아이디","비밀번호","디비명");


$sq_id = $sq->Query("select * from test","",__FILE__,__LINE__);

while($rows = $sq->Fetch("fa",$sq_id)) {
   echo $rows[no]."<br>";
}

?>


위 소스를 간단히 설명하겠습니다.


1. 개체 생성과 동시에 아이디, 비밀번호, 디비명을 이용해서 MySQL 계정에 접속합니다.

2. query() 메소드를 사용하여 쿼리를 실행합니다.

 - 메소드 실행시 메소드는 결과가 저장된 아이디(번호)를 반환합니다.

 - 중요한 쿼리 뒷쪽 3개의 인수에 주목하세요...^^

 - 쿼리 바로 뒤에는 "" 이렇게 아무것도 입력하지 않았는데요. 이건 조금 있다가 설명하고...

 - __FILE__ 은 PHP 기본 상수로서 현재 스크립트가 실행 중인 파일명을 저장하고 있습니다.

 - __LINE__ 도 역시 PHP 기본 상수로서 실행중인 줄번호를 저장하고 있습니다.

 - 위 정보는 쿼리 에러 발생시 에러 발생 위치를 출력하기 위함입니다.

 - 자 그럼 위에서 잠깐 언급한 두번째 인수는 위에 예제가 아닌 아래 예제를 보세요.


<?

$info = $sq->Query("select * from test","fa",__FILE__,__LINE__);


echo $info[name];

echo $info[age];

?>


위 예제에서 보는 것과 같이 쿼리를 실행하고 mysql_fetch_array() 까지 적용해서 $info 라는 변수에 저장이 된 것입니다. 두번째 인수로 "fa" 를 입력했는데 이것이 바로 mysql_fetch_array() 에서 mysql 을 뺀 나머지의 줄임말입니다. (fetch_array => fa , fetch_row => fr)


3. Query() 메소드가 반환한 id(번호)를 이용해서 Fetch 를 적용할 수 있습니다.

위에 첫번째 예제에 있는 것과 같이...


while($rows = $sq->Fetch("fa",$sq_id)) {
   echo $rows[no]."<br>";
}


이렇게 사용이 가능합니다. 이것은 일반 코딩에서...


while($rows = mysql_fetch_array($result)) {
   echo $rows[no]."<br>";
}


위 소스와 동일합니다.


자 그런데 한가지 의문점이 생깁니다. 쿼리를 한번 실행하기 위해서는


$sq->Query("실행쿼리","",__FILE__,__LINE__);


이렇게 길게 적어야 하는데 좀 쉽게 할 수 없을까요?

당연히 할 수 있습니다. 현재 어떤 에디터를 사용하시는지는 모르겠지만...

저의 경우 Editplus 를 사용합니다. 에디트 플러스에 있는 기능 중 '자동완성'이란 기능이 있습니다.

(도구->기본설정->파일:설정및 구문강조 메뉴에 보시면 자동완성이란 부분이 있으며 파일이 지정되어 있습니다. 확장자가 'acp' 인 파일이지요. 만약 지정된 파일이 없다면 http://www.editplus.co.kr 에 가셔서 php 관련 파일을 받으신 후 설정하시면 되겠습니다.)


이 '자동완성'이란 기능은 쉽게 말해 긴문장을 짧게 사용할 수 있도록 해주는 것이라고 말할 수 있겠습니다.


간단한 예로...acp 파일에...


#T=qu
query("^!","","",__FILE__,__LINE__);


이렇게 설정해 놓으시면 editplus 에서

'qu'입력후 스페이스바를 한번 누르면...

query("커서위치","","",__FILE__,__LINE__); 이렇게 출력이 된다는 것입니다.

참고로 '^!' 이 부분에 커서가 위치되지요.


이런 식으로 설정해서 사용하시면 코딩시 상당히 편하답니다...^^

자 이제 긴 설명을 끝내며 Mysql.class.php 파일 내용을 적겠습니다.

그럼 즐거운 하루되세요.


파일명 : Mysql.class.php


<?
/***********************************************************************

                                      MySQL Class

                                                                  최초작성일 : 2003-12-24
                                                                  최종수정일 : 2003-12-24

***********************************************************************/



class Mysql {
   var $result = array();

   /* 함수설명   :   MySQL 에 접속
      인수       :   $user : 사용자아아디
                     $pass : 비밀번호
                     $db   : 사용 db명
                     $host : 호스트명 기본 localhost
   */
   function Mysql($user, $pass, $db, $host="localhost") {
      if($this->CheckStr($host)) $host = "localhost";
      if($this->CheckStr($user)) $this->Error("MySQL 계정 사용자 아이디가 지정되지 않았습니다.");
      else if($this->CheckStr($pass)) $this->Error("MySQL 계정 비밀번호가 지정되지 않았습니다.");
      else if($this->CheckStr($db)) $this->Error("MySQL 계정 DB명이 지정되지 않았습니다.");
      else {
         mysql_connect($host, $user, $pass) || die("MySQL 계정 접속에 실패했습니다.");
         mysql_select_db($db) || die($db." 선택에 실패했습니다.");
      }
   }

   /* 함수설명   :   $str 이 공백문자인지 확인
      인수       :   $str : 확인할 문자열
      return     :   공백일 경우 true , 정상문자일 경우 false
   */
   function CheckStr($str) {
      if(!ereg("([^[:space:]]+)",$str)) return true;
      else return false;
   }

   /* 함수설명   :   $str 출력 후 exit;
      인수       :   $str : 출력할 메세지
   */
   function Error($str) {
      echo "
      <table align=center width=100% height=100% border=0 cellspacing=0 cellpadding=0>
      <tr>
         <td align=center>
            <br>====================== MySQL Error Message Start ======================<br><br>
               ".$str."<br>
            <br><br>====================== MySQL Error Message End =======================<br>
         </td>
      </tr>
      </table>
      ";
      exit;
   }

   /* 함수설명   :   Mysql 쿼리에러 발생시 에러문과 해당 파일과 라인을 출력함
      인수       :   $file : __FILE__ (PHP 기본 변수)
                     $line : __LINE__ (PHP 기본 변수)
   */
   function QueryError($file="",$line="") {
      echo "
      <table align=center width=100% height=100% border=0 cellspacing=0 cellpadding=0>
      <tr>
         <td align=center>
            <br>====================== MySQL Query Error Message Start ======================<br><br>
            <table align=center>
               <tr>
                  <td>
                        에러번호 : ".mysql_errno()."<br>에러내용 : ".mysql_error()."<br>";
      if($file) echo "에러파일 : ".$file."<br>";
      if($line) echo "에러라인 : ".$line."<br>";
               echo "
                  </td>
               </tr>
            </table>
            <br><br>====================== MySQL Query Error Message End =======================<br>
         </td>
      </tr>
      </table>
      ";
      exit;
   }

   /* 함수설명   :   Query 실행 함수
      인수       :   $str : 실행 할 쿼리문
                     $option : fr -> fetch_row, fa -> fetch_array, ff -> fetch_field, nr -> num_rows, nf -> num_fields
                     $file : 에러발생시 표시할 파일이름 ('__FILE__' 기본 PHP 함수)
                     $line : 에러발생시 표시할 라인번호 ('__LINE__' 기본 PHP 함수)
                     $db : 쿼리시 기본 DB가 아닐경우 쿼리가 실행될 DB 설정
      return     :   쿼리문 결과ID (옵션에 따라 결과 값이 반환되기도 함.)
   */
   function Query($str,$option='',$file=__FILE__,$line=__LINE__,$db='') {
      $id = count($this->result);
      $id = (!$id) ? 1 : $id+1;
      $this->result[$id] = ($db) ? mysql_db_query($db,$str):mysql_query($str);
      if(!$this->result[$id]) $this->queryError($file,$line);
      if($option) return $this->Fetch($option,$id);
      else return $id;
   }

   /* 함수설명   :   MySQL Resource#ID 를 이용해서 fetch 시킴
      인수       :   $option : fr -> fetch_row, fa -> fetch_array, ff -> fetch_field, nr -> num_rows, nf -> num_fields
      return     :   fetch 된 값
   */
   function Fetch($option, $id="") {
      if(!$id) $id = 1;
      if($option == 'fr') return mysql_fetch_row($this->result[$id]);
      else if($option == 'fa') return mysql_fetch_array($this->result[$id]);
      else if($option == 'ff') return mysql_fetch_field($this->result[$id]);
      else if($option == 'nr') return mysql_num_rows($this->result[$id]);
      else if($option == 'nf') return mysql_num_fields($this->result[$id]);
      else return $this->result[$id];
   }
}

?>

Posted by 알 수 없는 사용자
,

<?
# Auth : shkim
# filename :
# Email : isunnyk@empal.com, idxzone@naver.com
# Start Date : 2004.03.16.Tues
# Last Date :
# Description : filename


$ff = '신촌하하__1234abcd_+=|!@#$%^&*().gif';
$t = file_allowed($ff);
echo '$ff==' . $ff. '<br>';
echo '$t='. $t. '<p>';

$ff = '가   나{파}[학].--ㄴㅍㅎ_11_ㄱㄴㅍㅎ_99_1290_abyzABYZ_+=|!@#$%^&*().gif';
#$ff = 0;
$t = file_allowed($ff);
echo '$ff==' . $ff. '<br>';
echo '$t='. $t. '<p>';
echo file_nameDeny_hanGul($ff);


    function file_allowed($given_filename){
        //우선, 파일명에 부적합한것들 없애기
        $str = $given_filename;


        $b = array();

        $a = array( "/\*/", "/\?/",  "/\//", "/\|/");  //반드시 역슬래쉬
        $str = preg_replace($a, $b, $str);


        //$a2 = array('/"/', "/'/", "/ /", "/:/", "/;/", "/>/", "/</"); //역슬래쉬는 선택
        $a2 = array('/\"/', "/\'/", "/ /", "/\:/", "/\;/", "/\>/", "/\</"); //역슬래쉬는 선택
        $str = preg_replace($a2, $b, $str);


        //추가적으로... `~  !@#$%^&
        $c4 = array("/`/", "/~/", "/!/", "/@/", "/#/",  "/%/",  "/&/", "/^/", "/$/");
        $str = preg_replace($c4, $b, $str);


        $c5 = array("/\^/", "/\$/");  // 역슬래쉬 필수적.
        $str = preg_replace($c5, $b, $str);


        //역슬래쉬는 어케 제거하나??
        //  $ \ 를 어케 하나.


        //appended....2004.03.16.
        #$str = eregi_replace('$', '',  $str); #wrong
        #$str = eregi_replace("$", '',  $str);    #wrong
        $str = eregi_replace('\$', '',  $str);     #success
        #$str = eregi_replace("\$", '',  $str);    ## wrong


        return $str;
    }



    function file_nameDeny_hanGul($filename){
        //파일명 허용... 영문 숫자  [.], [_()-]  , []{},

        $newFileName = '';

        $l = strlen($filename);


        for( $i=0 ; $i<$l; $i++){
            $c_one = substr($filename, $i, 1);
            $d_ord = ord($c_one);
            #echo $i. '::       '. $c_one. ' == '. $d_ord.  "\t<br>\n";


            if( $d_ord >=48 && $d_ord <= 57 ){ //0~9
                $ok_name = true;
            }else if( $d_ord>=97 && $d_ord<=122 ){ //a~z
                $ok_name = true;
            }else if( $d_ord>=65 && $d_ord<=90 ){    //A~Z
                $ok_name = true;
            }else if(  $d_ord == 46 ){    //.
                $ok_name = true;
            }else if( $d_ord == 95 || $d_ord == 45 || $d_ord == 40 || $d_ord == 41 ){ //_ -  ( )
                $ok_name = true;
            }else if( $d_ord == 123 ||  $d_ord == 125 ||  $d_ord == 91 ||  $d_ord == 93 ){    //{} []
                //$ok_name = true;
            }else{
                $ok_name = false;
            }


            if( $ok_name ==  true ){
                $newFileName = $newFileName . $c_one;
            }
        }


        //파일명이 .으로 시작한다면, 앞에 뭔가 하나를 덧붙인다. 왜냐면, 숨김파일이니까..
        if( $newFileName ){
            if( eregi('^[.]', $newFileName) ){
                $f_head = date('Ymd');
                $newFileName = $f_head . $newFileName;
            }
        }


        #echo '<hr>$newFileName=' . $newFileName;

        return $newFileName;
    }

?>

Posted by 알 수 없는 사용자
,

<?

function stripHTML($str){
   return eregi_replace("[<][^>]*[>]", "", $str);
}

이미지는 살려놓으려면
function stripHTML($str){
   return eregi_replace("[<][^img][^>]*[>]", "", $str);
}
?>

Posted by 알 수 없는 사용자
,
nowrap 과 break-all 로 테이블 안의 줄바꿈 제어
특정 셀 안의 내용은 지정된 테이블의 폭에 상관없이 줄바꿈 되지 않게 할 수 있는 방법(nowrap)과,
띄어쓰기가 되지 않은 긴 영문이 셀 안에 포함돼서 테이블이 길게 늘어지는 걸 막아주는 방법(break-all)입니다.

1. nowrap

나는 서투른 글씨의 노래들을 채워 넣습니다. 나는 서투른 글씨의 노래들을 채워 넣습니다.

<table width="300">
<tr>
<td width="50%">나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
<td width="50%">나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
</tr>
</table>

아무 옵션도 주지 않은 일반적인 테이블은 위처럼 각각 소스대로 50%씩 나눠졌습니다.
글도 테이블 폭에 따라 아래로 저절로 내려가서 폭을 유지해줍니다.


나는 서투른 글씨의 노래들을 채워 넣습니다. 나는 서투른 글씨의 노래들을 채워 넣습니다.

<table width="300">
<tr>
<td width="50%" nowrap>나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
<td width="50%">나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
</tr>
</table>

두 개의 셀(td)에 똑같이 50%의 폭을 지정해줬지만, nowrap가 추가된 셀에서는 줄바꿈이 되지 않았습니다.
테이블에 이름이나 날짜 등의 줄바꿈이 되어서는 곤란한 셀에 위처럼 nowrap 를 넣어주시면,
(별도의 줄바꿈 태그를 사용하지 않는 한) 지정된 셀의 폭과 관계 없이 아래로 줄바꿈되지 않습니다.

2. break-all

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 나는 서투른 글씨의 노래들을 채워 넣습니다.

<table width="300">
<tr>
<td width="50%">fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</td>
<td width="50%">나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
</tr>
</table>

위의 테이블 소스를 보시면, 테이블의 폭은 300이고 셀의 폭은 각각 50%입니다.
하지만, 왼쪽셀 안에 띄어쓰지 않은 영문을 길게 써 놓을 경우, 지정된 50%(여기서는 테이블 폭이300픽셀이므로, 300의 50%=150픽셀이 되겠죠)를 넘어서 테이블이 망가져버립니다. (익스플로러 6 에서는 망가지지 않는군요. 그렇지만, 아직 익스플로러 5.5 이하 버전을 사용하시는 분들도 많이 계시죠.)


fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 나는 서투른 글씨의 노래들을 채워 넣습니다.

<table width="300">
<tr>
<td width="50%" style="word-break:break-all">fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</td>
<td width="50%">나는 서투른 글씨의 노래들을 채워 넣습니다.</td>
</tr>
</table>

이런 경우는 셀 안에 위와 같은 방법으로 style="word-break:break-all" 를 추가하면, 길게 늘어진 영문이 셀의 폭에 맞춰서 착실하게 아래로 내려갑니다. (익스플로러 6 에서는 style="word-break:break-all" 를 추가하지 않아도 저절로 알아서 내려갑니다.)

Posted by 알 수 없는 사용자
,
000000 black 검정
2f4f4f darkslategray 어두운푸른빛회색
708090 slategray 푸른빛회색
778899 lightslategray 밝은푸른빛회색
696969 dimgray 칙칙한회색
808080 gray 회색
a9a9a9 darkgray 어두운회색
c0c0c0 silver 은색
d3d3d3 lightgrey 밝은회색
dcdcdc gainsboro
ffffff white 백색
fff5ee seashell 바다조가비
fffafa snow 설백
f8f8ff ghostwhite 허깨비백색
fffaf0 floralwhite 꽃의백색
f5f5f5 whitesmoke 백색연기
f0f8ff aliceblue 엷은잿빛바탕에푸른빛
f0ffff azure 하늘색
fdf5e6 oldlace 낡은끈
f5fffa mintcream 박하크림
ffefd5 papayawhip 열대아메리카산과수매질
ffdab9 peachpuff 복숭아빛불기
faf0e6 linen 리넨
eee8aa palegoldenrod 옅은국화과의다년초
ffe4e1 mistyrose 짙은장미빛
ffe4b5 moccasin 사슴가죽의구두
ffdead navajowhite 나바호족백색
d2b48c tan 볕에탄빛깔
f5deb3 wheat 밀
fafad2 lightgoldenrodyellow 밝은국화과다년초노랑
ffffe0 lightyellow 밝은노랑
fff8dc cornsilk 옥수수명주실
faebd7 antiquewhite 옛날의백색
f5f5dc beige 엷은갈색
fffacd lemonchiffon 레몬빛가볍고얇은직물
fffff0 ivory 상앗빛
f0e68c khaki 누른빛에엷은다색이섞인빛깔
e6e6fa lavender 연한자주색
fff0f5 lavenderblush 연한자주빛붉기
ffe4c4 bisque 분홍빛이도는검은빛을띤누른빛
ffebcd blanchedalmond 희어진엷은황갈색
deb887 burlywood 튼튼한목재
cd853f peru 남미서부의공화국
00ced1 darkturquoise 어두운푸른빛녹색
00bfff deepskyblue 짙은하늘파랑
7fffd4 aquamarine 엷은푸른빛녹색
1e90ff dodgerblue옥수수빵파랑
00ffff cyan 푸른정도
f0fff0 honeydew 식물의잎에서나는단물
87cefa lightskyblue 밝은하늘파랑
afeeee paleturquoise 옅은푸른빛녹색
e0ffff lightcyan 밝은푸른정도
add8e6 lightblue 밝은파랑
b0c4de lightsteelblue 밝은철강빛파랑
40e0d0 turquoise 푸른빛녹색
48d1cc mediumturquoise 중간의푸른빛녹색
00ffff aqua 엷은푸른빛녹색
7b68ee mediumslateblue 중푸른빛회색파랑
191970 midnightblue 깜깜한파랑
6495ed cornflowerblue 옥수수꽃파랑
0000cd mediumblue 중간의파랑
6a5acd slateblue 푸른빛회색파랑
4682b4 steelblue 철강빛파랑
0000ff blue 파랑
483d8b darkslateblue 어두운푸른빛회색파랑
5f9ea0 cadetblue 이하의파랑
87ceeb skyblue 하늘파랑
4169e1 royalblue 황실의파랑
b0e0e6 powderblue 가루파랑
000080 navy 짙은검은빛을띤남빛
00008b darkblue 어두운파랑
8a2be2 blueviolet 파란제비꽃색
8b008b darkmagenta 어두운짙은분홍색
9932cc darkorchid 어두운연보라색
9400d3 darkviolet 어두운제비꽃색
ff00ff magenta 짙은분홍색
ff00ff fuchsia 붉은빛깔이나는자줏빛
c71585 mediumvioletred 중제비꽃빨강
ba55d3 mediumorchid 중간의연보라색
9370db mediumpurple 중간의자줏빛
dc143c crimson 짙게붉은색깔
ff1493 deeppink 짙은연분홍색
ffb6c1 lightpink 밝은연분홍색
ff69b4 hotpink 강렬한연분홍색
ffc0cb pink 연분홍색
dda0dd plum 짙은 보라색
800080 purple 자줏빛
ee82ee violet 제비꽃색
d8bfd8 thistle 엉겅퀴
da70d6 orchid 연보라색
4b0082 indigo 남색
a52a2a brown 갈색
e9967a darksalmon 어두운주황색
f08080 lightcoral 밝은산호빛
cd5c5c indianred 인디언빨강
ffa07a lightsalmon 밝은주황색
db7093 palevioletred 옅은제비꽃빨강
f4a460 sandybrown 엷은갈색
fa8072 salmon 주황색
ff6347 tomato 토마토색
ff4500 ornagered
ff0000 red 빨강
800000 maroon 붉은빛을띤갈색
8b0000 darkred 어두운빨강
b22222 firebrick 내화
d2691e chocolate 갈색
8b4513 saddlebrown 안장갈색
a0522d sienna 붉은빛을띤갈색
bc8f8f rosybrown 장미빛갈색
ff7f50 coral 산호빛
ff8c00 darkorange 어두운붉은빛을띤누른색
ffa500 orange 붉은빛을띤누른색
b8860b darkgoldenrod 어둔운국화과의다년초
ffd700 gold 금빛
ffff00 yellow 노랑
7fff00 chartreuse 연두색
7cfc00 lawngreen 잔디녹색
00ff00 lime 열대산의레몬비슷한과일
32cd32 limegreen 라임녹색
00ff7f springgreen 봄녹색
3cb371 mediumseagreen 중간의바다녹색
adff2f greenyellow 녹색의노랑
8fbc8f darkseagreen 어두운바다녹색
90ee90 lightgreen 밝은녹색
98fb98 palegreen 옅은녹색
2e8b57 seagreen 바다녹색
00fa9a mediumspringgreen 중봄녹색
20b2aa lightseagreen 밝은바다녹색
66cdaa mediumaquamarine 중엷은청록색
228b22 forestgreen 숲녹색
008b8b darkcyan 어두운푸른정도
008080 teal 암록색을띤청색
006400 darkgreen 어두운녹색
556b2f darkolivegreen 어두운올리브녹색
008000 green 녹색
808000 olive 물푸레나뭇과의상록교목
6b8e23 olivedrab 올리브엷은갈색
bdb76b darkkhaki 어두운누른빛에엷은다색
daa520 goldenrod 국화과의다년초
Posted by 알 수 없는 사용자
,

<frame>  style:bgColor scrollbarFaceColor


<script>       
<!--
var msg = 'Hi~~~~~~~';
function generatetitle() {           
    if( window.frames["chromewin_t"] && window.frames["chromewin_l"] && window.frames["chromewin_b"] && window.frames["chromewin_r"] ) {   
        chromewin_t.document.open();       
        chromewin_t.document.write( "<a href='javascript:'>hello..</a> " + msg );       
        chromewin_t.document.close();    
   
        chromewin_l.document.bgColor="#cfcfcf"       
        chromewin_b.document.bgColor="#cfcfcf"       
        chromewin_r.document.bgColor="#cfcfcf"       


    //main 부분의 스크롤 색상임..
     main.document.bgColor="#cfcfcf";
     main.document.body.style.scrollbarFaceColor="#ffffff";  //suc
     var main_2 = main.document.body;
     main_2.style.scrollbarTrackColor = "#ffffff";  //입체의 맨 아래쪽 : bottom
     main_2.style.scrollbarArrowColor = "#999999";
     main_2.style.scrollbarShadowColor = "#999999"; //입체의 ㅁ 부분
     main_2.style.scrollbar3dLightColor = "#ffffff";  //입체의 「 부분
     main_2.style.scrollbarDarkShadowColor = "#ffffff"; //입체의 ㅁ 부분
     main_2.style.scrollbarHighLightColor = "#ffffff"; //이 부분은 어느곳의 색상인가?
    } else {   
        setTimeout("generatetitle()",200)       
    }       
}       
generatetitle()       
//-->
</script>       

<frameset border=0 frameborder=0  framespacing=0 rows="50,100%,1" > 
    <frame name=chromewin_t src="about:blank" scrolling=no noresize> 
    <frameset border=0 frameborder=0 framespacing=0  cols="1,100%,1"> 
        <frame name=chromewin_l src="about:blank" scrolling=no noresize> 
        <frame name=main  id="main2"      src="tmp.html" > 
        <frame name=chromewin_r src="about:blank" scrolling=no noresize> 
    </frameset> 
    <frame name=chromewin_b src="about:blank" scrolling=no noresize> 
</frameset> </html>

Posted by 알 수 없는 사용자
,

[예제]

<input type="text" name="cbk" value="오른쪽부터 채우기" style="text-align:right;">


부득이한 경우나 홈 레이아웃 (방명록) 등등 오른쪽 정렬인경우에 사용껑수....... ㅡㅡ;;


text-align:right


에서 right 를 center로 고치면 가운데 부터 채워나가죠.


left는 기본값이기 때문에 안 써도 무방하죠.

Posted by 알 수 없는 사용자
,
<IFRAME> BORDER, BORDERCOLOR, FRAMEBORDER, NAME, SCROLLING

<FRAME>과 유사한 기능을 가지는 요소인데, 다른 점은 브라우저에 나타나는 HTML문서 위의 자유로운 위치에 새로운 창으로 생성된다floating frame는 것이다.

<IFRAME frameborder="0" leftmargin="0" height="400" width="600" marginheight="0" marginwidth="0" scrolling="auto" src="sam.htm" topmargin="0">익스플로러만 가능하다.</IFRAME>

위에서 처럼 사용하면, 가로 40, 세로 100의 새로운 창(sam.htm의 내용)이 열리며, 익스플로러가 아닌 다른 브라우저로 검색할 경우에는 '익스플로러만 가능하다.'라는 문장이 나타난다.

BORDER="테두리의 굵기"

floating frame의 테두리의 굵기를 정한다. 주의할 것은 FRAMEBORDER와 함께 정의되어야 한다는 것이다..

BORDERCOLOR="테두리의 색깔"

FRAMEBORDER가 정해진 상태에서 테두리의 색깔을 지정한다.

FRAMEBORDER="테두리의 유무"

테두리를 설정할 경우는 "yes" (또는 "1"), 테두리를 없앨 경우는 "no" (또는 "0")로 한다.

NAME="Frame의 이름"

고유의 이름을 정한다.

SCROLLING="스크롤 바의 유무"

스크롤 바는 프레임의 길이와 문서의 분량에 따라  자동으로 만들어지지만, 필요에 따라 없앨 수도 있다. SCROLLING="no"로 하면 막대를 강제로 없앨 수 있고, SCROLLING="auto"라고 하면, 문서의 길이에 따라 자동으로 막대가 생긴다



                        ::: 투명하게 만들기 :::

투명한 아이프레임
<iframe src=문서 style="filter: Alpha(Opacity=65);"></iframe>

이렇게 뒤에 스타일루 넣어주세요..
65라는 숫자를 조절하면서 투명도를 조절하면 됩니다.

Posted by 알 수 없는 사용자
,

- 보통 기존의 프로젝트에서는 게시판의 제목이나 Event의 내역을 보여줄때 너무 긴글자의 경우 자바의 substring


 - java.lang.String.substring(int)

 - java.lang.String.substring(int, int)


패키지를 이용하여 원하는 길이 만큼의 내역 만을 WEB Pages에 출력했다.


그러나 이경우 한글과 영어 그리고 각 캐릭터 길이들 간에 차이로 안하여 같은 문자수 만큼 자른다고 하여도 화면에는 들쑥 날쑥한 String이 출력되고 만다.


이제는 WEB PAGES에 출력할때는 다음 테그를 사용해 보자.


<nobr style="text-overflow:ellipsis;overflow:hidden;width=XXXpx">

</nobr>


XXX 부분은 문자의 길이가 아니라 디자인상의 길이 즉 distance 이다.

-----------------------------------< SOURCE >---------------------------------------

<nobr style="text-overflow:ellipsis;overflow:hidden;width=260px">
alphabet:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

</nobr>

<br>

<nobr style="text-overflow:ellipsis;overflow:hidden;width=260px">
한글:가나다라마바사아자차카타파하가나다라마바사아자차카타파하

</nobr>

<br>

<nobr style="text-overflow:ellipsis;overflow:hidden;width=260px">
숫자:12345678910111213141516171819201234567891011121314151617181920

</nobr>

<br>



-----------------------------------< RESULT >---------------------------------------


alphabet:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
한글:가나다라마바사아자차카타파하가나다라마바사아자차카타파하
숫자:12345678910111213141516171819201234567891011121314151617181920


--------------------------------------------------------------------------------------


위와 같이 약간의 오차는 있지만 한글과 영문 그리고 숫자가 거의 동일한 길이에서 잘리게 되는 것을 볼수 있다.

Posted by 알 수 없는 사용자
,
오늘은 웹상에서 음악을 재생하고자 할때 쓰이는 코드 중에 OBJECT 를 이용한 방법에 대해서 알아보기로 하겠습니다.
우선, 미디어 플레이어를 새창으로 띄우지 않고, 컨트롤러만 보이게하는 방법은 저번 시간에 알아 보았습니다. 여기에 OBJECT 와 PARAM을 이용해서 좀 더 다양한 기능을 컨트롤 할 수 있습니다.
가령 예를 들어, 뒤로 가기, 앞으로 가기 버튼을 없앤다던가, 링크 방지를 위해서 마우스 클릭 시 반응이 안되게 한다던가 말이죠. 또한 저번 시간에 배웠던 autostart라던지 loop 등의 기능은 모두 이 태그 안에 포함되어 있습니다.

우선 기존 EMBED 태그가 들어가는 자리에 아래의 코드를 삽입합니다.


<OBJECT classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" width="300">
<PARAM NAME="Filename" VALUE="음악 파일 경로(예: http://rhythmer.net/media/268/268092.asf)">
<param name="ClickToPlay" value="true">
<param name="AutoSize" value="true">
<param name="AutoStart" value="true">
<param name="ShowControls" value="true">
<param name="ShowAudioControls" value="true">
<param name="ShowDisplay" value="false">
<param name="ShowTracker" value="true">
<param name="ShowStatusBar" value="false">
<param name="EnableContextMenu" value="false">
<param name="ShowPositionControls" value="false">
<param name="ShowCaptioning" value="false">
<param name="AutoRewind" value="true">
<param name="Enabled" value="true">
<param name="EnablePositionControls" value="true">
<param name="EnableTracker" value="true">
<param name="PlayCount" value="1">
<param name="SendWarningEvents" value="true">
<param name="SendErrorEvents" value="true">
<param name="SendKeyboardEvents" value="false">
<param name="SendMouseClickEvents" value="false">
<param name="SendMouseMoveEvents" value="false">
<param name="ShowGotoBar" value="false">
<param name="TransparentAtStart" value="false">
<param name="Volume" value="0">
</OBJECT>


여기서 눈치빠른 분들이시라면 대략적인 응용 방법은 눈치 채셨을꺼라 믿습니다.

<PARAM NAME="Filename" VALUE="음악 파일 경로(예: http://rhythmer.net/media/268/268092.asf)">

이 부분에서 음악 파일 경로를 삽입하고,
밑부분의 <param name> 부분은 기능을 제어하는 태그입니다.

만약 링크 못가져가게 마우스 우측 클릭 후 나타나는 정보창을 막고자 한다면,

<param name="EnableContextMenu" value="false">

이 부분에서 value 값을 true 혹은 false 로 지정하면서 제어할 수 있습니다.
보기와 같이 false로 지정하면 우측 클릭을 해도 반응을 하지 않습니다.
유용하게 쓰이겠죠? ^^


이제 하나하나의 기능을 살펴보기로 할까요?


<param name="ClickToPlay" value="true">
: 동영상 등을 재생할때 화면을 클릭하면 일시 정지되거나 다시 재생하는 기능을 제어하는 기능입니다. true / false로 제어합니다.

<param name="AutoSize" value="true">
: 화면의 비율을 자동으로 제어할 것인지, 말 것인지를 제어하는 기능입니다.
true로 해 놓으면 원래 정해진 화면 비율로 자동으로 재생됩니다.

<param name="AutoStart" value="true">
: 저번 시간에 알아보았던 autostart와 같은 기능입니다.
false로 해놓으면 재생 버튼을 클릭해야 플레이 됩니다.

<param name="ShowControls" value="true">
: 이것 역시 저번 시간에 알아보았던 hidden 태그와 같은 기능으로 false로 지정시 미디어 콘트롤러가 보이지 않게 됩니다.

<param name="ShowAudioControls" value="true">
: 이 기능은 미디어 플레이어 우측의 볼륨 조절기능과 음소거 기능을 제어하는 기능입니다.
false로 지정하시면 볼륨 조정과 음소거 기능이 사라집니다.

<param name="ShowDisplay" value="false">
: 이 부분은 콘트롤러 아래에 음악이나 동영상 파일의 정보를 출력할 것인가 말것인가를 제어하는 부분입니다.
true로 해 놓을 경우 아래에 쇼, 클립, 만든이, 저작권 등의 기능이 출력됩니다.

<param name="ShowTracker" value="true">
: 재생 구간을 보여주는, 재생이 되면서 옆으로 움직이는 부분, 트랙커를 제어하는 기능입니다.
이 부분을 움직여서 원하는 부분만을 들을 수도 있지요.
false로 지정시 트랙커가 사라집니다.

<param name="ShowStatusBar" value="true">
: 컨트롤러 아래에 버퍼링과 남은시간/총시간 을 보여주는 한줄의 정보창을 제어하는 부분입니다.
false로 해놓으면 보이지 않습니다.

<param name="EnableContextMenu" value="true">
: 앞서도 언급했던 마우스 클릭시 나타나는 메뉴를 제어하는 기능입니다.
false로 해놓으면 우측 클릭을 해도 등록정보 등이 있는 메뉴가 나타나지 않습니다.

<param name="ShowPositionControls" value="true">
: 이 부분은 컨트롤러의 뒤로 가기(▶▶), 앞으로 가기(◀◀) 등의 버튼을 제어하는 부분입니다.
false로 해놓으면 재생 버튼과 정지 버튼만 출력됩니다.

<param name="ShowCaptioning" value="false">
: 동영상 등의 자막이 있을때 이를 제어하는 기능입니다.
음악 파일 재생시는 false로 해놓으시면 됩니다.

<param name="AutoRewind" value="true">
: 재생이 끝났을 경우 이 부분을 true로 해놓으면 자동으로 처음으로 돌아갑니다.
false로 해놓으면 끝부분에 그대로 머물러 있습니다.

<param name="PlayCount" value="1">
: 저번 시간에 배웠던 loop와 같은 기능으로 플레이 반복 횟수를 결정합니다.
'-1'로 해놓으면 무한 반복 됩니다.

<param name="Volume" value="0">
: 재생시 자동으로 설정할 볼륨 량을 지정해주는 부분입니다.
보기와 같이 0으로 해놓으면 최대 볼륨으로 재생됩니다.



자! 여기까지 자주 사용하는 param 기능에 대해서 살펴보았습니다.
위의 예시를 메모장에 붙여놓고 HTML 파일로 만들어 놓고, 하나씩 고쳐가며 기능을 살펴보시면 더욱 이해가 빠를 것이라 생각됩니다.
Posted by 알 수 없는 사용자
,
select ...........................................................

여러 항목중에 고를 수 있도록 한 목록 상자로 많이 사용된다. 보통 콤보 상자라고 많이 알고 있더라구.



select (HTML)
 
<select name="addr">
<option value="서울 마포구 드래곤">서울 마포구 드래곤아이
<option value="경기 군포시 드래곤">경기 군포시 드래곤아이
<option value="강원 원주시 드래곤">강원 원주시 드래곤아이
</select>
select 태그에서 size=정수 속성으로 보여줄 리스트수를 설정할 수 있다.
select 태그에서 multiple 속성을 설정하여 여러개 선택을 할 수 있다.
option 태그에서 selected 속성으로 디폴트 선택을 줄 수 있다.


select 객체 속성
name 태그 name 속성값 (addr)
length 목록의 개수 (3)
selectedIndex 선택한 목록 인덱스 번호 (0 부터)
options 목록상자 값을 배열로 (익스플로러 지원안됨)
options[0].text 0번째 목록의 문자 (서울 마포구 드래곤아이)
options[0].value 0번째 목록의 value (서울 마포구 드래곤)
options[0].selected 0번째 목록이 선택되면 true 아니면 false
options[0].defaultSelected 0번째 목록이 기본으로 선택되어 있는지


select 객체 이벤트핸들러
onChange 현재 선택된 목록이 아닌 다른 목록을 선택시



select 객체 예제 : 주소 검색 결과를 선택하기
  <script language="javascript">
function Check(){

i =document.form1.addr.selectedIndex // 선택항목의 인덱스 번호
if (i<0) {
alert("주소를 선택!")
return
}

var address1 = document.form1.addr.options[i].value // 선택항목 value
var address2 = document.form1.addr.options[i].text // 선택항목 text
alert(address1) // value 확인
alert(address2) // text 확인
}
</script>

<form name="form1" action="ok.asp" method="post">
<select name="addr" size="3">
<option value="서울 마포구 드래곤">서울 마포구 드래곤아이
<option value="경기 군포시 드래곤">경기 군포시 드래곤아이
<option value="강원 원주시 드래곤">강원 원주시 드래곤아이
</select>
<input type="button" value="등록" onClick="Check()">
</form>

document.form1.addr.selectedIndex 선택항목의 인덱스 번호
==> 선택이 안되면 -1을 리턴
document.form1.addr.options[i].value 선택항목 value
Posted by 알 수 없는 사용자
,
프레임 사용자가 한번쯤은 겪어봤을 고통(?)을 말끔히 해결해드릴만한 것이라 생각됩니다.

흔희 프레임을 사용하다보면 어떤 작업을 한 후 혹은 하다보면 리로드(새로고침)을 하게 됩니다.

현제 페이지가 어디든 프레임의 성격상 프레임셋에서 지정한 초기화면으로 이동하기 마련이죠.

이를 제어하여 리로드를 해도 그 상태 그대로 유지하고픈 사용자들이 많기에 도움이 되리라 봅니다.

아래 소스를 이용하시면 무난하게 처리됩니다.

index.html 또는 index.php파일 제일 상단에 꼬옥 위치시키세요!

사용 방법은 프레임셋파일에 적용하시면 됩니다.


<?
$LastModified = gmdate("D d M Y H:i:s", filemtime($HTTP_SERVER_VARS[SCRIPT_FILENAME]));
header("Last-Modified: $LastModified GMT");
header("ETag: \"$LastModified\"");
?>
Posted by 알 수 없는 사용자
,
①인터넷을 검색하다 앞화면으로 가고 싶다면....
마우스를 사용하셨죠. 위에 메뉴중 마우스로 뒤로가기... 이제 그만 하세요...
자판에 ◀━를 눌러 보세요.(엔터키 위에 있는건 알죠. back키 아시죠.)

②F1.... 인터넷 도움말이 나오네요....
인터넷에 대해 이제쉽게 도움받으세요.

③F3.... 파일찾기가 나오네요...
찾고 싶은 파일...이제 쉽게 찾으세요.

④F4.... 주소창이 나오네요...
주소를 고를 때도 자판의 화살표로 이동하세요.
아래로 위로 잘 골라서엔터키를 치시면, 이동하고 싶은 주소로 이동합니다.

⑤F5.... 새로고침.... 이 되네요....
검색하다 빨리 새로 고치고 싶을 때 마우스 필요없어요.

⑥F6.... 주소창에 블럭이 설정됩니다.
이기능은 주소창에 저장 되어있지 않는 새로운 주소로 이동 할때 사용하는데,
F6키를 누르면 블럭이 설정되고 이때 Delete키를 치면 주소창이 지워집니다.
그리고 새로운 주소를 직접치고 엔터를 치세요. 새로운 주소로 이동되죠.

⑦F11.....화면을 넓게 보고 싶을때 사용하세요.
위, 아래에 메뉴창이 사라지면서 화면이 아주 넓어집니다.

⑧Ctrl + N......현재 페이지가 하나더 생기네요.
로그인까지 되어서....

⑨Ctrl + W.......에구 열심히 하고 있는 현재 페이지가 없어지고 말았네....
저장해야 되는거는 사용하지 마시고요... 다른사람이 보면 안되는거....갑자기...누가오면 ....
보던 페이지가 사라지니까..... 뭐했는지 모르겠죠.....

**Alt 키와 Ctrl키의 사용**

1. 웹 페이지의 앞,뒤 전환은
'Alt 키 + 왼쪽/오른쪽 화살표 키'를 함께 누르면 됩니다.
바로 앞에 보았던 페이지나 다음 페이지로 쉽게 전환이 가능하죠.

2. 가끔 인터넷 홈페이지의 그림이 지저분하게 겹쳐 보일 때가 있죠.

이때는 'Ctrl'키 + R키'를 눌러주면 지금보고 있는
페이지의 내용을 다시 읽어주게 됩니다.

3. 여러 홈페이지를 돌아다니다 마음에 드는 홈페이지가 있으면
북마크 (Book-mark) 기능을 사용하죠.
이런 경우 'Ctrl + D'키를 누르면 쉽게 해결이 됩니다.

4. 그럼 저장된 북마크를(즐겨찾기 편집창) 편집하거나 정리할 때...?
'Ctrl 키 + B 키'를 사용하면 바로 북마크 폴더로 이동됩니다.

5. 현재의 창을 그대로 나두고 또 하나의 새로운 창을 만들 때
'Ctrl 키 + N 키'를 사용해 보세요. 파일을 다운 받거나 서버로 부터
응답이 늦어질 때, 이 단축키를 열어 다른 링크 사이트로 접근이 가능합니다.

6. 현재 열려있는 창을 닫으려면 'Alt 키 + F4 키'죠.
만약 바탕화면에서 이 단축키를 사용한다면 바로 시스템 종료 창이 나타납니다.

7. 웹 사이트의 주소창만 띄워 새로운 사이트를 열려면
'Ctrl 키 + O 키'를 사용하면 됩니다. 이것도 고수가 자주 사용하는 기능입니다.

 

위에서 설명한 것 중 많이 사용하는것을 하나씩 직접 해보세요.

Alt + <- (왼쪽 화살표) ▶ 이전 페이지로
Alt + -> (오른쪽 화살표) ▶ 다음 페이지로
Alt + F4 ▶ 열려있는 창 닫기(Ctrl + W 와 비슷)
Ctrl + R ▶ 문서 다시 읽어 들임
Ctrl + B ▶ 북마크(즐겨기 편집창) 폴더로 이동
Ctrl + D ▶ 북마크에 추가
Ctrl + N ▶ 새로운 창 생김
Ctrl + O ▶ 새로운 주소 입력창 열기


▷마우스 볼과 같은 기능◁

↑ ↓ 키는 볼을 굴리지 않아도 현재창을 위, 아래로 쉽게 움직일 수 있음.


기 타

F10 : 프로그램에서 메뉴 모음을 활성화 
Alt + 메뉴의 밑줄 문자 누르기 : 메뉴의 해당 명령을 수행 
Ctrl + F4 : 프로그램의 현재 창 닫기 
Alt + F4 : 현재 창을 닫거나 프로그램 종료 
Ctrl + C : 복사 
Ctrl + X : 잘라내기 
Ctrl + V : 붙여 넣기 
Alt + 스페이스바 : 현재 창의 시스템 메뉴 표시 
Shift + F10 : 선택한 항목의바로 가기 메뉴 표시 
Ctrl + Esc : '시작'메뉴 표시 
Alt + - : 프로그램의 시스템 메뉴 표시 
Alt + Tab : 다른 창으로 전환 
Ctrl + Z : 실행 취소 
윈도 창에서 Alt + Enter : 창의 크기를 크게, 작게 
일반 키보드 바로 가기
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Ctrl+C (복사)
Ctrl+X (잘라내기)
Ctrl+V (붙여넣기)
Ctrl+Z (실행 취소)
Delete (삭제)
Ctrl + 휠마우스 위로, 또는 아래로 (위로 : 텍스트 글꼴 확대, 아래로:글꼴 작게)
Shift + 휠마우스 위로, 또는 아래로...
(위로 : 웹페이지 앞으로, 아래로:웹페이지 뒤로)
Alt + 왼쪽화살표 (웹사이트 이전페이지)
Alt + 오른쪽화살표 (사이트 앞으로가기)
Shift+Delete (선택한 항목을 휴지통에 넣지 않고 영구적으로 삭제)
항목을 끌면서 Ctrl 키 누름 (선택한 항목을 복사)
항목을 끌면서 Ctrl+Shift 누름 (선택한 항목의 바로 가기를 만듬)
F2 키 (선택한 항목의 이름 바꾸기)
Ctrl+오른쪽 화살표 (삽입 지점을 다음 단어의 처음으로 이동)
Ctrl+왼쪽 화살표 (삽입 지점을 이전 단어의 처음으로 이동)
Ctrl+아래쪽 화살표 (삽입 지점을 다음 단락의 처음으로 이동)
Ctrl+위쪽 화살표 (삽입 지점을 이전 단락의 처음으로 이동)
화살표 키 중 하나와 함께 Ctrl+Shift 누름 (텍스트 블록 강조 표시)
화살표 키 중 하나와 Shift 키 누름
(창이나 바탕 화면에서 둘 이상의 항목을 선택하거나 문서에서 텍스트를 선택)
Ctrl+A (모두 선택)
F3 키 (파일 또는 폴더 찾기)
Alt+Enter (선택한 항목의 등록 정보 보기)
Alt+F4 (활성 항목을 닫거나 활성 프로그램을 종료)
Alt+Enter (선택한 개체의 등록 정보 표시)
Alt+스페이스바 (활성 창의 바로 가기 메뉴 열기)
Ctrl+F4 (여러 문서를 동시에 열 수 있는 프로그램에서 활성 문서 닫기)
Alt+Tab (열린 항목 사이에서 전환)
Alt+Esc (연 순서대로 항목을 순환)
F6 키 (창이나 바탕 화면의 화면 요소를 순환)
F4 키 (내 컴퓨터나 Windows 탐색기에서 주소 표시줄 목록 표시)
Shift+F10 (선택한 항목의 바로 가기 메뉴 표시)
Alt+스페이스바 (활성 창의 시스템 메뉴 표시)
Ctrl+Esc (시작 메뉴 표시)
Alt+메뉴 이름에서 밑줄이 표시된 문자 (해당 메뉴 표시)
명령 이름이나 열린 메뉴 이름에서 밑줄이 표시된 문자 (해당 명령 수행)
F10 키 (활성 프로그램의 메뉴 모음 활성화)
오른쪽 화살표 키 (오른쪽 방향의 다음 메뉴를 열거나 하위 메뉴 열기)
왼쪽 화살표 키 (왼쪽 방향의 다음 메뉴를 열거나 하위 메뉴 닫기)
F5 키 (활성 창 업데이트)
백스페이스 키 (내 컴퓨터나 Windows 탐색기에서 한 레벨 위의 폴더 보기)
Esc 키 (현재 작업 취소)
CD-ROM 드라이브에 CD-ROM을 넣을 때 Shift 키 누름
(CD-ROM이 자동으로 재생되지 않게 함)
Posted by 알 수 없는 사용자
,
공식 다운로드 센터 : http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&Lang=Korean&P5_Language=Korean&ogn=KR-gntray_dl_getflashplayer_kr

일단 설치해도 안된다는게 문제....


http://nacarat.tistory.com/attachment/ck15.exe <-이것으로 삭제~


http://nacarat.tistory.com/attachment/ck16.exe

http://nacarat.tistory.com/attachment/ck14.msi

2개 중에서 한개를 다운받아서 설치~


하면 보통 사람[?]들은 됩니다.


그래도 안된다?


Flash Player 8을 다시 설치~


설치는 여기에서 가능할지도... 네이버 카페에 있더라구요 - ㅁ-~

http://mfiles.naver.net/984bad74623854e7c9a2/data24/2006/9/11/18/install_flash_player_8.msi 


1. 일단 킨건 다 끄자. 메신저 같은데에도 있을지도 모르니깐 후다닥 다 끄자!

   닥치고 재부팅[?]도 괜찮을지도...?

 

2. Downloaded Program Files 폴더를 찾아내세요~

보통 XP 나 98일경우에는 밑의 경로

C:\WINDOWS\Downloaded Program Files

  

3. 파일 리스트 중에서 Shockwave Flash Object 파일을 찾아 오른쪽 클릭으로 삭제~

 

4. 제거가 되었다면 브라우저를 다시 키고..

 

5. 익스플로러를 실행하여 플래쉬가 있는 페이지와 접촉하면 알아서 다시 설치가 됩니다~

 

 


안된다면 Flash Player7을 설치한다.

 

이 방법은 해결방법1)을 해도 컴퓨터가 난리를 치면 하는겁니다.

 

1. 위에서의 1~3를 다시 한다. 반드시 3번인 삭제 과정 까지는 필수.. 더 이상해도 안된다는~

   이렇게 안해놓으면 남은 파일때문에 자동으로 8버젼이 다시 깔리는 불상사가 생겨요~

 

 http://download.macromedia.com/pub/flash/ts/flash7/updated/win/flashplayerupdater_kr.exe여기에서 7.0버젼을 다운하면 됩니다~

 

3. 설치 이후 웹페이지를 열었을 때  8.0으로 업데이트를 하겠냐고 물을 경우 업데이트를 하지 않음을 선택하시면 됩니다.


 

 

자 보통보다 심각한 사람이라면 여기서 끝! 이지만!

 

하지만 저처럼 더 심각한 경우에는 8.0설치 도중에 Flash mx 2004를 다운받아라고 하는데....

 

이걸 또 할려면 퀵타임이 필요... 아 이런 젠장할

 

퀵타임 6.0이상 지원인거 같은데 인터넷에서 무난하게 다운가능..

 

설치에는 다 무시하고 다음만 연타....

 

 

그리고 이제 대망의 mx 2004... 이런 젠장 Flash player때문에 뭐하는 짓이야 나는

 

일단 인터넷에서 구합시다 플래시365라는 사이트의 질문에서 mx 2004 구하는 사람의 글에 있다고 하더군요

 

플래시365가 자작 플래시게임으로 한몫하는 곳이니까요..

 

여하튼 구합시다~ 전 하나뽀쓰에서 다운받았답니다.

 

설치하고.. 나중에 할일없으면 플래시나 만들고 노세요.. 한글판 있으니까..

 

설치하면서 설렁설렁 받고 이제 드디어 다시 위로가서 설치.. 하고 안돼면 때리치워.. 에씨...

펌:http://blog.naver.com/godrl7979?Redirect=Log&logNo=50024852355

Posted by 알 수 없는 사용자
,
캐릭터셋이 euc-kr 이라 전제하고

$temp_var = "a-_fa(#)^$*F&3i4-0한2글abc3국민 az?/a*&韓お手?ご迷惑をお掛けしました、";
$cnt = strlen($temp_var);
$array = array();
for($i = 0; $i < $cnt; $i++)
{
    if(ord($temp_var[$i]) < 128)
    {
        $array[] = $temp_var[$i];
    }
    else{
        $array[] = substr($temp_var, $i, 2);
        $i++;
    }
}

array
  0 => string 'a' (length=1)
  1 => string '-' (length=1)
  2 => string '_' (length=1)
  3 => string 'f' (length=1)
  4 => string 'a' (length=1)
  5 => string '(' (length=1)
  6 => string '#' (length=1)
  7 => string ')' (length=1)
  8 => string '^' (length=1)
  9 => string '$' (length=1)
  10 => string '*' (length=1)
  11 => string 'F' (length=1)
  12 => string '&' (length=1)
  13 => string '3' (length=1)
  14 => string 'i' (length=1)
  15 => string '4' (length=1)
  16 => string '-' (length=1)
  17 => string '0' (length=1)
  18 => string '한' (length=2)
  19 => string '2' (length=1)
  20 => string '글' (length=2)
  21 => string 'a' (length=1)
  22 => string 'b' (length=1)
  23 => string 'c' (length=1)
  24 => string '3' (length=1)
  25 => string '국' (length=2)
  26 => string '민' (length=2)
  27 => string ' ' (length=1)
  28 => string 'a' (length=1)
  29 => string 'z' (length=1)
  30 => string '?' (length=1)
  31 => string '/' (length=1)
  32 => string 'a' (length=1)
  33 => string '*' (length=1)
  34 => string '&' (length=1)
  35 => string '韓' (length=2)
  36 => string 'お' (length=2)
  37 => string '手' (length=2)
  38 => string '?' (length=1)
  39 => string 'ご' (length=2)
  40 => string '迷' (length=2)
  41 => string '惑' (length=2)
  42 => string 'を' (length=2)
  43 => string 'お' (length=2)
  44 => string '掛' (length=2)
  45 => string 'け' (length=2)
  46 => string 'し' (length=2)
  47 => string 'ま' (length=2)
  48 => string 'し' (length=2)
  49 => string 'た' (length=2)
  50 => string '、' (length=2)
Posted by 알 수 없는 사용자
,
활용도는 약 0.001% 일지도 모릅니다.

이왕 온김에 홈피 광고도 하고 ㅎㅎ

http://www.mibany.com/ezbtn/

소스가 길어 좀 길어서 ....

일단 먼저 링크 페이지에 동작되는 샘플을 달았습니다.

테스트 해보셔도 개안을듯 합니다.

뭐 차후 구글처럼 Chart나 해봐야 할까나????

class EZBtn {
    //변환할 원본 파일
    var $Files = null;
    //이미지 정보
    var $Imgs = array();
    //변환할 이미지 정보
    var $Config = array();
    var $IsSave = false;
    var $UseUTF8 = false;

    //저장 이미지 경로
    var $Path = "Img";
    //변환 종류
    var $Mode = "4C";        //4C, 2W, 2H
    //적용 폰트
    var $UseFont = "Font/sandoldana_m.ttf";

    //원본에서 잘라 사용할 사이즈 (픽셀)
    var $CutSize = 8;

    //이미지 정보를 담습니다.
    function SetImg($Files) {
        $this->Files = $Files;
        $this->Imgs = array();
        if(is_array($Files)) foreach($Files as $No=>$Name) $this->Imgs[$No] = $this->GetImgInfo($Name);
        else $this->Imgs = $this->GetImgInfo($Files);
    }
    //이미지 정보를 구합니다.
    function GetImgInfo($FileName) {
        $ImgInfo['Name'] = $FileName;
        $ImgInfo['File'] = $this->GetNameExt($FileName);
        list($ImgInfo['Width'], $ImgInfo['Height'], $ImgInfo['Type'], $ImgInfo['Attr']) = getimagesize($FileName);
        return $ImgInfo;
    }
    //파일명와 확장자를 분리합니다.
    function GetNameExt($FileName) {
        preg_match('/(.*)\.([^\.]+)$/', $FileName, $Match);
        $File['name'] = $Match[1];
        $File['ext'] = strtolower($Match[2]);
        return $File;
    }
    //버턴을 생성합니다.
    function MakeBtnImg($Files, $Text='') {
        $this->SetImg($Files);
        $_func = sprintf("CreateButton_%s", $this->Mode);
        if(method_exists($this, $_func)) {
            if(is_array($this->Files)) {
                foreach($this->Imgs as $Img) {
                    $Im = $this->GetImg($Img);
                    if($Im) {
                        if($this->IsSave) $this->SaveImg($Img, $this->$_func($Img, $Im), 'result');
                        else $this->ImgView($Img, $this->$_func($Img, $Im));
                    }
                }
            }
            else {
                $Im = $this->GetImg($this->Imgs);
                if($Im) {
                    $SaveIm = $this->$_func($this->Imgs, $Im);
                    if($Text) $SaveIm = $this->SetText($SaveIm, $Text);
                    if($this->IsSave) $this->SaveImg($this->Imgs, $SaveIm, 'result');
                    else $this->ImgView($this->Imgs, $SaveIm);
                }
            }
        }
    }
    //16진수 color를 RGB형태로 변환한다.
    function HEX2RGB($Color) {
        $String = str_replace("#","",$Color);
        $RGB[] = hexdec(substr($String,0,2));        //red
        $RGB[] = hexdec(substr($String,2,2));        //green
        $RGB[] = hexdec(substr($String,4,2));        //blue
        return $RGB;
    }
    //버턴위에 글자를 입힙니다.
    function SetText($Im, $Text) {
        if($this->UseUTF8) $Text = iconv("EUC-KR", "UTF-8", $Text);
        $size = ($this->Config['FontSize'])?$this->Config['FontSize']:16;
        $top = ($this->Config['FontTop'])?$this->Config['FontTop']:25;
        $left = ($this->Config['FontLeft'])?$this->Config['FontLeft']:10;
        //기울기 각도
        $angle = ($this->Config['FontAngle'])?$this->Config['FontAngle']:0;
        $color = ($this->Config['FontColor'])?$this->HEX2RGB($this->Config['FontColor']):array(60, 60, 60);
        $TextColor = imagecolorallocate($Im, $color[0], $color[1], $color[2]);
        imagettftext($Im, $size, $angle, $left, $top, $TextColor, $this->UseFont, $Text);
        return $Im;
    }
    //버턴으로 만들 이미지를 생성합니다.
    function GetImg($Img) {
        if($Img['Type']<1 && $Img['Type'] > 3) return false;
        if($Img['Type']==1) $Im = imagecreatefromgif($Img['Name']);
        else if($Img['Type']==2) $Im = imagecreatefromjpeg($Img['Name']);
        else if($Img['Type']==3) $Im = imagecreatefrompng($Img['Name']);
        return $Im;
    }
    //원본 이미지 4개의 귀퉁이를 잘라 버턴으로 만듭니다.
    function CreateButton_4C($Img, $Im) {
        $Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
        $Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
        $SaveIm = imagecreatetruecolor($Width, $Height);

        $PosWidth = $Img['Width']-$this->CutSize;
        $PosHeight = $Img['Height']-$this->CutSize;
        $PosWidth2 = $Img['Width']-$this->CutSize*2;
        $PosHeight2 = $Img['Height']-$this->CutSize*2;

        $RePosWidth = $Width-$this->CutSize;
        $RePosHeight = $Height-$this->CutSize;
        $RePosWidth2 = $Width-$this->CutSize*2;
        $RePosHeight2 = $Height-$this->CutSize*2;

        //1
        imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $this->CutSize);
        //2
        imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $this->CutSize);
        //3
        imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $this->CutSize, $this->CutSize);
        //4
        imagecopy($SaveIm, $Im, $RePosWidth, $RePosHeight, $PosWidth, $PosHeight, $this->CutSize, $this->CutSize);
        //상단가운데
        imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
        //하단가운데
        imagecopyresampled($SaveIm, $Im, $this->CutSize, $RePosHeight, $this->CutSize, $PosHeight, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
        //왼쪽가운데
        imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
        //오른쪽가운데
        imagecopyresampled($SaveIm, $Im, $RePosWidth, $this->CutSize, $PosWidth, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
        //가운데
        imagecopyresampled($SaveIm, $Im, $this->CutSize, $this->CutSize, $this->CutSize, $this->CutSize, $RePosWidth2, $RePosHeight2, $this->CutSize, $this->CutSize);
        imagedestroy($Im);
        return $SaveIm ;
    }
    //원본 이미지 좌우양쪽을 잘라 버턴으로 만듭니다.
    function CreateButton_2W($Img, $Im) {
        $Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
        $Height = $Img['Height'];
        $SaveIm = imagecreatetruecolor($Width, $Height);

        $PosWidth = $Img['Width']-$this->CutSize;
        $PosHeight = $Img['Height']-$this->CutSize;
        $PosWidth2 = $Img['Width']-$this->CutSize*2;
        $PosHeight2 = $Img['Height']-$this->CutSize*2;

        $RePosWidth = $Width-$this->CutSize;
        $RePosHeight = $Height-$this->CutSize;
        $RePosWidth2 = $Width-$this->CutSize*2;
        $RePosHeight2 = $Height-$this->CutSize*2;

        //왼쪽
        imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $Img['Height']);
        //오른쪽
        imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $Img['Height']);
        //가운데
        imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $Img['Height'], $this->CutSize, $Img['Height']);
        imagedestroy($Im);
        return $SaveIm ;
    }
    //원본 이미지 상하양쪽을 잘라 버턴으로 만듭니다.
    function CreateButton_2H($Img, $Im) {
        $Width = $Img['Width'];
        $Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
        $SaveIm = imagecreatetruecolor($Width, $Height);

        $PosWidth = $Img['Width']-$this->CutSize;
        $PosHeight = $Img['Height']-$this->CutSize;
        $PosWidth2 = $Img['Width']-$this->CutSize*2;
        $PosHeight2 = $Img['Height']-$this->CutSize*2;

        $RePosWidth = $Width-$this->CutSize;
        $RePosHeight = $Height-$this->CutSize;
        $RePosWidth2 = $Width-$this->CutSize*2;
        $RePosHeight2 = $Height-$this->CutSize*2;

        //상단
        imagecopy($SaveIm, $Im, 0, 0, 0, 0, $Img['Width'], $this->CutSize);
        //하단
        imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $Img['Width'], $this->CutSize);
        //가운데
        imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $Img['Width'], $RePosHeight2, $Img['Width'], $this->CutSize);
        imagedestroy($Im);
        return $SaveIm;
    }
    //만든 이미지를 저장합니다.
    function SaveImg($Img, $SaveIm, $Status) {
        $SaveFileName = sprintf("%s/%s_%s.%s", $this->Path, $Img['File']['name'], $Status, $Img['File']['ext']);
        if($Img['Type']==1) imagegif($SaveIm, $SaveFileName);
        else if($Img['Type']==2) imagejpeg($SaveIm, $SaveFileName, 100);
        else if($Img['Type']==3) imagepng($SaveIm, $SaveFileName);
        // 메모리에 있는 그림 삭제
        imagedestroy($SaveIm);
    }
    //resource 에 담긴 이미지를 봅니다.
    function ImgView($Img, $SaveIm) {
        if($Img['Type']==1) imagegif($SaveIm);
        else if($Img['Type']==2) imagejpeg($SaveIm, 100);
        else if($Img['Type']==3) imagepng($SaveIm);
        // 메모리에 있는 그림 삭제
        imagedestroy($SaveIm);
    }
    //저장된 이미지를 봅니다.
    function SaveImgView($FileName) {
        $NameExt = $this->GetNameExt($FileName);
        $FileSize = filesize($FileName);
        if(eregi("(MSIE 5.5|MSIE 6.0|MSIE 7.0)", $_SERVER['HTTP_USER_AGENT'])) { // 브라우져 구분
            Header("Content-Transfer-Encoding: binary");
        } else {
            Header("Content-Description: PHP3 Generated Data");
        }
        Header(sprintf("Content-Type: %s", $NameExt['ext']));
        Header(sprintf("Content-Disposition: attachment; filename=%s", $FileName));
        Header(sprintf("Content-Length: %s", $FileSize));
        Header("Pragma: no-cache");
        Header("Expires: 0");
        $fp = fopen($FileName, "r");
        if(!fpassthru($fp)) fclose($fp);
    }
}
Posted by 알 수 없는 사용자
,

http://davidwalsh.name/javascript-shorthand-if-else-examples
-------------------------------------------------------
Basic True / False Declaration
$is_admin = ($user['permissions'] == 'admin' ? true : false);
-------------------------------------------------------
Conditional Welcome Message
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
-------------------------------------------------------
Conditional Items Message
echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
-------------------------------------------------------
Conditional Error Reporting Level
error_reporting($WEBSITE_IS_LIVE ? 0 : E_STRICT);
-------------------------------------------------------
Conditional Basepath
echo '<base href="http'.($PAGE_IS_SECURE ? 's' : '').'://mydomain.com" />';
-------------------------------------------------------
Nested PHP Shorthand
echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );
-------------------------------------------------------
Leap Year Check
$is_leap_year = ((($year % 4) == 0) && ((($year % 100) != 0) || (($year %400) == 0)));
-------------------------------------------------------
Conditional PHP Redirect
header('Location: '.($valid_login ? '/members/index.php' : 'login.php?errors=1')); exit();
-------------------------------------------------------
Posted by 알 수 없는 사용자
,
DB 억세스가 많은 인덱스화일을 html로 저장했다가 보여주는 방식의 인덱스화일 캐쉬는 팁텍에서도 여러번 거론 되었던 방법이고 스쿨에서도 이미 사용하고 있는 방법입니다만...

비록 뒷북일지라도...

--------------------------------------------------------------------------------------------------------

function make_cache($file,$script,$duration=60) {
    $limit=time()-$duration*60;
    if(!file_exists($file) || filemtime($file)<$limit) {
        $command="wget --user-agent=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) \" http://".$_SERVER["HTTP_HOST"].$script." -O ".$file;
        exec($command);
    }
    if(file_exists($file))  @include $file;
}

function new_cache($file,$script) {
        $command="wget --user-agent=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) \" http://".$_SERVER["HTTP_HOST"].$script." -O ".$file;
        exec($command);
}

--------------------------------------------------------------------------------------------------------

크론을 돌리지 않고도 인덱스화일을 통채로 저장하는 것보다는 몇조각으로 나눠서 저장하는 방법을 사용하고 있습니다.

사용법은
<? include "head.php"; ?>
<tr>
<td width=545 valign=top>
<table valign=top cellpadding=0 cellspacing=0 border=0 width=100%>
<?
$inc=$_SERVER[DOCUMENT_ROOT]."/layout/cache/center.html";
$script="/layout/center.inc" ;
make_cache($inc,$script,5);
?>
</table></td>
<td width=8></td>
<td width=245 valign=top><table valign=top cellpadding=0 cellspacing=0 border=0>
<?
$inc=$_SERVER[DOCUMENT_ROOT]."/layout/cache/right.html";
$script="/layout/right.inc" ;
make_cache($inc,$script,10);
?>
</table></td></tr>
<? include "foot.inc"; ?>

페이지를 몇개로 분할한 다음 각부분을 별도로 캐쉬할 수 있습니다.
시간은 분단위입니다.
하지만 스쿨처럼 글을 쓰고 나서도 초기화면에 나타나지않으면 일종의 불안감을 조성하는 경향이 있어서
글이나 댓글을 입력하는 부분에

$inc=$_SERVER[DOCUMENT_ROOT]."/banner/cache/body.html";
$script="/body.inc" ;
new_cache($inc,$script);

를 추가해주면 즉시 반영이 됩니다.


if(file_exists($file))  @include $file; 부분을
if(file_exists($file))  return file_get_contents($file); 했더니 HTML코드를 소스채 뿌려버리는군요.


include 하는쪽을 캐쉬하는데 변수에따라 달라지는 부분 이라면?
<?echo "<? if(\$member[level]==1) {?> 어쩌구 저쩌구 <? } ?>";?>
하면 php 스크립트까지 만들어집니다

회원부분과 비회원부분을 따로 캐쉬하는 방법도 있습니다.
<?
if($member[level]>7) {
$inc="/home/http/htdocs/neofinetia/layout/hit/out_member.html";
$script="/layout/today_out_member.php" ;
} else {
$inc="/home/http/htdocs/neofinetia/layout/hit/member.html";
$script="/layout/today_in_member.php" ;
}
@make_cache($inc,$script,60);
?>

출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=58151&page=1
Posted by 알 수 없는 사용자
,
출력을 버퍼링하는 ob_start()에 대해서 팁텍에서도 여러번 논의가 있었던 것으로 기억합니다.
특히 ob_start("ob_gzhandler");
를 이용하면 테이터를 gzip 압축을 해서 훨씬 빨라질거라는 이야기도 있었고...

저역시 ob_start("ob_gzhandler"); 해주고 압축이 잘되고 있다고 믿어왔습니다.

근데 우연히 http://www.whatsmyip.org/mod_gzip_test/ 에서 테스트를 해보니까 압축이 안되어있다고 나오더군요.
한참을 뒤지다가 Apache/1 에서는 별도로 mod_gzip을 설정해야한다는 사실을 알았습니다.


화일을 다운로드하고 설정하는 방법은 http://schroepl.net/projekte/mod_gzip/install.htm 에 자세히 나와있습니다.
소스를 다운 받아서 압축을 풀고
make
make install 하면 됩니다.

make중 에러가 난다면 Makefile 화일을 열어서
APXS=your_apxs_pathname 부분을 수정해주셔야합니다.

설치가 되면
php.ini 화일에
LoadModule gzip_module          libexec/mod_gzip.so

AddModule mod_gzip.c

 <IfModule mod_gzip.c>
  mod_gzip_on                  Yes
  mod_gzip_can_negotiate        Yes
  mod_gzip_static_suffix        .gz
  AddEncoding              gzip .gz
  mod_gzip_update_static        No
  mod_gzip_command_version      '/mod_gzip_status'
  mod_gzip_keep_workfiles      No
  mod_gzip_minimum_file_size    500
  mod_gzip_maximum_file_size    500000
  mod_gzip_maximum_inmem_size  60000
  mod_gzip_min_http            1000
  mod_gzip_handle_methods        GET POST
  mod_gzip_item_exclude        reqheader  "User-agent: Mozilla/4.0[678]"
  mod_gzip_item_include        file      \.html$
  mod_gzip_item_exclude        file      \.js$
  mod_gzip_item_exclude        file      \.css$
  mod_gzip_item_include        file      \.pl$
  mod_gzip_item_include        handler    ^cgi-script$
  mod_gzip_item_include        mime      ^text/html$
  mod_gzip_item_include        mime      ^text/plain$
  mod_gzip_item_include        mime      ^httpd/unix-directory$
  mod_gzip_dechunk              Yes
  LogFormat                    "%h %l %u %t \"%V %r\" %<s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n -< Out:%{mod_gzip_output_size}n = %{mod_gzip_compression_ratio}n pct." common_with_mod_gzip_info2
  CustomLog                    logs/mod_gzip.log common_with_mod_gzip_info2
  mod_gzip_add_header_count    Yes
  mod_gzip_send_vary            On
  </IfModule>

를 추가해줍니다.

아파치를 재가동하고
http://www.whatsmyip.org/mod_gzip_test/ 에서 다시 테스트를 해보니 드디어 제대로 압축이 된 것을 확인할 수 있었습니다.
apache 1.x 에서는 mod_gzip이 설정되고 페이지에 ob_start("ob_gzhandler"); 가 있어야 압축이 됩니다.
ob_start("ob_gzhandler");가 들어있지 않은 페이지는 압축이 일어나지 않습니다.


apache 2.x에서는
ob_start("ob_gzhandler");를 하면 페이지가 먹통이 됩니다.

아파치 2.x에서는 mod_deflate를 설정해주셔야합니다.
송효진님이 이미 한번 언급을 하셨더군요.

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=56751&sca=&sfl=wr_subject%7C%7Cwr_content&stx=mod_deflate&sop=and

송효진님처럼

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/css
하셔도 되고

<Location />
  <IfModule mod_deflate.c>
        SetOutputFilter DEFLATE
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4.0[678] no-gzip
        BrowserMatch bMSIE !no-gzip !gzip-only-text/html
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|rar|zip|gz|tar|exe)$ no-gz
  <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
  </IfModule>
  </IfModule>
</Location>

하셔도 됩니다.
2.x에서는 ob_start("ob_gzhandler"); 와 상관없이 모든 페이지에서 작동합니다.

apache 1.x에서 mod_gzip만 사용해도 압축할 수 있습니다. 설정파일에서 mod_gzip_item_include mime ^application/x-httpd-php만 지정하면 모든 php 파일이 압축되어 전달됩니다. 물론 다른 유형의 파일도 지정할 수 있습니다.
Posted by 알 수 없는 사용자
,
RB rbchart 플래시가 아닙니다. 스크립트로 작동..
 
5 단계
7 단계
4 단계
1 단계
6 단계
 
- 명칭 : rbchart Ver1.0

[ 라이센스 ]

1) 비상업적인 사이트에 대해서는 막대 클릭시 지금의 사이트에 링크로 접속이 가능해야 하며,
     onclick="func_rbchart_link();" style="cursor:hand;" 으로 func_rbchart_link(); 함수을
     타고 지금의 사이트( chart.php ) 로
     이동이 가능하게 링크가 걸려 있어야 합니다.

2) 상업적인 용도로 매매 및 판매로 이용 하실수 없습니다.

3) 상업적인 사이트에 사용하실수 없으며,
    상업적인 사이트에 이용하실시 위의 샘플의
     CopyRight rbchart Ver1.0 이미지 ( ) 가 링크로
     지금의 사이트( chart.php ) 가 되어
    챠트 아래에 표현되어야 합니다.

- 개발자 : 루지기 ( rujigi ), 벤지 ( bengi )

- 시간이 날때마다 계속 다른 Chart 및 기능을 만들어 올리도록 하겠습니다.

- 사용언어 : SCRIPT + HTML + CSS

- 샘플페이지 : chart.php

- 문의 게시판


<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=euc-kr'>
<style>
p, body, td, select, div, form, input, textarea, center, option, table, pre, blockquote {font-size:9pt; font-family:Verdana, 굴림, Gulim; letter-spacing:0px; COLOR: #333333; }
</style>
<title>RB rbchart</title>
</head>
<body>

  <table width="625" height="297" border="0" cellspacing="0" cellpadding="0" background="http://www.rujigi.com/dev/image/G_bg.gif">
  <tr>
    <td width="110"> </td>
    <td align="center" valign="bottom" style="padding-bottom:35px">
              <table width="81" border="0" cellspacing="0" cellpadding="0">
              <tr><td align="center" style="padding-right:8px;">5 단계</td></tr>            
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/01_top.png" width="81" height="15" /></td>
              </tr>
              <tr>
                <td background="http://www.rujigi.com/dev/image/01_mid_bg.png"><img src="http://www.rujigi.com/dev/image/01_mid.png" id=rbchart0 width="81" height="15" onclick="func_rbchart_link();" style="cursor:hand;"></td>
              </tr>
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/01_down.png" width="81" height="17" /></td>
              </tr>
              </table>
    </td>
    <td align="center" valign="bottom" style="padding-bottom:35px">
          	  <table width="81" border="0" cellspacing="0" cellpadding="0">
              <tr><td align="center" style="padding-right:8px;">7 단계</td></tr>            
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/02_top.png" width="81" height="15" /></td>
              </tr>
              <tr>
                <td background="http://www.rujigi.com/dev/image/02_mid_bg.png"><img src="http://www.rujigi.com/dev/image/02_mid.png" id=rbchart1 width="81" height="15" onclick="func_rbchart_link();" style="cursor:hand;"></td>
              </tr>
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/02_down.png" width="81" height="17" /></td>
              </tr>
              </table>
    </td>
    <td align="center" valign="bottom" style="padding-bottom:35px">
        	<table width="81" border="0" cellspacing="0" cellpadding="0">
              <tr><td align="center" style="padding-right:8px;">4 단계</td></tr>            
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/03_top.png" width="81" height="15" /></td>
              </tr>
              <tr>
                <td background="http://www.rujigi.com/dev/image/03_mid_bg.png"><img src="http://www.rujigi.com/dev/image/03_mid.png" id=rbchart2 width="81" height="15" onclick="func_rbchart_link();" style="cursor:hand;"></td>
              </tr>
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/03_down.png" width="81" height="17" /></td>
              </tr>
            </table>
    </td>
    <td align="center" valign="bottom" style="padding-bottom:35px">
        	  <table width="81" border="0" cellspacing="0" cellpadding="0">
              <tr><td align="center" style="padding-right:8px;">1 단계</td></tr>            
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/04_top.png" width="81" height="15" /></td>
              </tr>
              <tr>
                <td background="http://www.rujigi.com/dev/image/04_mid_bg.png"><img src="http://www.rujigi.com/dev/image/04_mid.png" id=rbchart3 width="81" height="15" onclick="func_rbchart_link();" style="cursor:hand;"></td>
              </tr>
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/04_down.png" width="81" height="17" /></td>
              </tr>
            </table>
    </td>
    <td align="center" valign="bottom" style="padding-bottom:35px">
              <table width="81" border="0" cellspacing="0" cellpadding="0">
              <tr><td align="center" style="padding-right:8px;">6 단계</td></tr>            
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/05_top.png" width="81" height="15" /></td>
              </tr>
              <tr>
                <td background="http://www.rujigi.com/dev/image/05_mid_bg.png"><img src="http://www.rujigi.com/dev/image/05_mid.png" id=rbchart4 width="81" height="15" onclick="func_rbchart_link();" style="cursor:hand;"></td>
              </tr>
              <tr>
                <td><img src="http://www.rujigi.com/dev/image/05_down.png" width="81" height="17" /></td>
              </tr>
              </table>
    </td>
    <td width="40"> </td>
  </tr>
  <tr><td colspan="7" align="right" height="20" valign="bottom" style="padding-right:20px;"><a href="http://www.rujigi.com/dev/chart.php"><img src="http://www.rujigi.com/dev/rbchart.gif" alt="" border="0"></a></td></tr>
  </table>
 

<table width="550">
<tr>
    <td>
       - 명칭 : rbchart Ver1.0
       <br><br> 
       [ 라이센스 ]
       <br><br>
       1) 비상업적인 사이트에 대해서는 막대 클릭시 지금의 사이트에 링크로 접속이 가능해야 하며, 
       <br>
             onclick="func_rbchart_link();" style="cursor:hand;" 으로 func_rbchart_link(); 함수을
       <br>
             타고 지금의 사이트( <a href="http://www.rujigi.com/dev/chart.php">chart.php</a> ) 로
       <br> 
             이동이 가능하게 링크가 걸려 있어야 합니다.
       <br><br>
       2) 상업적인 용도로 매매 및 판매로 이용 하실수 없습니다.
       <br><br>
       3) 상업적인 사이트에 사용하실수 없으며, 
       <br>
           상업적인 사이트에 이용하실시 위의 샘플의 
       <br>
           
       CopyRight rbchart Ver1.0 이미지 ( <img src="http://www.rujigi.com/dev/rbchart.gif" alt="" border="0"> ) 가 링크로 
       <br>
           
       지금의 사이트( <a href="http://www.rujigi.com/dev/chart.php">chart.php</a> ) 가 되어
       <br>       
           챠트 아래에 표현되어야 합니다.

       <br><br>
       - 개발자 : 루지기 ( rujigi ), 벤지 ( bengi )
       <br><br>
       - 시간이 날때마다 계속 다른 Chart 및 기능을 만들어 올리도록 하겠습니다.
       <br><br>
       - 사용언어 : SCRIPT + HTML + CSS
       <br><br>
       - 샘플페이지 : chart.php
       <br><br>       
       - <a href="http://www.rujigi.com/dev/http://www.rujigi.com/bbs/board.php?bo_table=rbchart">문의 게시판</a>
       
    </td>
</tr>
</table>

<script language=javascript>
var gstep = 3;
var gtime = 25;
var rbdata = new Array(125,175,100,25,150);
   
function rbcall(obj,ctlstep){
   sobj = eval(obj+".height");
   if( sobj < ctlstep){
      if(sobj+gstep > ctlstep) eval(obj+".height="+ctlstep);
      else eval(obj+".height="+obj+".height+gstep");
      setTimeout("rbcall('"+obj+"',"+ctlstep+")",gtime);
   }
}

for(i=0;i<rbdata.length;i++){
   obj =  eval("rbchart"+i+".height");
   if( obj < rbdata[i]) rbcall("rbchart"+i,rbdata[i]);
}

function func_rbchart_link() {
   location.href='chart.php';
}
// window.onload = 함수명;
</script>

  
</body>
</html>


Posted by 알 수 없는 사용자
,

사용법 : new Drag(AttributeName , DragAreaNode , DragDirection , ScalePercentageAttributeName);
 - AttributeName : Element 클릭시 Element.getAttribute(AttributeName) 의 값이 "true" 일 때 Element를 드래그
 - DragAreaNode : 해당 Element에 설정할 경우 eval(Element.getAttribute(DragAreaNode)) 하위노드에서만 드래그 가능
 - DragDirection(드래그가능방향) : Element.getAttribute(DragDirection)=[0 - Horizontal , 1 - Vertical , 2 - Both], 설정안할경우 Both
 - ScalePercentageAttributeName : Element.getAttribute(ScalePercentageAttributeName) 가 설정된 드래그 객체에 한해 DragAreaNode 로부터 Element 의 드래그범위를 설정한 비율로 리턴받을수있음(Object.ScaleX , Object.ScaleY)

 * 사용자 편의를 고려해서 최대한 각 Element의 이벤트핸들러나 기본속성에 접근하지 않는 방법을 선택했습니다. 그러다보니 거의 대부분을 사용자 확장 태그값으로 컨트롤 했는데 혹시 이 방법이 어떤 다른 이유에서 안좋다거나 하신분들은 의견 바랍니다.




<span id="text1" style="font-size:12pt;">Drag&Drop</span>

<br>

<embed id="music1" src="http://mediafile.paran.com/MEDIA_10265022/BLOG/200611/1164756323_윤미래-시간이%20흐른%20뒤.mp3" autostart="true"></embed>

<br>

<div style="width:300px; height:300px; background:#72C31B;" draggable="true">Drag : free</div>
<div style="width:200px; height:200px; background:#FFA500; position:absolute;" id="div1" draggable="true" dragarea="document.body">Drag : body
<input type="text" id="GridPositionX">
</div>
<div style="width:100px; height:100px; background:#FF0000;" draggable="true" dragarea="document.getElementById('div1')">Drag : div1</div>

<img id="gridX" src="http://sstatic.naver.com/search/mypocket/v3/btn_atcmp_on_op2.gif" draggable="true" dragarea="document.getElementById('div1')" dragdirection="0" scalepercent="10000" onmousedown="return false" onmousemove="return false" title="HORIZONTAL">
<img id="gridY" src="http://sstatic.naver.com/search/mypocket/v3/btn_atcmp_on_op2.gif" draggable="true" dragarea="document.getElementById('div1')" dragdirection="1" scalepercent="500" onmousedown="return false" onmousemove="return false" title="VERTICAL">

<script language="javascript" src="Drag.js"></script>
<script language="javascript">
//기본설정
var myDrag = new Drag("draggable","dragarea","dragdirection","scalepercent");
//기본설정

//응용설정
myDrag.addEvent(document,"onmousemove",function () {
    document.getElementById("GridPositionX").value = myDrag.ScaleX + " : " + Math.ceil(myDrag.ScaleX / 100) + "%";
    document.getElementById("music1").volume = myDrag.ScaleX - Number(document.getElementById("gridX").getAttribute("scalepercent"));
    document.getElementById("text1").style.fontSize = ((myDrag.ScaleY <= 12) ? 12 : myDrag.ScaleY) + "px";
});
//응용설정
</script>


DTD 선언..
선언해도 되고 안해도 되는데
DragAreaNode 부분이나, 각 엘리먼트의 속성들은 각각 선언했을 때와 선언하지 않았을 때의 설정에 맞게 맞춰주셔야 합니다.
ex) "" : dragarea="document.body" -> "DTD" : dragarea="document.documentElement"
Posted by 알 수 없는 사용자
,
//////////// 첫번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str = $str.$i."번째 문자열<br>";
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



//////////// 두번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str = $str.($i."번째 문자열<br>");
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



//////////// 세번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str .= $i."번째 문자열<br>";
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



결과 :
첫번째 방법 -> 5초 ~ 10초 이상 속도가 걸림
두번째 방법 -> 0.5초 이하로 빠름
세번째 방법 -> 0.5초 이하로 빠름


문자열 더할 때 절대 첫번째 방법 사용하지 맙시다!

근데 확실히 PHP가 빠르긴 빠르네요.
ASP로 for 구문 20000번 돌렸을 때
첫번째 방법은 대략 13~15초
두번째 방법은 대략 6~7초 나오는데 -_-


첫번째 방법과 두번째 방법은 단순히 괄호를 하냐 안하냐의 차이인데
이렇게 속도 차이가 나는 이유는
http://www.microsoft.com/korea/msdn/library/etc/issues/2003/aspstrcatn/
여기가서 확인하세요.

펌:뭉충닷컴





흔히 string buffer 라고 하는 방법을 추가해서 테스트 해봤는데, 그래도 .= 가 더 빠르네요.

PHP5 를 쉘에서 실행하느라 코드가 다음과 같았습니다.
$t1 = microtime(true);
$str = '';
$arr = array();
for ($i=0;$i<$times;$i++) {
        $arr[] = $i."번째 문자열<br>";
}
$str = join('', $arr);
$t2 = microtime(true);
echo ($t2-$t1);
echo "\n";

1~3번째 방법도 동일하게 다시 테스트해봤는데, 8000번 반복에

8.85153102875
4.30858206749
0.0193250179291
0.032870054245

이렇게 나타나네요. ^^

펌:행복한고니
Posted by 알 수 없는 사용자
,

텍스트나 이미지를 클릭해도 체크가됩니다.

<style type='text/css'>LABEL { cursor:pointer; }</style>

<label for="check_01"><input type="checkbox" id="check_01" />라벨 1</label> <br /><br />
<label for="check_02"><input type="checkbox" id="check_02" />라벨 2</label> <br /><br />
<label for="check_03"><input type="checkbox" id="check_03" />라벨 3</label><br /><br />
<label for="check_04" style="width:90px; height:30px; background:url(http://oxtag.com/html/img/banner3.gif)"><input type="checkbox" id="check_04" /></label><br /><br />
<input type="checkbox" id="check_05" /><label for="check_05" style="width:90px; height:30px; background:url(http://oxtag.com/html/img/banner3.gif)"></label>


텍스트대신 image형태로 처리하게 되면 IE의 경우는 label본연의 기능이 동작하지 않는 버그가 있습니다.

이럴 경우 간단한 Javascript를 통해서 label 태그의 기능을 사용할수 있습니다. (IE일경우만 동작하는 스크립트 입니다.)

<label for="check_06" onclick="if(navigator.appVersion.indexOf('MSIE') != -1){check_06.click()}">
<input id="check_06" type="checkbox">
<img src="http://oxtag.com/html/img/banner3.gif" alt="check_06" style="cursor:pointer">
</label>
 

이벤트를 이용한 이미지체크
<input type="checkbox" /><img src='http://oxtag.com/html/img/banner3.gif' onclick='previousSibling.checked=previousSibling.checked!=true?true:false;'/>


TEXT 박스 같은곳에 사용하면 포커스를  줄 수도 있습니다.
참고로 radio 박스나 checkbox와 같이 사용할 경우에는 HIDEFUCUS 라는 프로퍼티를 주시면 label 클릭시 label에 focus가 와서 점선처럼 생기는 것을 막을 수 있습니다.
있는것과 없는것을 비교해 보시면 금방 이해가 가실겁니다.
<input type="checkbox" id="id_check_01"><label for="id_check_01" HIDEFOCUS>라벨01</label>
<input type="checkbox" id="id_check_02"><label for="id_check_02" >라벨02</label>

Posted by 알 수 없는 사용자
,


예전에 만든거라 이제 소스도 없어지고 EXE 실행화일만 남았네요. (소스없음 ㅜ.ㅜ)

이 프로그램은 관리자(상담원)과 1:1 상담 목적으로 만든 프로그램입니다.
간단히 이야기하면.. 대화방 기능이 없는 채팅이지요.

사용중인 홈페이지 : http://www.mindcrony.com/

* 잡설..

채팅은 서버에 부하를 줍니다. 하지만, 이 프로그램은 서버가.. 바로
개인 컴퓨터이랍니다 ^^... 그래서 홈페이지 서버 부하랑은 별도~~~

쇼핑몰이나 이런곳에 적용하면 괜찮을 듯 하네요.

* mindcrony_chat.exe 프로그램

2024 포트를 사용합니다. (외부에서 접근 가능하도록 세팅해주셔야합니다.)
연결 후 동적으로 계속 연결되면서 관리자의 글을 전송해줍니다.

AJAX 통신으로 들어온 대화내용과 사용자 ip:port:cookie 으로써, 해당 채팅창에
뿌려줍니다.

* 홈페이지 설치 방법

<iframe name='chat_windows' src="http://아이피:2024/conn?사용자이름" width="430" height=410 frameborder='0' topmargin='0' leftmargin='0' marginwidth='0' marginheight='0' scrolling=no></iframe>

이렇게 설치하시면, 아래처럼 창이 나오게됩니다. 물론 index.txt 화일 수정하면,
마음대로 변경가능합니다.

사용자이름 역시 제로보드나 이런 회원프로그램과 연동이 가능합니다.
저 같은 경우에는 싸이월드 미니홈피를 홈페이지 연결시켜, 방문자추적&대화이름
나오게 해버렸습니다 클럭;;ㅋㅋ





* 프로그램 동작 화면.

사용자 삽입 이미지
 

* 디자인 변경 방법

같이 첨부한 index.txt 화일 내용을 수정해주시면 됩니다.

* Copyright ?

index.txt 를 보시면, 길호님의 일부 소스가 첨부되어있습니다.
길호님의 상담프로그램을 참고해서 만든거라 .. ^^ㆀ


출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57630&page=1
Posted by 알 수 없는 사용자
,


<?
# 특징: 본문 중에 나타난 모든 욕들을 한꺼번에 콤마로 구분하여 리턴

# 방법: 속도를 고려하여 전진방식의 매칭으로 처리
# 매칭할 단어들을 배열A에 저장해 놓는다.
# 함수로 위 단어의 첫글자를 따로 배열B로 만든다.
# 본문을 한글자씩 전진하면서 그 글자랑 매칭되는 문자가 있는지 B배열을 채크한다.
# B배열은 A배열에서 그 문자로 시작하는 첫 단어의 index를 가지고 있으며
# A배열의 그 위치부터 현재 문서 위치의 문자열이랑 비교를 하는데,
# 문자열 비교를 위하여 문서로부터 단어 최대길이만큼 짤라서 비교를 한다.
# 저작권: 니맘 대로 하세요.

# 필터링할 단어들. 정렬되어 있어야 한다.
# 심한 욕들이 있어서 첨부파일로 넣었습니다.
include "words_text.php";

# [수집된 단어의 첫 2바이트] => 그 글자가 처음 나오는 단어의 인덱스
#
function get_indexOfWords(&$words)
{
  $arr= array();
  $ch_old=0;
  foreach($words as $k=>$v){
    $ch= $v{0}.$v{1};
    if ($ch_old==$ch) continue;

    $ch_old=$ch;
    $arr[$ch]= $k;
  }
  return $arr;
}

# 상수
# 배열값 중에서 가장 긴 길이와 같거나 더 길면 됨. 정확하지 않아도 무방..
# 왜냐면, 본문 중에서 비교할 문자열을 적당히 짜를 용도이므로
define('MEX_WORD_LEN', 10);

function fuck_match (&$words, $str)
{
  $RET_WORDS= array();
  $char2idx= array();

  $char2idx= get_indexOfWords($words);
  $num_words= sizeof($words);
  $len_str= strlen($str);

  $han_flag=0;
  for ($i=0; $i<$len_str; $i++){
    if ($han_flag){      # 한글의 두번째 바이트 차례는 건너뜀
      $han_flag=0;
      continue;
    }
    $ch= $str{$i};
    if (127 < ord($ch)){
      $ch.= $str{$i+1};  # 한글이면 2바이트를 1글자로 처리
      $han_flag=1;
    }

    if (! isset($char2idx[$ch]))  # 첫글자가 일치하는 단어의 인덱스가 없으면 건너뜀
      continue;

    $str_part= substr($str, $i, MEX_WORD_LEN);  # 본문 중에 비교할 부분 문자열

      // echo "@$i@ 단어의 첫글자 일치의 경우  ($str_part == {$words[$char2idx[$ch]]})<br>";

    $match_word= '';
    for($j=$char2idx[$ch]; $j< $num_words; $j++){
      if (strpos($str_part, $words[$j])===0) # 단어가 완전히 포함되면
        $match_word= $words[$j];            # 임시저장
      if ($str_part<= $words[$j]){    # 단어가 비교 문자열보다 커지는 순간에 탈출
        if ($match_word!='')
          $RET_WORDS[]= $match_word;  # 그 순간의  임시 단어 수집
        break;
      }
    }
    if ($match_word && $j==$num_words){
    // echo "@$i@ 정렬에 문제가 있어서 저장 못하고 지나왔다면? ($match_word)<br>";
      $RET_WORDS[]= $match_word;
    }
  }
  if(0==sizeof($RET_WORDS))    return '';

  return implode(', ', array_unique($RET_WORDS));  # 중복 제거하고 리턴
}


#--------------- 요 밑으로는 테스트 --------------------------#

function __get_microtime(){
  list($usec, $sec)=  explode(" ",microtime());
  return (float)$usec + (float)$sec;
}


$time_start= __get_microtime();

$test_str= <<<TEST
여기는  별의별 헛소리를 다 넣어도 된다 무조껀 뻐큐
테스트용 문자열이므로 아무 의미가 없습니다 자세히 읽어 보지 말기를 바랍니다.
하하 호호 히히 쉽 스까이
내가 생각하는 아이템 사이트에서는
사실은 자유게시판이 아니라 회원제에서는 욕이 나오기는 힘들고 관리하기도 쉽다.
따라서 무단광고, 성인광고 처리에 집중하자.
일부러 표기법을 어기거나 특수분자랑 뒤섞는 등의 "정해지지 않는" 단어 처리에 대해서는
쉽게 생각하면 새로운 광고 단어 유형을 그때그때 수동으로 수집처리하면 된다.

자동으로 처리하려면?
광고 단어의 글자 사이에 특수문자들을 끼워 넣은 경우를 매칭하기 위하여
공백을 포한한 특수문자는 모두 제거하고 매칭할까.
3글자 이상의 길이면 가능하겠는데. 이런 좁밥

2글자 이하의 매칭은 특수문자 제거하고 매칭시 엉뚱한 문자열이 걸릴 수 있다. ㅅㅂㄹㅁ','凸','갈보
그러므로 2자 이하의 단어 매칭시 바로 광고라고 확정하지 말고 가중 점수로써 처리하자.
시발시발 시발 새새끼 개새끼
호홋
TEST;

$result= fuck_match ($words, $test_str);

echo "결과= ($result)<hr>실행에 걸린 시간=". (__get_microtime()- $time_start);
?>

펌:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57637&page=1

Posted by 알 수 없는 사용자
,

$time_start= _get_microtime();
$count_C=0;
$array_to_search_in = array_flip($MysqlReservedWords);
foreach($MysqlReservedWords as $k=> $v){
  if (isset($array_to_search_in[$v]))
    $count_C++;
  else
    $noSearch_C.="($v)";
}
$time_C= _get_microtime()- $time_start;

arr_search_bin()로 찾은 갯수=(262),                검색시간=(0.0029969215393066)
array_flip()과 isset()을 이용해 찾은 갯수=(262), 검색시간=(0.00027084350585938)


-------------------------------------------------------------------------------------------


$array_to_search_in = array_flip($MysqlReservedWords);  # 뒤집고
if ($array_to_search_in ('찾을값')){
  찾았으니 처리할 거 처리해;
}
Posted by 알 수 없는 사용자
,

제로보드외 타게시판도 가능합니다.


사용자 삽입 이미지

※ 이전 버전에 비해 달라진 점
① 숫자만 되던 것에 영문도 가능하게 함
② 이미지의 숫자를 점 하나 하나 찍어서 만들던 것을, 비트맵 폰트파일을 이용하여 더욱 빠르고 간편하게 구현
③ 특정 게시판에는 스팸차단기능이 비활성화되도록 설정 가능
④ 기존, 3개의 파일로 쪼개져 있던 것을, 1개의 파일로 모음 (프로그램파일 1개+폰트파일 1개)
⑤ 기타, 소스를 더욱 효율적으로 정리
(도움을 주신 비혼(BiHon)님께 감사드립니다.)


※ 기존 1.5로 적용하시던 분들은, skin/ 디렉토리에 있는 3개의 파일을 지우시고,
이 2개의 파일을 올리시면 됩니다. (제로보드 관련파일 및 스킨파일 수정 불필요)

※ 본 프로그램은 서버에서 GD 라이브러리를 지원해야 가능합니다.

※ 앞으로 더 이상의 업그레이드는 하지 않을 예정입니다. (개인적인 사정으로)

사용자 삽입 이미지
  1. ZM_Crypt 2.0 특징
    1. 적용이 쉽다
      PHP 프로그램을 몰라도, HTML만 알면 쉽게 적용 가능합니다.
      기본적으로 파일 4개에 1줄씩만 넣어주시면 작동합니다.
    2. 게시물 차단 + 덧글(코멘트) 차단
      최근에는 덧글스팸도 많이 늘었습니다.
      본 프로그램은 게시물 뿐만 아니라 덧글(코멘트)의 자동등록도 차단합니다.
    3. 디자인 변경 용이
      여러 스킨을 사용해도, 각 스킨마다 원하는 위치에
      예쁘게 삽입 가능합니다.
    4. 보안코드가 텍스트 아닌 이미지
      보안코드가 텍스트가 아닌 이미지로 출력됩니다.
      그렇다고, 기존 이미지 파일을 불러오는 것이 아닙니다.
      GD 라이브러리를 이용, 자체 폰트함수로 그때마다 숫자 이미지 파일을 뿌려주고
      자동 삭제됩니다.
      때문에, 기존 텍스트 기반의 보안코드보다 보안성이 강합니다.
    5. 씨앗(Seed)을 바탕으로 한 자체 암호화 함수 내장여러분이 처음에 씨앗(Seed)을 설정할 수 있습니다.
      암호화는 그 씨앗을 바탕으로 이루어집니다.
      때문에, 더욱 더 안전합니다.
  2. 설치방법
    1. 환경설정 (zm_crypt.php 수정)
      ① 13째줄(씨앗) : 반드시 변경, 알파벳+숫자로 이루어진 암호 (외울 필요 없음)
      ② 14째줄(자릿수) : 보안코드의 자릿수 설정 (기본값:4자리)
      ③ 15째줄(보안코드 문자종류) : 숫자+알파벳, 또는 숫자만 설정 가능 (기본값:숫자+알파벳)
      ④ 스팸광고게시물 차단 필요없는 게시판 id 입력 : 게시판에 따라 차단 필요없는 게시판 이름(id)를 콤마(,)로 구분하여 입력
    2. 업로드제로보드(bbs) 디렉토리 안에 'skin' 디렉토리에 아래 두 파일 업로드.
      zm_crypt.php (zmCrypt 프로그램 파일)
      andale12.gdf (글꼴 파일)
      예:
      /bbs/ : 제로보드 설치 디렉토리
      /bbs/skin/ (특정 스킨 디렉토리가 아님) ☜ 이 디렉토리에 설치
      /bbs/skin/snowboard/ : 스노우보드 스킨 디렉토리
    3. 제로보드 파일 수정 (write_ok.php , comment_ok.php)위 두 파일을 열면 5~7째줄에 아래와 같은 코드가 똑같이 들어 있습니다.
      include "_head.php";
      위 코드의 바로 아랫줄에 아래 코드를 삽입합니다.
      include ("./skin/zm_crypt.php" ) ;
      저장 후 업로드 하여 덮어씌우시면 됩니다.
    4. 스킨 파일 수정 #1 (write.php)<?=$hide_start?> 코드 아랫줄에 다음 코드 삽입
      <? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
      (위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

      이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
      <?=$zCrypt_Img?> : 보안코드 이미지
      <?=$zCrypt_Form?> : 보안코드 입력폼
      (<?=$hide_start?> ~ <?=$hide_start?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.)
    5. 스킨 파일 수정 #2 (view_write_comment.php)<?=$hide_c_password_start?> 코드 아랫줄에 다음 코드 삽입
      <? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
      (위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

      이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
      <?=$zCrypt_Img?> : 보안코드 이미지
      <?=$zCrypt_Form?> : 보안코드 입력폼
      (<?=$hide_c_password_start?> ~ <?=$hide_c_password_end?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.)
    6. 설치 완료설치완료되었습니다. 테스트해 보시기 바랍니다.
      로그아웃 후 테스트해 보시는 것, 잊지 마세요.
  3. 고급 환경설정
    1. 환경설정 (zm_crypt.php 수정)20~17줄에는 고급 환경설정 코드가 있습니다.
      보안코드 글자색, 바탕색 등을 변경할 수 있습니다.
      주석이 자세히 되어 있으므로 쉽게 변경 가능합니다.
  4. 기타 문의사항 및 정보
    1. 이메일 : ZnMee@naver.com (지앤미)
    2. 블로그 : blog.naver.com/ZnMee (知&美 : 앎과 앎다움)
    3. 프로그램 : ZM_Crypt 2.0 (2007.07.18. Released)

※ 2007년 11월 07일 추가 정보

제가 테스트하고 있는 커뮤니티 게시판에 본 ZM_Crypt 2.0을 적용한 이후로
자동 스팸광고 게시물이 어제 처음으로 등록되었습니다.
어떻게 등록했나 보니, 아예 회원가입을 자동으로 하여 로그인 한 후
게시물을 등록하는 방식이더군요.
이에, 회원가입 페이지에도 보안코드를 입력하도록 조치하였습니다.

제로보드 프로그램이 있는 디렉토리에 있는
member_join.php 에 보안코드 입력 폼을,
member_join_ok.php 에 검사 코드를 추가하면 됩니다.

단, 이렇게 했을 경우, 오류가 발생합니다.
zm_crypt.php 파일을 열어 18번째 줄 다음에
if (!$id) {$id=0;}
위와 같이 1줄의 코드를 넣어 주시면 오류가 해결됩니다.

출처:http://blog.naver.com/znmee/70019857377
Posted by 알 수 없는 사용자
,