2011년 12월 30일 금요일

자주 쓰는 mssql 명령어

DB 파일 추가.
EXEC sp_attach_db @dbname = N'kookil',
@filename1 = N'D:\SQLDATA\MSSQL.1\MSSQL\Data\kookil.mdf',
@filename2 = N'D:\SQLDATA\MSSQL.1\MSSQL\Data\kookil.ldf'

유저명정보매치
기존 데이터베이스 사용자를 SQL Server 로그인에 매핑합니다. Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오. 대신 ALTER USER를 사용하십시오.

USE [TESTDB]
EXEC sp_change_users_login "Update_One", "유저명", "유저명"

http://msdn.microsoft.com/ko-kr/library/ms174378.aspx

소유자 변경
SP_MSFOREACHTABLE 'sp_changeobjectowner "?", "dbo"'

http://gdbt.tistory.com/58

2011년 12월 29일 목요일

nowjs 설치

nowjs 를 설치 해 보았다.
세미나 가서 들은 한 서버에 50만명의 인원을 커버한다는 말의 임팩트가 아직도 남아있다.

centos 5.7 버젼에 설치.

yum groupinstall 'Development Tools' 

http://nodejs.org 에서 최신버젼을 다운.
cd /usr/local/src
wget http://nodejs.org/dist/v0.6.6/node-v0.6.6.tar.gz

tar zxvf node-v0.6.6.tar.gz
cd node-v0.6.6

 ./configure &&  make && make install

정상적으로 설치 되었다면 경로 등록을 해준다.

  vim /root/.bash_profile 에 아래 내용 추가.
  export NODE_PATH=/usr/local/lib/node_modules

일단 여기까지는 nodejs 설치 완료.

nowjs 설치를 위해 npm을 설치.
curl http://npmjs.org/install.sh > install.sh
 sh install.sh

npm install now -g
chown -R $USER /usr/local

설치 완료.

http://nowjs.com/doc/example 여기서 간단한 채팅 프로그램을 돌려 보았다.
정상적으로 아주 잘 돌아간다.

2011년 12월 27일 화요일

명령어 루프 돌리기

콘솔 상에  date 명령어를 1초마다 반복 실행한다.

while (true); do date; sleep 1; done

document.getElementById 가 null값을 가져오는 현상

document.getElementById 로 id 값을 불러오는 데, 자꾸 null값이 떠버린다.

해당 소스를 <head> 태그에 넣고 실행하면 이런 현상이 생긴다.

html 태그가 전부 생성 되기도 전에 자바스크립트 코드가 실행 되면서 발생하는 경우이다.

코드를 html 이 생성 완료된 시점(제일 하단)으로 옮겨서 실행시키면 정상적으로 동작한다.

2011년 12월 23일 금요일

php버젼에 맞지 않게 올렸을 때 발생한 문제.

서버에서 직접 접근시 문제가 없는 데, 웹에서는 아래와 같은 오류가 뜬다.
ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client

아파치 에러로그에서 아래와 같은 메시지가 계속 뜬다.
File 'NONEXISTENT/charsets/?.conf' not found (Errcode: 2)
Character set '#19' is not a compiled character set and is not specified in the 'NONEXISTENT/charsets/Index' file

아파치에서 php4모듈을 올려서 발생한 문제.
php5모듈로 변경해서 해결.

killall로 죽지 않는 프로세스 개별로 죽이기

httpd 가 이상하게 ps -ef 하면 띄워져 있는 걸로 나오는데, 죽지는 않는 묘한 상황이 발생한다.
killall httpd 로 죽지 않는 현상.

이럴 때는 이렇게 하자.


ps -ef | grep httpd | awk '{print $2}' | xargs -t -i kill -9 {}

2011년 12월 16일 금요일

[php] 이메일 주소 보호함수

 이메일 주소 보호 함수
 Link1   http://www.maurits.vdschee.nl (49)
 Link2   http://www.maurits.vdschee.nl/php_hide_email/ (136)
 
 
쓸모있는 함수 하나 소개합니다.


이메일 주소를 보호할 수 있는 함수 입니다. 


제작자 웹사이트는 http://www.maurits.vdschee.nl 이구요


License: Public domain.


Example


    <?php echo hide_email('test@test.com';); ?>


code


function hide_email($email) { $character_set = '+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';; $key = str_shuffle($character_set); $cipher_text = ''; $id = 'e'.rand(1,999999999); for ($i=0;$i<strlen($email);$i+=1) $cipher_text.= $key[strpos($character_set,$email[$i])]; $script = 'var a="'.$key.'";var b=a.split("").sort().join("");var c="'.$cipher_text.'";var d="";'; $script.= 'for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));'; $script.= 'document.getElementById("'.$id.'").innerHTML="<a href=\\"mailto:"+d+"\\">"+d+"</a>"'; $script = "eval(\"".str_replace(array("\\",'"'),array("\\\\",'\"'), $script)."\")"; $script = '<script type="text/javascript">/*<![CDATA[*/'.$script.'/*]]>*/</script>'; return '<span id="'.$id.'">[javascript protected email address]</span>'.$script; } 
 

[php]파일 확장자 추출

echo strrchr( "test.jpg" , "." );  // 결과 : ".jpg

php에서 cband 트래픽 리셋하기.

 $cmd = "wget -q --http-user=$admin_id --http-passwd=$admin_pass http://${my_domain}/traffic_admin/index.php?reset=${my_domain}:$my_reset_code";

2011년 12월 8일 목요일

[php]특정 문자 뒤쪽으로만 가져오기

$data는 문자열.

substr($data, strpos($data, '<?xml'));

요렇게 하면 <?xml 문자뒤쪽으로만 가져옴. (<?xml 포함)


fsockect으로 xml 긁어와서 사용하는 데, 쓰임.

2011년 11월 15일 화요일

구글 캘린더를 통해 무료 sms 발송

<?
/*구글 캘린더를 통해 sms 발송*/

require_once 'Google/Calendar.php';

$ID='xxxxx@gmail.com';
$PW='xxx';

$startTime=date("Y-m-d\TH:i:s+09:00", time());
$endTime=date("Y-m-d\TH:i:s+09:00", time()+180);

$title='타이틀';
$content='설명';
$where='장소';

$service = new Google_Calendar;
if (!$service->requestClientLogin($ID,$PW)) {
exit("ClientLogin has failed\n".$service->getResponseBody());
}

$entry = <<<GDATA
<entry
xmlns="http://www.w3.org/2005/Atom"
xmlns:gd="http://schemas.google.com/g/2005">
<category
scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/g/2005#event">
</category>
<title type="text">$title</title>
<content type="text">$content</content>
<gd:where valueString="$where">
</gd:where>
<gd:when
startTime="$startTime"
endTime="$endTime">
<gd:reminder minutes='0' method='sms' />
</gd:when>
</entry>
GDATA;

if (!$service->insert($entry, "http://www.google.com/calendar/feeds/xxxxxxxxxxxxx@group.calendar.google.com/private/full")) {
exit("Inserting an entry has failed\n".$service->getResponseBody());
}

?>

이 파일이 필요함.
추가기능 밖에 없음.

xxxxxxxxxxxxx@group.calendar.google.com << 이부분은 캘린더ID
기본 캘린더를 쓰려면 default

참고로 캘린더ID는 여깄음.

사용자 삽입 이미지

출처:http://codepasta.net/50
http://www.rcdtokyo.com/etc/gdataapis/

sendmail 유용한 명령어

큐 확인.
mailq


강제 큐 송출
sendmail -oQ/var/spool/mqueue -oT1d -q -v


---------------------------------------------------------------------------
멀티큐는 기본.
mkdir /var/spool/mqueue/q{1,2,3,4,5,6,7,8,9}


/etc/mail/sendmail.cf에서 아래처럼 변경.
# queue directory
#O QueueDirectory=/var/spool/mqueue
O QueueDirectory=/var/spool/mqueue/q*

명령어 사용.
perl -pi -e 's/O\ QueueDirectory=\/var\/spool\/mqueue/O\ QueueDirectory=\/var\/spool\/mqueue\/q\*/g' /etc/mail/sendmail.cf

재시작.
service sendmail restart

알테온 3804 [로드밸런싱 설정시 느려지는 접속이 잘 안되는 현상.]

알테온 3804를 이용한 로드밸런싱을 구축하였다.

예전 config설정을 사용하는 거라 크게 문제는 없을 거라 생각하였다.

설정을 다 마치고 테스트를 하는 데, 웹페이지가 뜨는 곳이 있고, 안뜨는 곳이 있는 현상이 발생하였다.

원인은 새로 추가하는 서버들에대해서는 L4스위치 바로 밑에 L2스위치를 놓고 연결하여 문제가 되지 않았지만, 기존에 사용하였던 장비들은 L4밑에 있지 않았는데, health check에서는 살아있는 걸로

나와 그냥 셋팅 하였던게 문제였다.

해당 서버들을 disable 시켜 놓고 테스트 하니, 정상적으로 접속 되는 것 확인 했다.

해당 서버들의 물리적인 랜선을 L4 밑 L2 스위치에 넣고 enable 하니 정상적으로 동작 했다.

워드, 엑셀, 파워포인트 , xml 형식으로 출력 , php 헤더설정

header("Content-Type: text/plain;charset=euc-kr");

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


header( "Content-Disposition: attachment; filename=search_result.xls" );


//한글 출력


 


엑셀 <? header("Content-Type: application/vnd.ms-excel"); ?>

워드 <? header("Content-Type: application/msword"); ?>

파워포인트 <? header("Content-Type: application/vnd.ms-powerpoint"); ?>

ASP에서 엑셀
 <% Response.Buffer = TRUE Response.ContentType = "application/vnd.ms-excel" %>





해더 부분의 ContentType을 지정해서 해당되는 형식으로 출력하도록 만드는 것






header("Content-Type: application/vnd.ms-excel");  
header("Content-Disposition: attachment; filename=직원전화.xls");
header("Content-Description: PHP4 Generated Data" );  






xml형식을 출력



header("Content-type: application/xml");
header("Content-Disposition: attachment; filename=파일명);
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");









출처:http://www.mins01.com/20090118/board/board.php?type=read&b_id=tech&sh=title&cat=&page=1&b_idx=29

2011년 10월 26일 수요일

리눅스 콘솔 입력창에서 mysql 쿼리 날리기.(실행결과를 파일로 저장하기)


몇몇 업체에서 테이블의 정보를 보내달라고 할 때가 있다.
이 때 테이블의 내용이 몇 줄 안되면 mysql 들어가서 select 해서 이렇게 해서 나온 화면을 복사해서
넘기곤 했다.

문제는 내용이 몇천줄 이상가면 화면이 넘어가서 복사도 할 수 없다.

알고 보면 엄청 간단한데 검색해도 잘 안나와서 적어본다.

콘솔창에서 쿼리문을 날리고 이걸 파일로 저장하면 참 좋을 텐데, 어떻게 방법없나 검색해 봤지만
검색나오는 게 없더라...

오늘 bash 스크립트 짠다고 여기저기 뒤지다.
드디어 발견했다.

http://www.joinc.co.kr/modules/moniwik ··· isc.html


10.5번을 보면 아래와 같은 소스가 나온다.



#!/bin/bash 
DBS=`mysql -uroot -e"show databases"` 
for b in $DBS ; 
do 

mysql -uroot -e"show tables from $b" 
done




mysql 옵션에 -e 를 주면 된다는 것을 알수 있다.

응용해서 해보면 아래와 같이 할 수 있을 것이다.
/usr/local/mysql/bin/mysql -uroot -p패스워드 -e "use database_1;show tables" > table.txt

프로세스 위치 확인.

 

예전에 특정서버에서의 패킷수치가 이상하리만치 높은 적이 있었다.


해당 서버에 들어가서 확인해 보았더니, udp.pl 이라는 UDP FLOODING 프로그램이 돌고 있는 걸 확인 할 수 있었다.


결국에는 find로 전체 서버를 뒤져서 찾아내어 삭제 했던 기억이 있다.


웹 서핑중 위 방법보다 더 좋은 방법을 찾게 되어 간단히 포스팅 할까 한다.


 출처는 여기


 

프로그램의 위치 확인


1.




# ls -l /proc/PID/exe


# ls -l /proc/1138/exe 
Sample outputs:


lrwxrwxrwx 1 root root 0 2010-10-29 10:20 /proc/1138/exe -> /usr/sbin/mysqld



2.




# ls -l /proc/PID/cwd


# ls -l /proc/3813/cwd
Sample outputs:



lrwxrwxrwx 1 vivek vivek 0 2010-10-29 12:04 /proc/3813/cwd -> /home/vivek


3,





# pwdx PID << 명령어임


# pwdx 3813


Sample outputs:



3813: /home/vivek


유용한 정보였음.~




 

php로 msword 파일 만들기

header("Content-type: application/vnd.ms-word"); 
header("Content-Disposition: attachment;Filename=document_name.doc");
echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "<b>My first document</b>";
echo "</body>";
echo "</html>";

출처:http://ko.w3support.net/index.php?db=so&id=124959

2011년 10월 24일 월요일

td값 공백시 선 유지방법

목적 : 테이블에 css를 적용할때 td값이 비어 있을때 선이 안보여서 강제로 스페이스나 공백을 넣어줘야 하는 경우가 있는데요 그것을 간단한 스타일 시트로 처리가 가능해서 팁으로 올려봅니다.

style="border-collapse:collapse;"

table{border-collapse:collapse;}


출처:http://codeigniter-kr.org/source/view/118/page/5/

Input 박스 border 안보이게 하기

테투리가 보이지 않게 된다.

<style type="text/css">
<!--
.invisible {
        clear: none;
        border: 0px none;
        float: none;
        background-color: #ffffff;
        /* 배경을 투명하게 할경우에는 background-color: transparent; */
}
-->
</style>

<input name="textbox1" type="text" class="invisible" value="이건 input text box에요."><br>
<input name="button1" type="button" class="invisible" value="이건 input button이에요."><br>

출처:http://seobangnim.com/zbxe/?document_srl=1731