영원한사랑

인터넷정보 +1252
스타일 시트를 이요한 방법이구요. IE 5.x 이상에서만 나타납니다.

스타일 시트는 당연히 헤드 안에 넣는다는 것은 아시죠.

컬러는 홈 분위기에 맞게 수정해서 쓰세요.

예제는 좌측메뉴의 젤 밑에 있는 다이어리 / 프로필 클릭하구 위에 보이는

프로필에 마우스를 올려보세요. 그럼 점선이 나타나죠.

<style>
A:hover { border-bottom: dotted #666666 1px; text-decoration:none}
</style>

미리보기 : http://oxtag.com/html/ex/tool_tip2.html


<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style>
v\:*{behavior:url(#default#VML);}
td{font-size:9pt}
</style>
<script language=javascript>
function tipshow(k){
var t=new Array();
t[0]="툴팁1의 내용";
t[1]="툴팁2의 내용";
t[2]="툴팁3의 내용";
txt.innerText=t[k];
tip.style.pixelTop=event.y + document.body.scrollTop- 50;//툴팁의 y위치
tip.style.pixelLeft=event.x + document.body.scrollLeft - 10;//툴팁의 x
//위치
//document.body.scrollTop 과 document.body.scrollLeft 는 문서가 스크롤 된 상태에
//서는 반드시 필요한 값입니다. 문서에 스크롤바가 나타나지 않는다면 두속성은 쓰지
//않아도 됩니다.
tip.style.visibility='visible';


}
function tiphide(){
tip.style.visibility='hidden';

}
</script>
</head>

<body>
<br><br><br><br>
<span onmouseover=tipshow(0) onmouseout=tiphide() style='cursor:hand'>툴팁1</span>
<br><br><br>
<span onmouseover=tipshow(1) onmouseout=tiphide() style='cursor:hand'>툴팁2</span>
<br><br><br>
<span onmouseover=tipshow(2) onmouseout=tiphide() style='cursor:hand'>툴팁3</span>


<!--
4개의 타원의 위치는 div 의 상단 왼쪽을 기준으로 정하는 위치입니다
타원들이 모두 div 내에 있으므로 타원들간의 위치는 고정되어있습니다
-->
<div id="tip" style="position:absolute;visibility:hidden;width:200;height:50;">

<v:oval fillcolor="#cc9999" style="position:absolute;top:0;left:50;z-index:1;width:150;height:40"> <!-- 네번째 타원형 툴팁이 출력되는 부분 (배경등의 컬러를 여기서 수정) -->
<v:textbox id=txt style="font-size:12px;font-family:verdana;"></v:textbox>
</v:oval>

<v:oval fillcolor="#cccc99" style="position:absolute;top:30;left:40;z-index:2;width:50;height:20"> <!-- 세번째 작은 타원형 (배경등의 컬러를 여기서 수정) -->
</v:oval>

<v:oval style="position:absolute;top:40;left:30;z-index:3;width:20;height:10"> <!-- 두번째 작은 타원형 (배경등의 컬러를 여기서 수정) -->
</v:oval>

<v:oval style="position:absolute;top:45;left:25;z-index:4;width:10;height:5"> <!-- 제일 작은 타원형 (배경등의 컬러를 여기서 수정) -->
</v:oval>

</div>

<br><br><br>
vml을 이용해서 타원형의 풍선도움말을 만들수있습니다<br><br>
물론 이미지를 써도 되지만 코드로만 이것을 해보고 싶은사람에게는 <br><br>
괞찬을 것 같아서리...<br><br>
코드는 소스 보기를 하셔서 보시기 바랍니다. <br><br>
단 익스플로러 5.0 이상 에서만 가능합니다<br><br>
물론 아래에서 툴팁의 내용뿐만아니라 풍선도움말의 배경색도 배열로 처리해서<br><br>
각각 다른색을 사용할수도 있습니다<br><br>
관심이 있으시다면 소스코드를 한번 복사해서 실행시켜보세요<br><br>
모양을 더 예쁘게 꾸미는것은 각자의 몫이라고 봅니다.

</body>
</html>

너의 뒤에서 항상 널 바라보지만
넌 내가 뒤에 있는 것조차 알지 못하는
조용한 그림자 같은 존재가 되고 싶어.
너가 세상의 힘겨움에 시달려 지쳤을 때
메마른 가슴을 촉촉히 적셔주는 비처럼
답답한 마음을 시원하게 해주는
바람처럼 그런 존재가 되고 싶어
외로워 쳐다보면 항상 그 곳에서 같은 모습으로
눈 마주쳐주는 별과 같은 존재가 되고 싶구..
어두컴컴한 바다의 등대처럼 너가
삶의 길목에서 길 잃고 방황할 때
작은 빛 하나 밝혀주는 존재가 되고 싶어
너의 모든 짐과 고통을 담아줄 수 있는
마음의 가방같은 존재가 되고 싶어
너가 힘들 때마다 부담없이 찾아오면
언제든 포근히 덮어줄 이불처럼
휴식같은 존재가 되고 싶어
어느 날 아무데도 갈 곳 없는 너만을 위해
남겨 놓은 의자처럼 언제나
마음을 비워둔 채 기다리는 존재가 되고 싶어.
그러다가 혹시라도 가끔씩 추억이 생각나면
들춰볼 수 있는 사진첩 같은 존재가 되고 싶어..


<marquee scrolldelay="1" scrollamount="130" behavior="slide"><font size=2 color=#7E7088>너의 뒤에서 항상 널 바라보지만</marquee><br>
<marquee scrolldelay="70" scrollamount="115" behavior="slide"><font size=2 color=#9B7AB3>넌 내가 뒤에 있는 것조차 알지 못하는</marquee><br>
<marquee scrolldelay="80" scrollamount="110" behavior="slide"><font size=2 color=#B594CD>조용한 그림자 같은 존재가 되고 싶어.</marquee><br>
<marquee scrolldelay="90" scrollamount="100" behavior="slide"><font size=2 color=#C9B7D6>너가 세상의 힘겨움에 시달려 지쳤을 때</marquee><br>
<marquee scrolldelay="100" scrollamount="95" behavior="slide"><font size=2 color=#AFCCCE>메마른 가슴을 촉촉히 적셔주는 비처럼</marquee><br>
<marquee scrolldelay="110" scrollamount="90" behavior="slide"><font size=2 color=#7BA0A4>답답한 마음을 시원하게 해주는</marquee><br>
<marquee scrolldelay="120" scrollamount="85" behavior="slide"><font size=2 color=#658387>바람처럼 그런 존재가 되고 싶어 </marquee><br>
<marquee scrolldelay="130" scrollamount="80" behavior="slide"><font size=2 color=#3E747B>외로워 쳐다보면 항상 그 곳에서 같은 모습으로 </marquee><br>
<marquee scrolldelay="140" scrollamount="75" behavior="slide"><font size=2 color=#862D2D>눈 마주쳐주는 별과 같은 존재가 되고 싶구.. </marquee><br>
<marquee scrolldelay="150" scrollamount="70" behavior="slide"><font size=2 color=#AC3939>어두컴컴한 바다의 등대처럼 너가</marquee><br>
<marquee scrolldelay="160" scrollamount="75" behavior="slide"><font size=2 color=#CC6666>삶의 길목에서 길 잃고 방황할 때</marquee><br>
<marquee scrolldelay="170" scrollamount="65" behavior="slide"><font size=2 color=#D88C8C>작은 빛 하나 밝혀주는 존재가 되고 싶어 </marquee><br>
<marquee scrolldelay="180" scrollamount="60" behavior="slide"><font size=2 color=#F2A6A6>너의  모든 짐과 고통을 담아줄 수 있는</marquee><br>
<marquee scrolldelay="190" scrollamount="55" behavior="slide"><font size=2 color=#E6D9B5>마음의 가방같은 존재가 되고 싶어</marquee><br>
<marquee scrolldelay="200" scrollamount="50" behavior="slide"><font size=2 color=#D1B975>너가 힘들 때마다 부담없이 찾아오면 </marquee><br>
<marquee scrolldelay="210" scrollamount="45" behavior="slide"><font size=2 color=#BF9F40>언제든 포근히 덮어줄 이불처럼</marquee><br>
<marquee scrolldelay="210" scrollamount="40" behavior="slide"><font size=2 color=#A48837>휴식같은 존재가 되고 싶어</marquee><br>
<marquee scrolldelay="210" scrollamount="35" behavior="slide"><font size=2 color=#7A4964>어느 날 아무데도 갈 곳 없는 너만을 위해</marquee><br>
<marquee scrolldelay="210" scrollamount="30" behavior="slide"><font size=2 color=#9F5F83>남겨 놓은 의자처럼 언제나 </marquee><br>
<marquee scrolldelay="210" scrollamount="25" behavior="slide"><font size=2 color=#CA619C>마음을 비워둔 채 기다리는 존재가 되고 싶어. </marquee><br>
<marquee scrolldelay="220" scrollamount="20" behavior="slide"><font size=2 color=#DFA1C4>그러다가 혹시라도 가끔씩 추억이 생각나면</marquee><br>
<marquee scrolldelay="220" scrollamount="15" behavior="slide"><font size=2 color=#F3ADD4>들춰볼 수 있는 사진첩 같은 존재가 되고 싶어.. </marquee><br><br>
  

자신의 db, 자신의 db_id, 자신의 비밀번호,
자신의 할당받은 db 용량을 수정하여 주시고 사용하시면 됩니다.

------------------------------------------------------------------------------------
<?
// 데이타 베이스 관련 설정
////////////////////////////////////////
$db['database'] = "님의데이터베이스";
$db['user']     = "님의아이디";
$db['pw']       = "계정비밀번호";
$first_mb                = "님의 초기설정 db 용량";
////////////////////////////////////////
/*
//예입니다. 아래와 같이 위를 수정해 주세요...
$db['database'] = "db_kumasim";
$db['user']     = "db_kumasim";
$db['pw']       = "kumasim_pass";
$first_mb                = 5;
*/
$db['host']     = "localhost";
$db['port']     = "3306";

// 기본값
$k      = 1024;         // 킬로
$m      = $k * 1024;    // 메가
$g      = $m * 1024;    // 기가
$t    = $g * 1024;    // 테라

// 나의 디비 용량
$mySize = $first_mb * $m;
?>

<html>
<body>

<table border=0 bgcolor=#8888cc cellpadding=2 cellspacing=1>
<tr height=22 bgcolor=#ccccee align=center>
    <td>테이블명</td>
    <td>테이블 설명</td>
    <td>테이블타입</td>
    <td>저장형식</td>
    <td>용량</td>
    <td>레코드수</td>
</tr>
<?
$dbCon = mysql_connect($db['host'], $db['user'], $db['pw']);
mysql_select_db($db["database"], $dbCon);

$result = mysql_query("SHOW TABLE STATUS", $dbCon);

while ( $row = mysql_fetch_assoc($result) )
{
        $size = $row['Data_length'] + $row['Index_length'];
    $sum += $size;

    $sizeShow = sizeCal( $size );

        echo "
        <tr bgcolor=#ffffff>
            <td>$row[Name]</td>
            <td>$row[Comment]</td>
            <td>$row[Type]</td>
            <td>$row[Row_format]</td>
            <td align=right>$sizeShow  </td>
            <td align=right> $row[Rows] </td>
        </tr>
    ";
}
$r_mySize = sizeCal( $mySize );
$r_sum    = sizeCal( $sum );
$rt       = sizeCal( $mySize - $sum );

echo "<tr bgcolor=#dddddd><td colspan=6 align=center> $r_mySize - $r_sum = $rt </td></tr>n";

function sizeCal( $size )
{
    global $m, $k;
    if ( $size < 0 ) { $t = 0; $size = abs($size); } else $t = 1;
    if ( $size >= $GLOBALS['t'] )
    {
        $size = intval( $size / $GLOBALS['t'] ) . " TB";
    }
        elseif ( $size >= $GLOBALS['g'] )
        {
                $szie = intval( $size / $GLOBALS['g'] ) . " GB";
        }
        elseif ( $size >= $m )
        {
                $size = intval( $size / $m ) . " MB";
        }
        elseif ( $size >= $k )
        {
                $size = intval( $size / $k ) . " KB";
        }
        else
        {
                $size .= " B";
        }
    
    $size = ( $t ) ? "$size":"- $size";

    return $size;
}
?>
</table>

</body>
</html>

용량체크는 php코딩으로도 알 수 있습니다.

mb.php라는 파일을 만드시고,아래와 같이 적어주시고 저장하세요.

<?php
$du=`du -sk ./`;
$total=20; //-- 계정용량에 맞게 수정하세요..단위는 MB..
$du=$du/1000;
$used=$total-$du;
$free=$du;

echo "전체 용량 : $total MB";
echo "사용량 : ${free} MB";
echo "남은량 : ${used} MB";
?>

글런후 ftp로 루트디렉토리 안에다가 올리세요.

  http:/자신의도메인/mb.php


로 접속하시면 바로 알 수 있습니다.

gd 추가하기

인터넷정보2007. 10. 16. 16:28

( http://phpschool.com/bbs2/inc_view.html?id=25583&code=install2&start=0&mode=&s_que=&field=&operator=&period= )



(조사 결과, apm 설치된 기존의 환경에 gd 라이브러리를 추가하고 싶을때,
DSO방식으로 설치되었다면  php만 재컴파일 하면 되고,
DSO방식이 아니라면 아파치와 php 두개를 재컴파일 해야 된다고 나와있었습니다.
그래서 그런 여러 조언들을 참고로 아래와 같이 실행했습니다.)


(몇번의 시행착오뒤에) 어떤 오류메세지 없었고,  컴파일은 성공적으로 수행된 듯 싶었습니다.

그런데, 아래와 같이 실행했을때, 그 결과가 , gd support 라는 항목이 phpinfo(); 에 나타나지 않습니다.
그러니까, php ./configure 한 것이 전혀 반영이 안되고 있는 상황입니다.

처음에는 ./apachectl restart 를 했다가,
tip / qna 란의 글을 보고 , ./apachectl stop & ./apachectl start 를 했습니다면, 여전히 반영이 안되고 있습니다.

혹시나 하는 마음에
/etc/rc.d/init.d/xinetd  restart 도 해보았지만, 전혀 감감무소식입니다.


tip 란과 qna 란의 글들을 검색을 해보았지만, 도저히 해결책을 찾지 못해서 이렇게 질문을 올립니다.
제가 한 방식, 어디가 잘못되었는지 아시는 분 계시는 도움말씀 부탁드립니다.


+++++++++++++++++++++++++++++++++++++++++++++++++++

1. 확인..

[14:16:57 Mon Dec 22 [root@myCom ~]# rpm -ql libpng
/usr/lib/libpng.so.2.1.0.9
/usr/share/doc/libpng-1.0.9
/usr/share/doc/libpng-1.0.9/CHANGES
/usr/share/doc/libpng-1.0.9/README
/usr/share/doc/libpng-1.0.9/TODO
/usr/share/doc/libpng-1.0.9/example.c
/usr/share/doc/libpng-1.0.9/libpng.txt
/usr/share/man/man5/png.5.gz
  
[14:17:14 Mon Dec 22 [root@myCom ~]# rpm -gl zlib
/usr/lib/libz.so.1
/usr/lib/libz.so.1.1.3
/usr/share/doc/zlib-1.1.3
/usr/share/doc/zlib-1.1.3/README


2. gd, libpng, zlib 모두 있음..  
DSO 방식이 아님.


3.1. 기존의 /usr/local/php-4.1.1 을 없애고, 새로이..
mv /usr/local/php-4.1.1   /usr/local/php-4.1.1____old

tar zxvf  php4.1.1...  (휘파람님의 도움으로..)

  
3. 재설정(?)

3.1 아파치 (1)
[14:17:20 Mon Dec 22 [root@myCom ~]# cd /usr/local/apache_1.3.22/
[14:17:47 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# ./configure

[14:17:47 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# make

[14:17:47 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# make install


3.2 php

[14:17:58 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# cd ../php-4.1.1/
[14:18:22 Mon Dec 22 [root@myCom /usr/local/php-4.1.1]# ./configure   --with-apache=/usr/local/apache_1.3.22   --with-mysql=/usr/local/mysql   --with-config-file-path=/usr/local/apache_1.3.22/conf   --with-exec-dir=/usr/local/apache_1.3.22/bin   --with-enable-track-vars=yes   --enable-ftp   --enable-sockets   --enable-sysvsem=yes   --enable-sysvshm=yes   --enable-shmop   --enable-gd-native-ttf   --enable-mailparse  --with-gd=/usr/local/gd-2.0.1   --with-zlib-dir=/usr/lib --with-zlib --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib  


[14:19:37 Mon Dec 22 [root@myCom /usr/local/php-4.1.1] make; make install



3.3 아파치(2)

[14:19:37 Mon Dec 22 [root@myCom /usr/local/php-4.1.1]# cd ../apache_1.3.22/

   apache : ./apachectl stop
[14:19:40 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# ./configure --prefix=/usr/local/apache_1.3.22/ --activate-module=src/modules/php4/libphp4.a

   apache : make install
[14:20:06 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22/bin]# ./apachectl start


++++++++++++++++
[휘파람]
rm -fr php4.1.1
tar zxvf php4.1.1....
./configure...

예전 php 버젼에서 gd 를 컴파일 하면 이전에 컴파일된 찌꺼기가 남아 있는것 같더라구요..
그래서 저렇게 하고 다시 깨끗한 상태에서 컴파일 하면 잘 되었던 기억이 납니다..

아파치 make install 하기 직전에 ./apachectl stop 하시는것도 잊지 마시구요.. 그럼..
++++++++++++++++

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

PHP 재컴파일 할 경우

config.cache 파일 지우라 !

make clean

rm -rf php



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

- 환경설정을 다시 해야할 경우
혹시 설치진행 중에 잘못된 명령이나 옵션설정 등으로 하여 문제가 발생했을 때, 기존 설정 내용을 가지고 있는 config.cache을 지우지 않고 진행하면 수정된 내용이 반영되지 않으므로 아래의 명령을 수행 후 환경 설정을 새로이 하고 재 설치하도록 한다.
# rm config.cache
# make clean
또는
# make distclean // 위의 두 명령과 동일하다

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

-. 컴파일 및 설치
# make // 컴파일을 한다. 시스템 사양에 따라 10-20분 소요
# make install // MySQL을 설치한다.

iconv...
------------------------------------------

0. php디렉토리에서..
    PHP 재컴파일 할 경우
config.cache 파일 지우라 !
make clean
    ##rm -rf php


1. 기존의 /usr/local/php-4.3.2 을 없애고, 새로이..
    ##mv /usr/local/php-4.3.2 /usr/local/php-4.3.2____old
    ##tar zxvf php-4.3.2....


2. 설정
[14:17:20 Mon Dec 22 [root@myCom ~]# cd /usr/local/apache_1.3.22/
[14:17:47 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# ./configure


[14:17:58 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# cd ../php-4.3.2/
[14:18:22 Mon Dec 22 [root@myCom /usr/local/php-4.3.2]# ./configure --with-apache=/usr/local/apache_1.3.22 --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/apache_1.3.22/conf --with-exec-dir=/usr/local/apache_1.3.22/bin --with-enable-track-vars=yes --enable-ftp --enable-sockets --enable-sysvsem=yes --enable-sysvshm=yes --enable-shmop --enable-gd-native-ttf --enable-mailparse --with-gd=/usr/local/gd-2.0.1 --with-zlib --with-zlib-dir=/usr/lib  --with-jpeg --with-jpeg-dir=/usr/lib --with-png --with-png-dir=/usr/lib    --with-iconv

[14:19:37 Mon Dec 22 [root@myCom /usr/local/php-4.3.2] make; make install


[14:19:37 Mon Dec 22 [root@myCom /usr/local/php-4.3.2]# cd ../apache_1.3.22/
    [14:19:40 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# ./bin/apachectl stop
[14:19:40 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# ./configure --prefix=/usr/local/apache_1.3.22/ --activate-module=src/modules/php4/libphp4.a
[14:19:40 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22]# make;   make install
    [14:20:06 Mon Dec 22 [root@myCom /usr/local/apache_1.3.22/bin]# ./apachectl start
------------------------------------------

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
) {}
}
?>


<?

//****************************************************************************//
// Author       : shkim  ( isunnyk@empal.com , idxzone@naver.com )
// StartDate    : 2004.01.15.Thur
// LastUpdate :
//****************************************************************************//

########################################################
function make_csvFile($str, $saveFileName=""){
    //표준출력을 엑셀파일로 저장하기..
        /**
        //사용법
        $str = "HaHAhadskjfsk ";
        $t = make_csvFile($str, $saveFileName="");
        if( ! $t ){
            echo "<p>실패";
        }else{
            #echo "<p>성공적";
        }
        ***/

    $fileN = $saveFileName;
    if( ! $fileN ){
        $date = date("Ymd");
        $fileN = "tmp_$date.xls";
    }
    if( ! $str ){
        return false;
    }else{
        //표준출력을 엑셀파일로 저장하기..
        header( "Content-type: application/vnd.ms-excel" );
        header( "Content-Disposition: attachment; filename=${fileN}" );
        header( "Content-Description: PHP4 Generated Data" );

        echo $str;
        return true;
    }
}

########################################################
function makeCSV_DBTable_Col_Values($dbcon, $table, $where){
    //주의사항:  게시판의 경우...코멘트의 경우.... 개행이 존재한다. 이런 경우는 어떻게 할것인가?

    if( ! $table || ! $dbcon ){
        echo "[ERROR] 테이블과 connection 을 지정하시오.";
        exit;
        return false;
    }

    $SQL = "SELECT *  FROM $table  $where";
    $sz = mysql_query($SQL, $dbcon);
    if( ! $sz ){
        $error = mysql_error($dbcon);
        $errno = mysql_errno($dbcon);
        echo "[ERROR] : $errno : $error";
        exit;
        return false;
    }else{
        $sep_tab = "\t";
        $sep_nl = "\n";

        $STR_csv = "";

        //#### 필드명(칼럼명) 추출하기
        $field_Num = mysql_num_fields($sz);

        $fieldNameAry = array();
        for($i=0; $i<$field_Num; $i++){
            $fN_01 = mysql_field_name($sz, $i);
            #echo $fN_01 . $sep_tab;
            $STR_csv =  $STR_csv . $fN_01 . $sep_tab;

            $fieldNameAry[] = $fN_01;
        }//for
        #echo $sep_nl;
        $STR_csv =  $STR_csv . $sep_nl;

        //#### 필드명(칼럼명) 추출하기

        while($rows = mysql_fetch_array($sz)){
            for( $j=0; $j<$field_Num; $j++){
                $val = $fieldNameAry[$j];

                $tmp_name = $$val = $rows[$val];        //$$val ........... 칼럼명
                #echo "$tmp_name=". $rows[$val] .  $sep_tab;
                $STR_csv =  $STR_csv . $rows[$val] .  $sep_tab;
            }//for............. ex> $mem = $rows[mem]; ....
            #echo $sep_nl;
            $STR_csv =  $STR_csv . $sep_nl;
        }//while

        #echo  $STR_csv;
        return $STR_csv;
        return true;
    }
}
########################################################

function makeCSV_DBTable_Col_Values_Comment($dbcon, $table, $where){
    //주의사항:  게시판의 경우...코멘트의 경우.... 개행이 존재한다. 이런 경우는 어떻게 할것인가?

    if( ! $table || ! $dbcon ){
        echo "[ERROR] 테이블과 connection 을 지정하시오.";
        exit;
        return false;
    }

    $SQL = "SELECT *  FROM $table  $where";
    $sz = mysql_query($SQL, $dbcon);
    if( ! $sz ){
        $error = mysql_error($dbcon);
        $errno = mysql_errno($dbcon);
        echo "[ERROR] : $errno : $error";
        exit;
        return false;
    }else{

        $STR_csv = "";

        //#### 필드명(칼럼명) 추출하기
        $field_Num = mysql_num_fields($sz);

        $fieldNameAry = array();
        for($i=0; $i<$field_Num; $i++){
            $fN_01 = mysql_field_name($sz, $i);
            $STR_csv =  $STR_csv
                . "<td>". $fN_01 . "</td>";

            $fieldNameAry[] = $fN_01;
        }//for

        $STR_csv_TITLE =  "<tr>". $STR_csv . "</tr>";
        //#### 필드명(칼럼명) 추출하기


$beauty_gd = "\n";

       
        unset($STR_csv_TR);
        while($rows = mysql_fetch_array($sz)){
            unset($STR_csv); //아~주 중요.
            for( $j=0; $j<$field_Num; $j++){
                $val = $fieldNameAry[$j];

                $tmp_name = $$val = $rows[$val];        //$$val ........... 칼럼명
                $STR_csv =  $STR_csv
                        . "<td>".  $rows[$val] .  "</td>";
            }//for............. ex> $mem = $rows[mem]; ....
            ##$STR_csv_TR .=  "<tr>". $STR_csv . "</tr>" ;
            $STR_csv_TR .=  "<tr>". $STR_csv . "</tr>" . $beauty_gd;
        }//while

        $STR_csv_BODY = $STR_csv_TR;

        unset($STR_csv);
        $STR_csv = $STR_csv_TITLE . $STR_csv_BODY;


        #$STR_csv = "<table border=1>". $STR_csv . "</table>";
        $STR_csv = "<table border=1>". $beauty_gd. $STR_csv .  "</table>". $beauty_gd;
       
        #echo  $STR_csv;
        return $STR_csv;

        return true;
    }
}

?>


<?
######## 주의사항.............. make_csvFile() 이전에 어떤 표준출력도 있으면 안된다.


    include_once "make_xls_csv.inc";

    include_once "dbcon.inc";
    $dbcon = COM_mysqlConnect( & $dbconn );        //Very Important

    if( ! $table ){
        $table = "M_Members";
    }

$csv_sql = makeCSV_DBTable_Col_Values_Comment($dbcon, $table, $where);
#$csv_sql = makeCSV_DBTable_Col_Values($dbcon, $table, $where);
if( $csv_sql ){
    $str = $csv_sql;
    $saveFileName = "tmp_001_not.xls";
    $t = make_csvFile($str, $saveFileName);
    if( ! $t ){
        echo "<p>엑셀파일로 저장하기 실패";
    }else{
        #echo "<p>성공적";
    }
}else{
    echo "<p>결과물이 없으므로, 엑셀파일로 저장하지 않습니다.";
}


?>

'인터넷정보' 카테고리의 다른 글

PHP로 사용용량, 남은용량 알아내기  (0) 2007.10.16
gd 추가하기  (0) 2007.10.16
php 재컴파일시.. make distclean  (0) 2007.10.16
iconv 함수 사용가능토록  (0) 2007.10.16
get_magic_quotes_gpc()  (0) 2007.10.16
session_save_path() 2  (0) 2007.10.16
디렉토리..class.sh_dir_cls.inc  (0) 2007.10.16
파일업로드 삭제 클래스  (0) 2007.10.16
문자열 내의 HTML 태그를 모두 없애는 방법  (0) 2007.10.16
파일네임 금지  (0) 2007.10.16

########################################################################

<?
    include '../include/sun_define.inc';  //PROF_DATA_2_DIR


    include_once "../include/function__perm.inc";
   
    $dir = PROF_SESS_DIR; //session 이 등록될 디렉토리임.
        $perm = get_Permission($dir);
        if( $perm == 777 || $perm == 707 || $perm == 757 ){
            session_save_path($dir);
            session_cache_limiter('nocache, must_revalidate');
        }else{
            echo "<p>세션 디렉토리 chmod 를 변경하시오.  ".
                    "<br>$dir  : 현재는 $perm ";
            exit;
        }

        /**
        session_start();
        $gl_sessId = session_id();
        $file = $dir. '/'. 'sess_'. $gl_sessId;
        chmod($file, 0644);
        **/


    #echo $dir. "<hr>";
    #echo $file;
 

    #echo '$gl_sessId='. $gl_sessId. '<br><p>';

?>

########################################################################

<?


/**
        $perm = $this->get_Permission();
        if( $perm == 777 || $perm == 707 || $perm == 757 ){
        }else{
            $msg = '<b>'. $this->UP_DIR. '</b> - Permission 을 조정하시오. 현재의 퍼미션은 '. $perm . '입니다.';
            $this->Error($msg);
            return false;
        }


**/

function get_Permission($file_dir){
    //return : 755, 644
    $f = $file_dir;
    if( ! $f ){
        return false;
    }
    if( ! file_exists($f)){
        echo "<br>[$f]는 존재하지 않습니다.<br>";
        exit;
    }
    $n = fileperms($f);
    $octal = sprintf("%o", $n);  ## 8진수로
        //$octal = base_convert($n, 10, 8); ## 8진수로
        //$octal = decoct($n);  ## 8진수로
    $perm = substr($octal, -3);  ## 755, 644

    return $perm;
}

?>

########################################################################

'인터넷정보' 카테고리의 다른 글

gd 추가하기  (0) 2007.10.16
php 재컴파일시.. make distclean  (0) 2007.10.16
iconv 함수 사용가능토록  (0) 2007.10.16
get_magic_quotes_gpc()  (0) 2007.10.16
table_sql 을 엑셀파일로 다운받기.  (0) 2007.10.16
디렉토리..class.sh_dir_cls.inc  (0) 2007.10.16
파일업로드 삭제 클래스  (0) 2007.10.16
문자열 내의 HTML 태그를 모두 없애는 방법  (0) 2007.10.16
파일네임 금지  (0) 2007.10.16
mysql query 관련 class  (0) 2007.10.16

<?
/**
# Auth : shkim
# Email : isunnyk@empal.com, idxzone@naver.com
# Start Date : 2003.09
# Last Date : 2004.02.09.Mon
# Description : Dir..

### 특이사항 한가지..
    fileNUMofDIR( $dir ...) 에서... $dir 의 권한이 700 이어도 읽혀진다..  신기하다.. dir()이라는 함수자체가 그런가?  --aa


####### 사용법 #######
    include 'class.sh_dir_cls.inc';
    $cls_D = new Xena_Dir();
    $dir = $cls_D->CurDir;

    $t = $cls_D->fileNUMofDIR( $dir, $opt='num_dir');
    echo '<br>서브 디렉토리 갯수 : ' . $t[xNo_sub_dir];
    echo '<br>서브 파일 갯수 : ' . $t[xNo_sub_file];
    echo '<br>서브 all 갯수 : ' . $t[xNo_sub_all];
    echo '<br>목록들. : ' . $t[zz_OutPut];
    print_r($t); echo '<hr>';

#####
    $name_of_fileDir = 'class';
    $x = $cls_D->xena2_find_fileName($dir, $opt, $name_of_fileDir);
    if( $x < 0 ){
        echo $cls_D->ErrorMsg;
    }else{
        if( is_array($x) ){
            echo "<hr>찾는 단어 : " . $name_of_fileDir . '<br>';
            echo '찾은 갯수 : '. $x[find_No] . '<br>';
            print_r( $x[find_Str] ) ;
        }
    }
####################
**/



class Xena_Dir{
    var $viewDirSubFile_Lists_Sep = "<br>\n";


    var $CurDir;  //현재 디렉토리. 절대경로
    var $ErrorMsg;


    /******* Basic *********************/
    function Xena_Dir($d=''){
        if( ! trim($d)){
            $d = '.'; //현재 디렉토리
        }

        $this->CurDir = realpath($d);  //절대 경로로 바꾸어서.
        if( !  is_dir( $this->CurDir) ){
            $this->ErrorMsg = '[Error] : 디렉토리가 아니거나, 존재하지 않는 디렉토리입니다.';
            return false;
        }

        return true;
    }


   
    function fileNUMofDIR( $dir, $opt='', $viewType=''){
        //이 함수에서 굳이 $dir 를 주는이유는... 이 함수가 재귀함수이기 때문이다.

        //$opt : 파일의 갯수만 리턴할 것인지, 아지면 서브디렉토리의 갯수도 포함할 것인지.
        //$opt : 'num_file', 'num_all' , 'num_dir'

        switch($opt){
            case 'num_all':
            case 'num_file':
            case 'num_dir':
                break;
            default :
                $opt = 'num_all';
                break;
        }//end switch


        $dir = realpath($dir);  //절대 경로로 바꾸어서.
        if( ! is_dir($dir) ){
            $this->ErrorMsg = "<p>[Error]" . " File: " . __FILE__ . " on line: " . __LINE__ . '<br>';
            return  false;
        }

        $nl = $this->viewDirSubFile_Lists_Sep; //개행..br


        #echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<b>' . $dir. '/ </b> 디렉토리]' . '<p>';
        $no_all = 0;          $no_file = 0;         $no_dir = 0;
        $uuuu = '';
       

        unset($View_all);
        unset($View_file);
        unset($View_dir);
        $d = dir($dir);   //object...
        while( $entry = $d->read() ){
            if( $entry != '.' && $entry != '..' ){ //자기자신, parent..
                $no_all++;  //현재위치에서의...전체 : 파일+디렉

                $dir2 = $dir. '/'. $entry;
                if( ! is_dir($dir2) ){
                    $no_file++; //현재위치에서의... 파일의 갯수..

                    switch($opt){
                        case 'num_all':
                            #echo $dir. '/'. $entry. $nl;
                            $View_all .=  $dir. '/'. $entry. $nl;
                            break;
                        case 'num_dir':
                            break;
                        case 'num_file':
                            #echo $dir. '/'. $entry. $nl;
                            $View_file .= $dir. '/'. $entry. $nl;
                            break;
                    }//end switch

                   
                }else{
                    $no_dir++;  //현재위치에서의...

                    $z = $this->fileNUMofDIR($dir2, $opt , $viewType);
                    $no_all += $z[xNo_sub_all];
                    $no_file += $z[xNo_sub_file];
                    $no_dir += $z[xNo_sub_dir];

                    $uuuu = $uuuu . $z[zz_OutPut];
               

                    switch($opt){
                        case 'num_all':
                            #echo $dir. '/'. $entry. '/'.  $nl;
                            $View_all .=  $dir. '/'. $entry. '/'.  $nl;
                            break;
                        case 'num_dir':
                            #echo $dir. '/'. $entry. '/'.  $nl;
                            $View_dir .= $dir. '/'. $entry. '/'.  $nl;
                            break;
                        case 'num_file':
                            break;
                    }//end switch
                }
            }
        }//while


        #####@@@@@@@@@@@#####
        switch($opt){
            case 'num_all':
                $my_out_put_TT = $View_all;
                break;
            case 'num_file':
                $my_out_put_TT = $View_file;
                break;
            case 'num_dir':
                $my_out_put_TT = $View_dir;
                break;
        }//switch
        if( ! strcmp($viewType, 'view_p') ){
            #echo $my_out_put_TT ;
        }

        $xx = $my_out_put_TT;
        $outPut =  $xx.  $uuuu;
        #####@@@@@@@@@@@#####

        return array('xNo_sub_all'=>$no_all, 'xNo_sub_file'=>$no_file, 'xNo_sub_dir'=>$no_dir, 'zz_OutPut'=>$outPut);
    }//end function fileNUMofDIR
    /******* Basic *********************/



    /******* appended *********************/
    function get_Permission($dir){
        //return : 755, 644
        $file_dir = $dir;

        $f = $file_dir;
        if( ! $f ){
            return false;
        }
        if( ! file_exists($f)){
            echo "<br>[$f]는 존재하지 않습니다.<br>";
            return false;
        }
        $n = fileperms($f);
        $octal = sprintf("%o", $n);  ## 8진수로
            //$octal = base_convert($n, 10, 8); ## 8진수로
            //$octal = decoct($n);  ## 8진수로
        $perm = substr($octal, -3);  ## 755, 644

        return $perm;
    }


    function xena2_find_fileName($dir, $opt, $name_of_fileDir){
        $name_of_fileDir = trim($name_of_fileDir);
        if( ! $name_of_fileDir ){
            $this->ErrorMsg = '<p>[Error] : 찾고자하는 파일명/디렉토리명을 입력하시오.';
            return -1;
        }

        $tmpAry = $this->fileNUMofDIR( $dir, $opt);
        if( $tmpAry[xNo_sub_all] <= 0 ){
            return 0;  //발견하지 못함 . 에러는 아님
        }else{
            $d = realpath($dir);

            $find_No = 0;
            $find_Ary = array();

            $cprMSG = $tmpAry[zz_OutPut];
                $tmp2 = explode( $this->viewDirSubFile_Lists_Sep  , $cprMSG);
                $cnt = count($tmp2);
                for($i=0; $i<$cnt; $i++){
                    $oneLine = $tmp2[$i];
                    $oneLine = ereg_replace("^($d)", '', $oneLine); //find 명령어는 주어진 디렉토리의 하위를 검색하므로.
                    if( $oneLine ){
                        if( ereg("($name_of_fileDir)", $oneLine ) ){ //찾고자 하는 단어가 발견되는가?
                            $find_No++;
                            $find_Ary[] = $tmp2[$i];
                        }
                    }
                    #echo $oneLine . '<br>';
                }//for

                #echo '<hr>$find_No==' . $find_No;
                #print_r($find_Ary);

            if( $find_No == 0 ){
                return 0;  //발견하지 못함 . 에러는 아님
            }else{
                return array('find_No'=>$find_No, 'find_Str'=>$find_Ary);
            }

        }
    }
    /******* appended *********************/

}//end class

?>

제가 사용하고 있는 함수를 올려드리겠음돠..

음..첫번째 답변이자 자료인듯 한데..ㅡ.ㅡ? 제가 예전에 만들어서 지금도 유용하게 사용하고 있는 소스입니다..

음..이미지나 일반 파일도 구분없이 같이 올릴수 있으니 참조해서 사용하셔두 되구

그대로 사용하셔도 될겁니다.


보기 페이지에서는 이미지랑 일반 자료는 따로 처리됩니다.


간단한 주석들은 달아 놨구요.

그리고 그중에 의문점 등이 있으시면 글 남겨주시면 설명 드리겠습니다..

그럼..ㅡ.ㅡ;


------------------------- 기본 디비테이블 형태 ----------------------

CREATE TABLE contents_tbl (
  con_uid int(11) NOT NULL auto_increment,
  title varchar(100) NOT NULL default '',
  contents text,
  user_file varchar(100) default NULL,
  file_type char(1) default NULL,
  file_size int(11) default '0',
  reg_date date default NULL,
  PRIMARY KEY  (con_uid)
) TYPE=MyISAM COMMENT='컨텐츠정보 테이블';


------------------------ 함수부분 ---------------
#************************************************************************
#*   단일 Upload 파일 처리
#*   $POST_FILES        업로드한 파일 정보를 갖고 있는 배열
#*   $up_Path                저장할 경로
#*   $up_Var                처리할 변수명
#************************************************************************
function UpFile_Process($POST_FILES, $up_Path, $up_Var) {

 $file_size = $POST_FILES[$up_Var]["size"];
 if($file_size < 1) {
  Error("선택된 파일이 없거나 0Byte 이하의 파일입니다.\\n\\n확인후 다시 시도해 주세요.");
  return false;
 }

 $file_name = $POST_FILES[$up_Var]["name"];
 $tmp_file = explode(".", $file_name);
 $file_first = $tmp_file[0];
 $file_ext = strtolower($tmp_file[1]);

 if($file_ext == php3 || $file_ext == html || $file_ext == php || $file_ext == phtml || $file_ext == htm || $file_ext == pl || $file_ext == cgi) {
  Error("시스템 관련 파일들은 업로드 할수 없습니다.");
  return false;
 }
 if($file_ext == jpg || $file_ext == gif || $file_ext == bmp) $file_type = 'i';
 else $file_type = 'f';
 $file_name = ereg_replace(" ", "_", $file_name);
 $file_first = ereg_replace(" ", "_", $file_first);
 $tmp_file_name = $POST_FILES[$up_Var]["tmp_name"];

  // 업로드 폴더에 동일한 파일명이 있으면 파일이름을 바꿔서 올려줍니다.
  $i = 0;
 while (file_exists("$up_Path/$file_name")) {
  $i ++;
  $file_name = $file_first.$i.".".$file_ext;
 }

 $rRes = move_uploaded_file($tmp_file_name, $up_Path ."/". $file_name);
 @chmod($up_Path ."/". $file_name , 0777);

 $file_info[0] = $file_name; // 파일명을 반환합니다
 $file_info[1] = $file_size; // 파일사이즈를 반환합니다
 $file_info[2] = $file_type; // 파일타입을 반환합니다(파일타입은 이미지는 i 일반 파일은 f로 반환합니다. 여기는 다른걸로 변형도 가는하겠죠..*^^*
 // 예를 들면 swf파일은 s로 표현한다던지 해서 다르게 처리 가능할것입니다.
 return $file_info;
}


#************************************************************************
#*    파일삭제 function
#************************************************************************
function Del_File($up_Path, $up_Var)    {
 if(file_exists("$up_Path.$up_Var")) @unlink($up_Path.$up_Var);
}


#************************************************************************
#*    error display function
#*    에러 메세지를 ($msg)변수로 입력받아 에러메세지 출력후 현재페이지를
#*    뒤로 되돌리는 함수입니다.
#************************************************************************

  function Error($msg){
      echo("
      <script language='javascript'>
      <!--
          alert('$msg');
          history.back();
      //-->
      </script>
      ");
      exit();
  }
--------------------- 파일 업로드 부분 (html) ----------------------
이부분은 파일 내용을 저장할 파일입니다.

<form name='frm' method='post' action='업로드 및 디비 처리할 파일명' enctype='multipart/form-data'>
    제목 <input type='text' name='title' size='20'>
    내용 <textarea name='contents' rows='10' cols='10'></textarea>
    <input type='file' name='user_file' value='<?=$user_file;?>' class='input' size='30'>
</form>

<input type='submit' value='전송하기'>


-------------------- 파일 보이는 부분 처리 파일 ---------------------
<?
$sql = "select * from contents_tbl 이름 where con_uid=코드번호";
$result = mysql_query($sql);
$cnt = mysql_num_rows($result);
if($cnt > 0) {
  $row = mysql_fetch_object($result);
  $title = $row->title;
  $contents = nl2br($row->contents);
  $user_file = $row->user_file;
  $file_type = $row->file_type;
  $file_size = $row->file_size;
  $reg_date = $row->reg_date;
}
?>
<table>
  <tr>
    <td>제목</td>
    <td><?=$title;?></td>
  </tr>
  <tr>
    <td>내용</td>
    <td><?=$contents;?></td>
  </tr>
  <tr>
    <td>등록일</td>
    <td><?=$reg_date;?></td>
  </tr>
  <? if($user_file) { ?>
  <tr>
    <td> + 기존파일</td>
    <td>
    <?
    if($user_file) {
      if($file_type == 'i') {
        $photo_name = "이미지 저장경로/$user_file";
        $img_size = GetImageSize($photo_name); // 이미지일경우 이미지의 사이즈를 받아옵니다
        $img_width = $img_size[0]; // 이미지의 폭을 받아옵니다
        $img_height = $img_size[1]; // 이미지의 높이를 받아옵니다.
       
        // 이미지 폭을 200으로 제한한 경우입니다 이와 다른 이미지 사이즈일경우는 값을 주면 됩니다.
        if($img_width > 200) $img_src = "<img src='이미지경로/".$user_file."' border='0' width='200'>";
        else $img_src = "<img src='이미지경로/".$user_file."' border='0'>";
        echo"$img_src";
      } elseif($file_type == 'f') { // 파일일 경우
        echo"<a href='파일링크경로/$user_file' target='_blank'>$user_file</a>";
      }
    }
    ?>
    </td>
  </tr>
  <?
  }
  ?>
</table>


------------------------ 디비 처리 파일 ------------------------------------------
<?
// 디비 입력 부분입니다.
if($flag == "input") {
 # 등록일 생성
 $reg_date=date("Y-m-d");
  // 파일이 업되었을 경우 처리하는 부분입니다. 결과값은 $user_files 라는 배열에 받아옵니다. 파일저장경로는 뒤에 /까지 들어가야 합니다.
  if($user_file) $user_files = UpFile_Process($HTTP_POST_FILES, '파일저장경로', 'user_file');

  $sql = "insert into contents_tbl (title, contents, ";
  if($user_file) $sql .= "user_file, file_type, file_size";
  $sql .= " reg_date)
          values ('$title', '$contents', ";
  if($user_file) $sql .= "'$user_files[0]', '$user_files[2]', $user_files[1]";
  $sql .= "'$reg_date')";

  $location_url = '되돌아갈 경로';
}
// 디비 수정부분입니다.
elseif($flag == "update") {
  // 새로 파일 등록이 될경우
  if($user_file) {
    // 예전 파일은 지웁니다
    if($old_file) Del_File('파일경로',$old_file);
    $user_files = UpFile_Process($HTTP_POST_FILES, '파일경로', 'user_file');
  }
  $sql = "update contents_tbl set
          title='$title', contents='$contents'
          ";
  if($user_file) {
    # old_file delete
    $sql .= ",user_file='$user_files[0]', file_type='$user_files[2]', file_size=$user_files[1]";
  }
  $sql .= " where con_uid=$con_uid";
#  echo"$sql";
#  exit;
  // 되돌아갈 파일 경로(보기 페이지)
  $location_url = 'content_frm.php?flag=update&con_uid='.$con_uid;
}
// 삭제시
elseif($flag == "delete") {

  $sql2 = "select * from contents_tbl where con_uid=$con_uid";
  $result2 = mysql_query($sql2);
  $total2 = mysql_num_rows($result2);
  if($total2 > 0) {
    $row2 = mysql_fetch_object($result2);
    // 파일이 있으면 삭제합니다
    if($row2->user_file) Del_File('파일 경로', $row2->user_file);
  }
  $sql = "delete from contents_tbl where con_uid=$con_uid";
  // 되돌아갈 경로
  $location_url = 'content_code.php';

}
#echo"$sql";
#exit;
// 디비 처리
$result = mysql_query($sql);
// 이상없이 처리되었으면 지정된 경로로 돌아갑니다
if($result) {
  Ok_msg('이상없이 처리되었습니다.',$location_url);
}
elseif(!$result) {
  Error('처리중 오류가 발생했습니다');
}



'인터넷정보' 카테고리의 다른 글

iconv 함수 사용가능토록  (0) 2007.10.16
get_magic_quotes_gpc()  (0) 2007.10.16
table_sql 을 엑셀파일로 다운받기.  (0) 2007.10.16
session_save_path() 2  (0) 2007.10.16
디렉토리..class.sh_dir_cls.inc  (0) 2007.10.16
문자열 내의 HTML 태그를 모두 없애는 방법  (0) 2007.10.16
파일네임 금지  (0) 2007.10.16
mysql query 관련 class  (0) 2007.10.16
호스팅 받는 업체들 용량체크하는법  (0) 2007.10.16
Error Page Code  (0) 2007.10.16

<?

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

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

'인터넷정보' 카테고리의 다른 글

get_magic_quotes_gpc()  (0) 2007.10.16
table_sql 을 엑셀파일로 다운받기.  (0) 2007.10.16
session_save_path() 2  (0) 2007.10.16
디렉토리..class.sh_dir_cls.inc  (0) 2007.10.16
파일업로드 삭제 클래스  (0) 2007.10.16
파일네임 금지  (0) 2007.10.16
mysql query 관련 class  (0) 2007.10.16
호스팅 받는 업체들 용량체크하는법  (0) 2007.10.16
Error Page Code  (0) 2007.10.16
IFRAME 삽입 방법  (0) 2007.10.16

<?
# 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;
    }

?>

아래 소스는 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];
   }
}

?>

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


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


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


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


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

'인터넷정보' 카테고리의 다른 글

디렉토리..class.sh_dir_cls.inc  (0) 2007.10.16
파일업로드 삭제 클래스  (0) 2007.10.16
문자열 내의 HTML 태그를 모두 없애는 방법  (0) 2007.10.16
파일네임 금지  (0) 2007.10.16
mysql query 관련 class  (0) 2007.10.16
Error Page Code  (0) 2007.10.16
IFRAME 삽입 방법  (0) 2007.10.16
textbox의 값을 오른쪽부터 채우기.  (0) 2007.10.16
<frame> style:bgColor scrollbarFaceColor  (0) 2007.10.16
한글로된 색상표  (0) 2007.10.16

Error Page Code

인터넷정보2007. 10. 16. 16:24
'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;
?>

<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라는 숫자를 조절하면서 투명도를 조절하면 됩니다.

[예제]

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


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


text-align:right


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


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

<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>

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 국화과의다년초

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" 를 추가하지 않아도 저절로 알아서 내려갑니다.)

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

오늘은 웹상에서 음악을 재생하고자 할때 쓰이는 코드 중에 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 파일로 만들어 놓고, 하나씩 고쳐가며 기능을 살펴보시면 더욱 이해가 빠를 것이라 생각됩니다.

- 보통 기존의 프로젝트에서는 게시판의 제목이나 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


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


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

프레임 사용자가 한번쯤은 겪어봤을 고통(?)을 말끔히 해결해드릴만한 것이라 생각됩니다.

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

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

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

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

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\"");
?>

접속시마다 각각 다른 배경화면을 보여줍니다.
아래 소스를 <head> 태그안에 넣으세요.


<script language="javascript">
window.moveTo(0,0);
if (document.all) {
top.window.resizeTo(screen.availWidth,screen.availHeight);
}
else if (document.layers||document.getElementById) {
if (top.window.outerHeight<screen.availHeight||top.window.outerWidth<screen.availWidth){
top.window.outerHeight = screen.availHeight;
top.window.outerWidth = screen.availWidth;
}
}
bgs = new Array()
bgs[0]="bg1.jpg"
bgs[1]="bg2.jpg"
bgs[2]="bg3.jpg"
bgs[3]="bg4.jpg"
bgs[4]="bg5.jpg"
bgs[5]="bg6.jpg"
bgs[6]="bg7.jpg"
bgs[7]="bg8.jpg"
bgs[8]="bg9.jpg"
bgs[9]="bg10.jpg"
var now=new Date()
var Number = (now.getSeconds())%10
var Bg = bgs[Number]
var Parta ='<STYLE type="text/css">body{background-attachment:fixed;background-image:url("'
var Partc ='");background-repeat:no-repeat;background-position:center 100%}</STYLE>'
if (screen.width==800||screen.height==600)
document.write(Parta+Bg+Partc)
else if (screen.width==1024||screen.height==768)
document.write(Parta+Bga+Partc)
else
document.write(Parta+Bga+Partc)
</SCRIPT>

그리고 <body> 태그안의 background를 위의 배경그림중 하나로 지정해두시면 됩니다.


메모장으로 보면 글이 주루룩 붙어 나오고, 검정 네모가 있는 경우..


특수문자 \n의 개행문자를 제대로 출력하지 못해서 나오는 건데..


에디트플러스로 보면 멀쩡하지요. 줄바꿈도 잘 되어 있고...;;


그럴때는 에디트플러스에서 문서 -> 파일 형식 (CR/LF) 에서..


PC 로 선택하신후 저장하시면 됩니다.


PC 저장되어 있는걸 vi 로 볼때 두줄씩 떨어지면


에디트플러스에서 UNIX 파일형태로 저장하시면 됩니다.


그리고, 노트패드로 열어보세요~


혹시 모르는 분들을 위해서 올려봅니다.




window,Unix,MaC의 개행표시문자가 다르다.

/r/n,/n,/r  이던가... 어쨌든 이 차이 때문입니다.

노트패드는 윈도우 개행만 지원됩니다.

블로그를 사용하지 않는 사람들로부터 가끔씩 듣는 얘기 중에 하나가 ‘어렵다’ 라는 말 입니다. 그 이유를 가만히 생각 해 보니 블로그의 낯선 용어도 한 몫을 하고 있을 거라 판단 하여 블로그 웹사이트들을 둘러 보기로 했습니다.
재밌게도 Comment 와 Trackback 을 표기하는 명칭이 각기 다르더군요.

서비스형 블로그별 Comment 와 Trackback 명칭
비교항목 네이버 다음 야후 엠파스 이글루스 파란
Comment 덧글 댓글 답글 답글 덧글 코멘트
Trackback 엮인글 엮인글 참조글 관련글 트랙백 관련글

Comment

Comment는 본문(Post)를 읽고 그에 대한 의견을 남기는 기능 입니다.
이에 대한 번역은 주로 '덧글' 과 '댓글'이라는 명칭으로 나뉘는데, 덧글은 '본문에 덧붙이는 글' 이라는 의미, 댓글은 '본문에 대는 글' 이라는 의미를 갖고 있습니다. 댓글은 짧은 의견을 달아 둘 때 사용된다고 얘기 하거나 Reply로 해석하하며 덧글과 댓글을 분류하는 사람도 있지만 이 둘은 의미상으로는 비슷합니다. (국립국어원 2004년 신어로 수록 되면서 덧글과 댓글은 동의어라고 지정 해 두긴 했네요.)

여기서 문제가 되는 명칭은 다름 아닌 '답(答)글' 입니다.
답글은 Reply 즉, '응답, 대답하다' 라는 의미 입니다. 본문에 대한 응답을 남기는 것이므로 틀린 명칭이 아니라고 지적할 수 있겠지만 답글은 E-mail 이나, 흔히 사용하는 인터넷 게시판의 답글처럼 기능적으로 원본 글과 동등한 위치를 가질 수 있어야 합니다. 더욱이 'Comment 에 대한 답변' 기능과 의미가 겹쳐 혼란을 발생 시키는 요인이 되므로 '덧글'이나 '댓글'로 고쳐 사용하는 것이 좋다고 생각 합니다.

Trackback

Trackback은 Comment의 확장개념으로써 원본 Post에 대한 의견을 자신의 블로그에 등록하고 이를 원본 Post에 ping으로 남기는 기능으로, '엮인글', '참조글', '관련글', '먼댓글' 등으로 해석하여 불려지고 있습니다. Trackback 이란 의미를 우리 말로 해석하기에는 난해한 부분이 없지 않지만 엮인글이나 먼댓글과 같이 단어의 의미를 보고 어느정도 추론이 가능하도록 잘 지어진 명칭이 있는 반면에 참조글, 관련글 처럼 그 의미를 잘못 해석 할 수 있는 단어들은 다시 한번 생각 해 봐야 합니다.
참조글은 '참조한 글' 이라는 의미로 마치 논문의 참고문헌처럼 리스트에 열거된 블로그들의 내용을 인용하거나 도움을 받았다는 느낌이 강해 Trackback의 의미와는 사뭇 다르게 받아 드릴 수 있고, 관련글의 경우에는 본문의 내용와 비슷한 성격의 포스트들을 뽑아 포스트 하단에 출력하는 '관련 포스트' 기능과 의미가 겹치기 때문에 사용자로 하여금 혼란스러움을 유발시키는 요인이 될 수 있으므로 이 둘의 명칭을 '엮인글' 정도로 바꾸는 것이 좋습니다.

한글의 사용도 중요 하지만 이처럼 소통에 문제가 생기는 명칭의 사용은 오히려 사용하지 아니 한 것만 못할 수 있있으니. 올바른 의미와 용어의 통일로 블로그를 처음 접하는 사람들에게도 보다 쉽게 접근할 수 있도록 만드는게 중요할 것입니다.

출처 : http://1upz.com/94