php2012. 7. 11. 13:47

$conn = mysqli_connect("localhost", "test", "test", "test");

 $conn->query("Create table test_model"."(year integer, model varchar(50), accel REAL)");

 $stmt = $conn->prepare("insert into test_model values(?,?,?)");
 $stmt->bind_param("isd", $year, $model, $accel);

 

 prepare 의 사전적 의미를 생각한다면 쉽게 이해할 수 있다.

 

 $stmt = $conn->prepare("insert into test_model values(?,?,?)");

 

 쿼리를 이렇게 날리겠다. 라는 의미라고 생각해도 무방할 듯 하다.

 $stmt->bind_param("isd", $year, $model, $accel);

 

 여기서는 컬럼이 총 3개인데 파라메타 값이 4개가 들어가 있다.

 

 첫 isd 를 제외하고는 나머지는 컬럼에 들어갈 값이라는 걸 쉽게 알 수 있다.

 

 isd를 잘 살펴 보면 의외로 답은 쉽게 나온다.

 

 i 의 경우는 integer 를 의미하고

 

s 의 경우는 문자(string)을 의미하고

 

d 의 경우는 double 형을 의미한다.

 

$year, $model, $accel 의 순서로 입력이 되니 첫번쨰 파라메터 역시 isd로 써주면 된다.

 

추가적으로 b 옵션이 하나 있는데 이것은 blob 형으로 들어간다고 메뉴얼에.. ㅡ,,ㅡ


/*
 $year = 2001;
 $model = '156 2.0 Selespeed';
 $accel = 8.6;
 $stmt->execute();

 $year= 2003;
 $model = '147 2.0 Selespeed';
 $accel = 9.3;
 $stmt->execute();

 $year = 2004;
 $model = '156 GTA Sportwagon';
 $accel = 6.3;
 $stmt->execute();
*/

마지막으로 위 주석으로 된 코드에 주석을 없애고 실행을 하면 디비에 잘 들어가 있는 것을

 

확인할 수 있다.

 

디비에서 가져올 경우는

 

 $conn = mysqli_connect("localhost", "test", "test", "test");

 $stmt = $conn->prepare("select * from test_model order by year");
 $stmt->execute();

 $stmt->bind_result($year, $model, $accel);

 echo "<table>\n";
 echo "<tr><th>model</th><th>0-100 km/h</th></tr>\n";

 while($stmt->fetch()){
  echo "<tr><td>$year $model</td><td>{$accel} sec</td>\n";
 }
 echo "</table>\n";

Posted by 다오나무
php2012. 7. 11. 12:21

http://www.xxx.org/home/hosting_users/xxx/www/include/board/images/ico_attach_img.gif 
이 경로가 어딜 봐서 맞는 경로로 보인다는지 이해가 안가는 군요.. 
서버경로는 제외하고 아파치 셋팅한 경로만 사용해야 합니다~! 

<img src="<?=$_SERVER['DOCUMENT_ROOT']?>/include/board/images/ico_attach_img.gif"/> 
가 아니라.. 
<img src="/include/board/images/ico_attach_img.gif"/> 
또는 
<img src="http://<?=$_SERVER['HTTP_HOST']?>/include/board/images/ico_attach_img.gif"/> 
등의 방법으로 해야합니다..

Posted by 다오나무
iOS2012. 7. 10. 18:42

어제 클리앙 모두의 공원 게시판은 NSString 관련 메소드만 가지고 파싱을 해 보았는데요. 코드도 꽤 길어지고 굉장히 무식한 방법이었습니다. 어제 포스팅 마지막에 언급했던대로 좀 더 편한 방법들을 살펴보려고 하는데요. hpple라는 API가 있습니다. 나온지도 오래되었고(업데이트 된지도...), 제가 원래 외부API를 잘 사용안하는데요. 뭐 대체제가 없다보니 써 보겠습니다.


일단 아래 주소에서 받으실 수 있구요.

https://github.com/topfunky/hpple


프로젝트에 6개의 파일을 포함시켜 주시면 됩니다.

TFHpple.h

TFHpple.m

TFHppleElement.h

TFHppleElement.m

XPathQuery.h

XPathQuery.m


그리고 환경설정을 두개 해 주셔야 하는데 PROJECT환경설정에서(Build Settings) All을 누르시면 여러가지 설정들을 찾아보실 수 있는데요. 설정해야될 것은 아래와 같습니다.

Header Search Paths  : ${SDKROOT}/usr/include/libxml2

Other Linker Flags : -lxml2


그리고 마지막으로 html파싱이 이루어지는 프로젝트에 TFHpple.h를 import 시켜주시면 설정은 다 끝났습니다.


프로젝트에 포함시킨 소스파일들을 한번 살펴보면 실제 파싱은 XPathQuery에서 이루어 지고 있음을 확인할 수 있습니다. 다른 소스들도 복잡하지 않으니 한번 살펴보시면 좋을것 같고요.


어제 클리앙 모공을 파싱했던 부분 기억나시나요. 가져온 데이터가 게시물제목, 링크, 아이디, 조회수, 글쓴시간이었는데요. 실제 데이터 파싱하는 부분만 구현 해 보겠습니다.


// 클리앙 모공

NSString * path = @"";

NSError * error;

NSString * stringFromURL = [[NSString allocinitWithContentsOfURL:[NSURLURLWithString:@"http://clien.career.co.kr/cs2/bbs/board.php?bo_table=park"encoding:NSUTF8StringEncodingerror:&error];

    

if(stringFromURL == nil)

{

    NSLog(@"Error reading URL at %@\n%@", path, [error localizedFailureReason]);

}

윗 부분은 어제 했던 부분과 동일하고요.


NSData * data = [stringFromURL dataUsingEncoding:NSUnicodeStringEncoding];

        

// Create parser

TFHpple * xpathParser = [[TFHpple allocinitWithHTMLData:data];

        

// 타이틀 & URL

NSArray * elements = [xpathParser searchWithXPathQuery:@"//tr//td[2]//a"];

for(int i = 0 ; i < [elements count] ; i++)

{

    NSLog(@"%@", [[elements objectAtIndex:i] content]);                             // 타이틀

    NSLog(@"%@", [[[elements objectAtIndex:i] attributes] valueForKey:@"href"]);    // URL

}

타이틀과 URL을 파싱해서 가져오는 방법입니다. 오렌지색으로 하이라이트 된 부분과 일치하는 형태를 찾아서 elements에 배열형태로 넣는 방법인데요. tr태그 내부에 td태그가 2번 나온 뒤 a태그가 나오는 형태를 찾으라는 말인데요.


<tr class="mytr">

<td>10816621</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816621' >[차단공시]삭제요청에 의한 차단공시</a></td>

<td class="post_name"><img src='../data/member/ci/cipher.gif' width='54' height='16' align='absmiddle' border='0'></td>

<td><span title="2012-02-15 17:25:24">17:25</a></td>

<td>1</td>

</tr>

<tr class="mytr">

<td>10816618</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816618' >초고도 근시인데 라섹했습니다</a></td>

<td class="post_name"><img src='../data/member/hi/hikari.gif' width='60' height='16' align='absmiddle' border='0'></td>

<td><span title="2012-02-15 17:25:11">17:25</a></td>

<td>10</td>

</tr>

<tr class="mytr">

<td>10816613</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816613' >암스텔담에선 자전거 뒤에 타려면  정도 운동 신경은 가져야...</a></td>

<td class="post_name"><span class='member'>Guylian</span></td>

<td><span title="2012-02-15 17:25:01">17:25</a></td>

<td>36</td>

</tr>

위의 html 중 색칠해진 부분들이 배열에 들어가게 됩니다. 여기서 한가지 보셔야 할 것은..


content의 경우 해당 태그가 열리고 닫힌 사이의 값, 즉 아래에서 색칠된 부분입니다.

<tr class="mytr">

<td>10816618</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816618' >초고도 근시인데 라섹했습니다</a>

<a 태그가 열리고, </a>로 닫힌 사이의 값입니다.


attribute의 경우 해당 태그 내부에서 key=value 형태로 저장된 값입니다. NSDictionary형의 값이기 때문에 태그의 key가 딕셔너리의 키가 되고 태그의 value가 딕셔너리의 value가 됩니다.

<tr class="mytr">

<td>10816618</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816618' >초고도 근시인데 라섹했습니다</a>

여기에서는 오렌지색이 key가 되고  청록색이 value가 되기 때문에 

[[[elements objectAtIndex:i] attributes] valueForKey:@"href"]


이런식으로 value를 가져올 수 있었습니다.


그럼 아이디를 가져오는 방법을 살펴볼텐데요. 아이디의 경우 두가지 형태가 있기 때문에 조금 복잡합니다. 일단 html 로 아이디가 스트링인 경우와 아이디가 이미지인 경우를 살펴보면요.

<tr class="mytr">

<td>10816618</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816618' >초고도 근시인데 라섹했습니다</a></td>

<td class="post_name"><img src='../data/member/hi/hikari.gif' width='60' height='16' align='absmiddle' border='0'></td>

<td><span title="2012-02-15 17:25:11">17:25</a></td>

<td>10</td>

</tr>


<tr class="mytr">

<td>10816613</td>

<td class="post_subject">&nbsp;&nbsp;<a href='../bbs/board.php?bo_table=park&wr_id=10816613' >암스텔담에선 자전거 뒤에 타려면  정도 운동 신경은 가져야...</a></td>

<td class="post_name"><span class='member'>Guylian</span></td>

<td><span title="2012-02-15 17:25:01">17:25</a></td>

<td>36</td>

</tr>

3번째 td의 다음 element가 달라지는 것을 알 수 있는데요. 몇가지 방법이 떠오르긴 합니다만 직관적으로 스트링을 가져와서 nil이면 이미지로 판단해서 처리하는 방법으로 진행하겠습니다.

// 아이디

elements = [xpathParser searchWithXPathQuery:@"//tr//td[3]"];


for (int i = 0; i < [elements count]; i++) 

{

    if(((NSString *)[[[[elements objectAtIndex:i] childrenobjectAtIndex:0]content]) != nil)

    {

        // 아이디가 스트링이면 스트링 출력

        NSLog(@"%@" , ((NSString *)[[[[elements objectAtIndex:i] childrenobjectAtIndex:0content]) ) ;

        

    }else

    {

        // 아이디가 이미지이면 링크 출력

        NSLog(@"%@", ((NSString *)[[[[[elements objectAtIndex:i] childrenobjectAtIndex:0attributes]valueForKey:@"src" ]));

    }

}

위에서 한 방법과 똑같은 방법이기 때문에 따로 상세설명은 안하겠습니다. 이 코드 위쪽에 첨부된 html부분과 잘 비교해 보세요.


뭐 여기까지 왔다면 글 작성시간과 조회수는 쉽습니다.

// 글작성시간

elements = [xpathParser searchWithXPathQuery:@"//tr//td[4]//span"];

NSLog(@"%@", [[elements objectAtIndex:0content]);

        

// 조회수

elements = [xpathParser searchWithXPathQuery:@"//tr//td[5]"];

NSLog(@"%@", [[elements objectAtIndex:0content]);

이렇게 필요한 정보를 다 가져올 수 있었습니다. 다음번에는 정규식을 이용한 파싱을 해 보겠습니다.


Stack overflow에서 보니 절대 html파싱은 정규식으로 하지 말라는 말이 많이 보입니다. 정규식이 다 좋은데 익숙해지지 않으면 읽기가 쉽지 않기때문에 그런데요. 사실 저도 정규식에는 근본없는 배움인지라...


Posted by 다오나무
php2012. 7. 10. 13:03




· 이제 아는 정규식을 총동원해서 규칙을 생성해주시면 됩니다! 말은 무지 간단하네요^^;


//C:\CodeIgniter_2.1.0\system\libraries\Form_validation.php

    /**
     * Convert PHP tags to entities
     *
     * @access    public
     * @param    string
     * @return    string
     */

    public function encode_php_tags($str)
    {
        return str_replace(array('<?php', '<?PHP', '<?', '?>'), array('&lt;?php', '&lt;?PHP', '&lt;?', '?&gt;'), $str);
    }
    
    public function alpha_number_kr($str) { //특수문자, 한글, 영문, 숫자
        return ( ! preg_match("/^([\+\.\:\-_ 가-힣a-zA-Z0-9])+$/i", $str)) ? FALSE : TRUE;
    }
    
    public function alpha_kr($str) { //한글, 영문
        return ( ! preg_match("/^([가-힣a-zA-Z])+$/i", $str)) ? FALSE : TRUE;
    }
    
    public function id($str) { //맨 앞글자 반드시 영문, 그 뒤 영문, 숫자, 특수문자
        return ( ! preg_match("/^([a-zA-Z]+[a-zA-Z0-9\-\_\.])+$/i", $str)) ? FALSE : TRUE;
    }
    
    public function zero($str) { //숫자 0
        return ( $str == '0') ? FALSE : TRUE;
    }
    
    public function blank($str) { //빈칸
        return ( isset($str)) ? FALSE : TRUE;
    }
    
    public function noCheck($str) { //not 'no'
        return ( $str != 'no') ? FALSE : TRUE;
    }

Posted by 다오나무
php2012. 7. 10. 12:55



Posted by 다오나무
node.js2012. 7. 9. 23:05

이제 node.js 를 시작해 보려 합니다.

트랜드에 조금 뒤쳐졌지만.. 시작해 봅시다.

왜 node.js에 관심을 가지게 되었는가 부터 배경을 설명하면..

간단한 설치 및 유연한 속도 또한 확장성 부분에서 뛰어날 수 있다라는 관점..

특히나 js 를 사용한다는 점.. 시스템을 접근해서 만질 수 있다는 점.. 여러가지 메리트가 있더라고요.

자 그럼 설치 해 보고 시작해 봅시다.

저는 우분투를 사용하기 때문에, 우분투 리눅스 위주로 작성합니다.

설치방법: 일단 apt-get 을 이용해 필요한 요소를 설치 합니다.

> sudo apt-get install g++ curl libssl-dev apache2-utils

> sudo apt-get install git-core

기본 설치는 완료 했고요.

이제 실제 node.js 라이브러리를 설치 합니다.

nodejs.org 로 가서 최신 버전을 받는다.

> wget http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz

> cd node-v0.6.14

> ./configure

> make

> sudo make install

샘플코드

 test_node.js 파일을 만드시고

var http = require('http');

http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});

  res.end('Hello Node.js\n');

}).listen(8282, "127.0.0.1");

console.log('Server running at http://127.0.0.1:8282/');

이렇게 넣으시고.. 커맨드 창에서

> node test_ndoe.js

이렇게 하시고 wget 127.0.0.1:8282 라고 하시면 확인이 가능합니다.

따로 ip 지정 안하시면 외부 웹으로 접근도 가능합니다.:)

그럼 몇 가지 샘플을 한 번 더 볼까요.

hello.js

// helloworld1.js

var sys = require("sys")

setTimeout(function() {

    sys.puts("world");

}, 2000);

sys.puts("hello");


// helloworld_sigint.js

puts = require("sys").puts;

setInterval(function() {

    puts("hello");

}, 500); 

process.addListener("SIGINT", function() {

    puts("good-bye");

    process.exit(0);

});


// hello_tcp.js

var tcp = require("net");

tcp.createServer(function(c) {

     c.write("hello!\n");

    c.end();

 }).listen(8000);


// hello_html.js

var http = require("http");

http.createServer(function(req, res) {

    res.writeHead(200, {"Content-Type": "text/plain"});

    res.write("Hello\r\n");

    res.write("World\r\n");

    res.end();

}).listen(8080);


// hello_stream.js

var http = require("http");

http.createServer(function(req, res) {

    res.writeHead(200, {"Content-Type": "text/plain"});

    res.write("Hel");

    res.write("lo\r\n");

    setTimeout(function() {

        res.write("World\r\n");

        res.end();

    }, 2000);

}).listen(8000);


응용할 만한게 참 많은 것 같다. 재미있네?

'node.js' 카테고리의 다른 글

node.js용 iOS 푸쉬 인증서를 생성해 보자.  (0) 2012.10.31
node.js 에서 debugger 를 사용해보자.  (0) 2012.10.26
Posted by 다오나무
우분투2012. 7. 8. 02:39

이제 우분투 FTP 서버로 여러개 프로그램이 있는데 속도와 안정성면에서 평가가 좋은 vsftpd 서버를 설치해보도록 하겠습니다.


1. 슈퍼데몬 xinetd가 설치되지 않았을 경우에 슈퍼데몬부터 설치합니다. 

    (터미널 명렁어이며 [시냅틱 패키지 관리자]에서 설치하셔도 됩니다.)

    sudo apt-get install xinetd


2. ftp 서버를 설치합니다.

    sudo apt-get install vsftpd


3. ftp 서버를 중지합니다. 

   (기억이 잘 안나서 추가합니다. 혹시 설치시 바로 서비스가 ftp 독립데몬으로 실행중이면 서비스를 중단합니다.)

   sudo /etc/init.d/vsftpd stop (또는 BootUp Manager에서 확인 후 종료해도 됩니다.)


4. ftp 설정을 변경 합니다. (패시브 모드 추가)

   sudo gedit /etc/vsftpd.conf


(아래 옵션 사항을 찾아서 변경합니다. 앞에 # 표시가 있는 경우 제거해 줍니다.

 max_clients, max_per_ip는 기본적으로 없으므로 마지막에 추가합니다.)

listen = NO                              => 독립데몬 -> 슈퍼데몬

anonymous_enable=NO            => 익명 사용자 접속 허가 여부 -> 접속 불가
local_enable=YES                    => 로컬 사용자 접속 허가 여부 -> 접속
write_enable=YES                    => 쓰기 권한 허가 여부 -> 가능
local_umask=022                     => 디렉토리나 파일 생성시 퍼미션 -> 755
dirmessage_enable=YES          => FTP 접속시 메시지 보이기 여부 -> 보여줌
use_localtime=YES                  => 업로드 파일 로컬 시간 사용 여부 -> 사용
connect_from_port_20=YES      => ftp 데이터 포트인 20번 포트 사용 여부 -> 사용
chroot_local_user=NO              => 홈 디렉토리 상위 폴더 접근 여부 -> 금지
max_clients=2                         => 클라이언트 최대 접속 수 -> 개인적으로 2개 설정함
max_per_ip=2                          => IP당 접속할 수 있는 클라이언트 수 -> 개인적으로 2개 설정함

(패시브 모드로 접속할 수 있도록 아래 사항은 마지막에 추가 합니다.)
#passive mode
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=50000
pasv_max_port=51000
pasv_addr_resolve=YES
pasv_address=개인 DDNS

5. 슈퍼데몬 파일을 생성 합니다.
    sudo gedit /etc/xinetd.d/ftp

(아래 내용을 추가 합니다.)
service ftp
{
     disable                = no
     socket_type        = stream
     wait                    = no
     user                    = root
     server                  = /usr/sbin/vsftpd
     per_source          = 5
     instances            = 200
     log_on_success  += PID HOST DURATION
     log_on_failure      += HOST
}

6. 서비스를 재 실행합니다.
    sudo /etc/init.d/xinetd restart

Posted by 다오나무
우분투2012. 7. 7. 21:16

FTP 를 이용해서 계정에 파일을 올리게 되면 FTP 접속시 입력한 아이디가 바로 소유자가 됩니다. 하지만 PHP 를 이용해서 생성된 파일 또는 디렉토리는 일반적으로 nobody 소유가 됩니다.

 

이 소유권은 웹서버가 구동될때 지정된 소유권자 인데요. Apache 의 httpd.conf 파일을 보시면...

 

user nobody

group nobody

 

라는 설정이 있습니다. 이는 아파치 데몬이 작동할 때 nobody 라는 사용자로 작동하라는 것입니다. 그렇기에 Apache 서버하에 작동하는 PHP 역시 같은 사용자가 적용이 되겠지요.

그래서 PHP를 이용해서 파일 또는 디렉토리를 생성하면 nobody 소유가 됩니다.

 

이런 문제로 인해 프로그램시 주의해야 할 부분이 생깁니다.

 

첫번째로 PHP 에서 생성할 파일 또는 디렉토리가 저장될 디렉토리는 nobody 에게 쓰기 권한이 있어야 합니다. 그렇기 때문에 일반적으로 저장될 디렉토리는 707 퍼미션을 주게됩니다.

 

두번재로 PHP를 이용해서 파일 또는 디렉토리를 생성했을 경우 PHP 스크립트를 이용해서 해당 파일 또는 디렉토리의 권한을 707 로 변경해 주어야 합니다. 이는 nobody 소유의 파일이 생성된 상태에서 실제 계정 사용자가 ftp 로 접속해서 파일을 삭제하려 할때 nobody 소유의 파일은 삭제가 되지 않는 현상이 나타납니다.

 

그리고 질문에 다른 계정에서도 올린 자료에 접근을 할 수 있어야 한다고 하셨는데 이 역시 두번째에 해당합니다. nobody 소유이기 때문에 nobody 를 제외한 다른 모든 사용자에게 접근 권한이 있어야 하기 때문이죠. 그래서 퍼미션을 707로 변경해 주셔야 합니다.

 

음 도움이 되었길 바라며 추가 질문이 있으시면 http://cafe.naver.com/phpcafe 에 질문 주셔도 됩니다. 그럼 즐거운 하루되세요...^^/

 


'우분투' 카테고리의 다른 글

crontab 사용법 및 php 실행  (0) 2012.07.26
vsftpd 폴더 생성시 권퐇  (0) 2012.07.08
리눅스 권한 퍼미션 보는 법  (0) 2012.07.07
mysql 설정 영진이가 약간 수정  (0) 2012.07.07
우분투 APM설치부터 XE세팅까지  (0) 2012.07.07
Posted by 다오나무
우분투2012. 7. 7. 21:14

[리눅스] 38. 리눅스의 권한, 퍼미션 ( 권한 보는법, 권한 읽는법, 퍼미션 숫자 )

 

 

 

 

 

 

▶ 권한 표시 방법

 - 영문 표기법 (rwxrwxrwx) : 심벌릭 모드

 - 숫자 표기법 (777) : 8진수 표기법 (octal)  

 

 

 

 

 

▶ 리눅스 권한 확인법

 

 

 

  가장 쉬운법은 ' ls -l '을 통한 파일 리스트 출력이다.

 권한을 수정을 하기 위해서는 chmod 명령어가 쓰인다.

 

 

 

 

 

 

▶ 파일 리스트 권한 구성

 

  

 

 ① 파일 유형

 

   첫번째 문자 '-' 는 파일의 유형을 뜻한다.

 

     -  : 일반적인 파일을 뜻한다.

     d  : 디렉토리를 뜻한다.

      l  : 링크 파일을 뜻한다.

     s  : 소켓 파일을 뜻한다.

 

 

 

 

 

 

  파일의 권한

 

     파일의 권한을 나타내는 부분이다. 리눅스에서 가장 민감한 부분이기 때문에 꼭 알아둘 필요가 있다.

     

 

 

     먼저 3개 영역의 사용자를 대상으로 권한을 설정 하게 된다.

 

      · 소유자(user) : 파일의 주인이 되며 그에 대한 권한을 설정한다. 

      · 그 룹(group) : 파일의 그룹이 되며 해당 그룹에 속한 사용자의 권한을 설정한다.  

     · 그 외(other) : 위 2개에 해당되는 사용자가 아닌 모든 사용자의 권한을 뜻한다. (guest)

 

 

 

 

    - 각 문자는 다음의 권한을 뜻한다.

  

 

      · r   : 파일의 읽기 권한이다. 숫자 4로 나타낸다.

     · w  : 파일의 쓰기 권한이다.  숫자 2로 나타낸다.            

     · x  : 파일의 실행 권한이다.  숫자 1로 나타낸다.

 

 

 

 

    예) -rw-r---x : 소유자 (4+2) 6, 그룹4 , 그외 1 의 권한을 가진 일반 파일이다. 간단하게 641이라 읽는다.

                          소유자는 읽기 쓰기, 그룹은 읽기, 그외 사용자는 실행의 권한을 가진다. 

 

 

 

 

 

 

 

 

 

▶ 파일리스트 퍼미션 읽기 퀴즈

 

 

  -rwxr-xrw-

 

 

  dr-x-w----

 

 

  173, 일반파일

 

 

  402, 디렉토리 파일

 

 

 

 

 

 

 

도움 및 출처 : i2sec

Posted by 다오나무
우분투2012. 7. 7. 18:57

1. 우분투에서는 다음과 같이 입력하면 mysql 에 관련된 패키지를 검색하게 됩니다.

$sudo apt-cache search mysql 

그중에서 필요한걸 골라서 설치하면 됩니다. (mysql 서버 데몬을 설치하는 경우 바로 2번 부터)


2. mysql 서버 설치


$sudo apt-get install mysql-server 


3. mysql 클라이언트 설치


$sudo apt-get install mysql-client


4. mysql 서버 설치 직후 UTF-8 설정을 해줍니다
.
 해주지 않을 경우 latin1 로 character encoding 이 자동 설정되는데, 이걸 그대로 두면, 한글 처리할때 난관이 찾아올것입니다.

my.cnf 파일을 편집하기 위해 vi에디터로 해당 파일을 열어줍니다.

$sudo vi /etc/mysql/my.cnf 

아래와 같은 내용을 추가해줍니다. [ ] 은 이미 my.cnf 에 있고 그 아래에 내용들을 추가.

 [client]
default-character-set=utf8

[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8


영진이가 수정

 [client]
default-character-set=utf8

[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
#default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8



5. mysql 을 재시작 해줍니다.

$sudo /etc/init.d/mysql restart


6. 변경 여부 확인은 다음과 같이.

$mysql -u id -p
mysql> status

Posted by 다오나무