연구_고민2007.09.27 23:36
연구_고민2007.09.27 22:57

xml rpc 를 통한 daum blog 에 글 등록 하기

phpschool 의 fguy 님의 daum blog api 를 참고하여 작성하였습니다.
http://www2.phpschool.com/bbs2/inc_view.html?id=12080&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=all&category_id=&s_que=daum

api 는 올려주셨는데 사용법이 없어 올려 보았습니다.


0. 본 문서는 www.phpschool.com 의 tip&tech 게시판에 게시하며 작성자의 허락없이 무단 배포를 금지합니다.
xml 과 http 이해가 가능한자를 기본으로 작성하였습니다.

1. xmlrpc 란 무엇인가?

기존 서버-서버 간 또는 서버-클라이언트간 의 통신에서
form 을 이용한 방식은 페이지를 여러번 거쳐 request - response 를 반복해야하는 단점이 있고
socket 을 이용한 response - request 로 한 페이지 안에서 처리 할 수도 있지만
이 역시 각 서버(업체)마다 서로 상이한 response 결과가
발생하여 이를 다시 파싱하여 프로그램 하기에는 많은 노력이 필요했습니다.

여기에서 나온 대안이 표준문서인 xml 을 이용하는 것이며
xml 중 xmlrpc 방식의 전송규약(protocal) 을 이용하여 서버의 메소드에 바로 접근하는 것이라고
간단히 생각하면 될것 같습니다.

결과적으로 돌아가는 방식은
서버로 내용(xml)을 전송(POST)하여 그 결과(xml)를 받아 오는 방식으로
socket 이나 html - form 을 이용하는 것과 같다고 볼 수 있습니다.
다만 여기서 보내고 받는 방식에 통일된 전송규약(xmlrpc)을 두었다고 생각하면 될것 같습니다.

2. xmlrpc 의 이용 예제

이를 위해 xmlrpc-server 중 공개되어 있는 daum blog 를 이용하여
원격으로 (다음 사이트에 로긴하여 form 을 이용하여 직접입력하지 않고)
daum blog 에 글을 올리는 예제 입니다.

만약 daum 뿐만 아니라 기타 여러 사이트가 xmlrpc server 를 열어 준다면
개인서버등에서 한번의 입력만으로 여러 사이트에 동시에 글을 올리고
그 결과를 쉽게 받아 올 수 있을 것입니다.

(물론 여러 사이트에 한번에 글을 등록하기 위해서 기존에 http - form 이나 socket 을 사용하여 올릴 수도 있습니다.)

xmlrpc 를 이용하기 위해서 먼저 php 가 xml 과 xmlrpc 함수를 지원하도록 컴파일 되어 있어야 합니다.
(xml, xmlrpc 함수가 지원되지 않을때는 socket 과 문자열 파싱의 노가다로 해결 할 수도 있습니다.)

xmlrpc 관련함수는 --with-xmlrpc 로 컴파일시 xmlrpc-server 관련 함수는 기본 지원되나
xmlrpc-client 관련 함수는 지원되지 않으므로 http://sourceforge.net/projects/phpxmlrpc/ 에서 배포하고 있습니다.


fguy 님의 daum blog api 중 발췌
=======================================
Protocols
The DAUM BLOG API is currently implemented for XML-RPC
URI
All XML-RPC requests should go to the following URI: http://blog.daum.net/_blog/XMLRPC.do
Method
daum.blog.newPost.execute : 새 글 등록

daumid (string) : 다음 사용자 ID
password (string) : 다음 사용자 PASSWORD
subject (string) : 글 제목
body (string) : 글 내용
tag (string) : 이 글에 대한 태그 (카테고리)
date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')

Return
(string) : 등록된 글 번호.
=======================================


위와 같은 daum blog api 가 공개 되었습니다. 이를 이용하여 글등록을 해보도록 하겠습니다.
아래의 소스는 http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일내의 client.php 를 참조한 것입니다.

<?php
include("xmlrpc.inc"); // http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일에 포함 되어 있음...

$userID = "XXXXXX";
$userPW = "XXXXXX";
$subject= "xml rpc input test";
$body = "Hello XMLRPC";
$tag = "daum tag";

$f = new xmlrpcmsg("daum.blog.newPost.execute",
array( new xmlrpcval($userID, "string"),
new xmlrpcval($userPW, "string"),
new xmlrpcval($subject, "string"),
new xmlrpcval($body, "string"),
new xmlrpcval($tag, "string"),
new xmlrpcval(date("c"), "string") )
);

//print "<PRE>다음으로 보내지는 데이터 원본:<BR>" . htmlentities($f->serialize()) . "</PRE>\n"; // 보내는 메세지 출력

$c = new xmlrpc_client("/_blog/XMLRPC.do", "blog.daum.net", 80);
//$c->setDebug(1); // debug 메세지 출력( daum 에서 보내주는 결과값 )
$r = $c->send($f);
$v = $r->value();

if(!$r->faultCode()) {
print "다음 등록 글 번호 : " . ($v->scalarval()) . "<BR>";
print "<a href=\"http://blog.daum.net/" . $userID . "/" . $v->scalarval() . "\">글보기</a><br>";
}
else {
print "Fault: ";
print "Code: " . htmlspecialchars($r->faultCode()) . "<br>";
print "Reason '" . htmlspecialchars($r->faultString()) . "'<BR>";
}
?>


위와 같이 하시면 다음 블로그에 글이 등록된 결과를 확인 하실 수 있을 겁니다.

3. 참고
http://www.xmlrpc.com/spec
http://xmlrpc-epi.sourceforge.net

시간이 없어 xmlrpc.inc 에 문자열 인코딩 부분을 확인 하지 못해 한글 입력은 현재 바로 사용하시면 깨져서 들어 갈 것입니다.
처리 하신 분들은 댓글로 부탁드려요 ^^;


---------------------------------------------------------------------------------------------------
--with-xmlrpc 의 옵션으로 컴파일 한 경우 아래와 같이 socket 과 같이 사용하니 한글 처리가 되는 군요...

<?php
    // daum 서버와 소켓 통신
    function sendQuery($request_xml) {
        global $host, $cgi;

        $fp = fsockopen($host, 80, $errno, $errstr, 30);

        if (!$fp) {
            exit(\"Error : fsockopen\");
        }

        $header =  \"POST \" . $cgi . \" HTTP/1.0\\r\\n\" .
                    \"User-Agent: Frontier/5.1.2(WinNT)\\r\\n\" .
                    \"Host: \" . $host . \"\\r\\n\" .
                    \"Content-Type: text/xml\\r\\n\" .
                    \"Content-length: \" . strlen($request_xml) . \"\\r\\n\";

        fputs($fp, $header . \"\\r\\n\" . $request_xml);
        $buff = \"\";
        while (!feof($fp)) {
            $buff .= fgets($fp, 1024);
        }
        fclose($fp);

        return $buff;
    }

    $headerDelim = \"\\r\\n\\r\\n\";
    $host  = \"blog.daum.net\";
    $cgi    = \"/_blog/XMLRPC.do\";
    $method = \"daum.blog.newPost.execute\";

    // array(userID, userPW, subject, body, tag, date)
    $param  = array(\"XXXXXX\", \"XXXXXXX\", \"xml rpc 입력 테스트\", \"하이\", \"daum tag\", date(\"c\"));

    $output_options = array( \"output_type\" => \"xml\",
                            \"verbosity\" => \"pretty\",
                            \"escaping\" => array(\"markup\"),
                            \"version\" => \"xmlrpc\",
                            \"encoding\" => \"EUC-KR\" );


    $request_xml    = xmlrpc_encode_request($method, $param, $output_options);
    $buff          = sendQuery($request_xml);

    $response_xml  = substr($buff, strpos($buff, $headerDelim) + strlen($headerDelim));
    $result        = xmlrpc_decode_request($response_xml, $method);

    echo \"<xmp>\";
    echo \"전송 데이터 : \\n\";
    echo $request_xml;
    echo \"\\n\\n\\n\";

    echo \"수신 데이터 : \\n\";
    echo $response_xml;
    echo \"\\n\\n\\n\";

    echo \"결과값 : \\n\";
    echo $result;
    echo \"</xmp>\";
    exit;
?>

신고
Posted by naearu

Open API에 관심을 갖게 되어 여기 저기 찾아보니 요새 많은 블로그들에서 범용으로 사용되는 프로토콜이 XMLRPC란 것을 알게 되었고, XMLRPC를 PHP에서 사용할 수 있도록 작성해 놓은 라이브러리를 찾을 수 있었다. XMLRPC for PHP 라이브러리는 소스포지의 한 프로젝트이며, 현재 2.2 버전까지 릴리즈가 되어 있다.

http://phpxmlrpc.sourceforge.net/

Open API에 관심을 갖게 만든건 미투데이의 블로그로 글 배달 서비스이다. 이 서비스를 받아들이기 위해서는 내 블로그에 XMLRPC 서버 기능을 추가해야 한다. 서버 기능이란 내 홈페이지로 request가 오면 그에 대한 처리를 하고 응답을 해 주는 기능을 말한다. 미투데이의 블로그로 글 배달 서비스의 경우 metaWeblog.newPost를 내 홈페이지에 보내게 되고, 서버 프로그램에서 그 request를 받아들여 DB에 글을 등록한 후 작성적으로 처리했다는 응답을 미투데이에 보내줘야 한다.

일단 미투데이의 블로그로 글 배달 서비스를 받기 위해선 blogger.getUsersBlogs 메소드와 metaWeblog.newPost 메소드에 대한 처리를 구현해야 한다. blogger.getUsersBlogs를 받으면 내 블로그에 대한 정보를 응답으로 보내줘야 하고, metaWeblog.newPost를 받았을 때는 글을 DB에 등록한 후 등록된 번호를 응답으로 보내줘야 한다.

참고로 FireFox의 부가기능인 ScribeFire에서는 위의 메소드 외에 metaWeblog.getCategories 메소드와 metaWeblog.getRecentPosts 메소드를 사용하여 블로그 정보를 얻어간다. 이 메소드들의 기능은 메소드 이름에 명확히 나타나 있기때문에 굳이 설명을 할 필요가 없어보인다.

이 밖에도 많은 메소드들이 존재하는데 다음의 페이지에서 간단한 정보를 얻을 수 있다. 어떤 메소드들이 있고 이 메소드에 대한 응답은 어떻게 하는지 간단하게 살펴볼 수 있다.

http://www.peopleaggregator.net/api/doc/peopleaggregator.html

이제 위의 메소드들에 대해서 서버 기능을 구현해주기만 하면 된다. XMLRPC for PHP 라이브러리는 체계적으로 잘 작성되어 있어서 어렵지 않게 구현할 수가 있다. 조금 살펴봐야 할 부분이 있다면 xmlrpcval class를 사용하는 방법 정도일 것이다. 물론 다큐먼트에 예제들이 잘 나와 있다.

xmlrpc.php라는 이름으로 서버 기능을 구현해 본다.

먼저 php파일 상단에 두 개의 파일을 인클루드 한다.

include "xmlrpc.inc";
include "xmlrpcs.inc";

그 다음 xmlrpc_server를 생성한다. 생성시 아규먼트로 메소드와 싱행할 함수의 쌍의 배열을 사용한다. 해당 메소드의 request를 받으면 콜백함수로써 등록된 함수가 실행되는 방식이다.

$s = new xmlrpc_server(
 array(
  "blogger.getUsersBlogs" => array("function", "blogger_getUsersBlogs"),
  "metaWeblog.getCategories" => array("function", "metaWeblog_getCategories"),
  "metaWeblog.getRecentPosts" => array("function", "metaWeblog_getRecentPosts"),
  "metaWeblog.newPost" => array("function", "metaWeblog_newPost")
 )
);

예를 들면, metaWeblog.newPost 요청을 서버에서 받은 경우 metaWeblog_newPost 함수가 실행되는 방식이다. metaWeblog_newPost 함수는 서버에서 구현해 주어야 하며 다음과 같이 작성할 수 있다.

function metaWeblog_newPost($msg)
{
 // $msg에는 클라이언트로부터 받은 XML 데이터가 포함되어 있다.
 
 $id = $msg->getParam(1);
 $id = $id->scalarVal(); // ID
 $password = $msg->getParam(2);
 $password = $password->scalarVal(); // Password

 // $id, $password를 비교해서 정상적인 접근인지 검사.

 // 응답할 XML 데이터 생성
 $value = new xmlrpcval(/* 응답할 데이터 */);

 return new xmlrpcresp($value); // 요청한 클라이언트로 응답
}

$msg에는 XML 데이터가 담겨있다. 각 값들을 파싱하는 함수들이 존재하므로 xmlrpcval 클래스 도움말을 참조하여 값들을 뽑아오면 된다. 요청을 잘 처리했으면 잘 처리했다는 응답을 요청한 클라이언트로 보내줘야 한다. xmlrpcresp 클래스를통해 응답을 해주게 되는데, 이 때 사용되는 $value값은 xmlrpcval 클래스를 사용하여 적당히 만들어줘야 한다.

지금까지의 작업으로 미투데이에서의 metaWeblog.newPost 요청을 처리할 수 있었다. 그런데 안타깝게도 한글이 깨져나오는 문제가 아직 존재한다. 오늘은 한글 문제를 해결하기 위해 골머리좀 쓰게 될 것 같다.

신고
Posted by naearu
연구_고민2007.09.27 21:32

10. PHP로 XML-RPC 사용하기

Edd Dumbill는 PHP용 XML-RPC 모듈을 만들었다. 모듈은 UsefulInc XML-RPC website에서 구할 수 있다.

파일을 내려받아 압축을 푼 다음, xmlrpc.incxmlrpcs.inc 의 두 파일을 PHP 스크립트와 같은 디렉토리에 복사하면 된다.

10.1. PHP 클라이언트

다음의 스크립트는 웹페이지에 XML-RPC 호출 루틴을 추가하는 방법을 보여준다.

<html>
<head>
<title>XML-RPC PHP Demo</title>
</head>
<body>
<h1>XML-RPC PHP Demo</h1>

<?php
include 'xmlrpc.inc';

// Make an object to represent our server.
$server = new xmlrpc_client('/api/sample.php',
                            'xmlrpc-c.sourceforge.net', 80);

// Send a message to the server.
$message = new xmlrpcmsg('sample.sumAndDifference',
                         array(new xmlrpcval(5, 'int'),
                               new xmlrpcval(3, 'int')));
$result = $server->send($message);

// Process the response.
if (!$result) {
    print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
    print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
        $result->faultString();
} else {
    $struct = $result->value();
    $sumval = $struct->structmem('sum');
    $sum = $sumval->scalarval();
    $differenceval = $struct->structmem('difference');
    $difference = $differenceval->scalarval();
    print "<p>Sum: " . htmlentities($sum) .
        ", Difference: " . htmlentities($difference) . "</p>";
}
?>

</body></html>

웹서버에서 PHP 스크립트가 실행되지 않는다면 PHP 웹사이트를 참조하라.

10.2. PHP 서버

다음의 스크립트는 PHP를 이용하여 XML-RPC 서버에 적용하는 방법을 보여준다.

<?php
include 'xmlrpc.inc';
include 'xmlrpcs.inc';

function sumAndDifference ($params) {

    // Parse our parameters.
    $xval = $params->getParam(0);
    $x = $xval->scalarval();
    $yval = $params->getParam(1);
    $y = $yval->scalarval();

    // Build our response.
    $struct = array('sum' => new xmlrpcval($x + $y, 'int'),
                    'difference' => new xmlrpcval($x - $y, 'int'));
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}

// Declare our signature and provide some documentation.
// (The PHP server supports remote introspection. Nifty!)
$sumAndDifference_sig = array(array('struct', 'int', 'int'));
$sumAndDifference_doc = 'Add and subtract two numbers';

new xmlrpc_server(array('sample.sumAndDifference' =>
                        array('function' => 'sumAndDifference',
                              'signature' => $sumAndDifference_sig,
                              'docstring' => $sumAndDifference_doc)));
?>

위의 스크립트를 웹서버에서 http://localhost/path/sumAndDifference.php와 같은 방식으로 실행시킬 수 있다.

신고
Posted by naearu
연구_고민2007.09.27 09:56

Metaweblog API의 기본 내용 요약....


세가지 기본 API

닫기

펼쳐두기..

닫기



 그외 API

닫기

펼쳐두기..

닫기


출처: http://www.xmlrpc.com/metaWeblogApi

신고
Posted by naearu
연구_고민2007.09.27 09:42

[*] SOA 의 구현
===============
작성: 카이 thruthesky@yahoo.co.kr
홈페이지: http://jangnans.com http://siteapi.kldp.net

본 문서에서는 SOA(Site Open API)의 구현에 대해서 설명을 합니다.

[*] SOA 실제 예

PHP 버젼의 SOA 구현은 본인이 이미 작업을 해놓은 것이 있습니다.
제로보드 5, 제로보드 4, 그누보드 4, 알지보드, 테크노트, 미니툴, 장난 홈툴즈 등에서 사용이 가능하도록 포팅을 해 놓았습니다.
이를 바탕으로 새로운 홈페이지(또는 관련된 게시판, 프로그램 등)에 손쉽게 적용이 가능합니다.

그러나, ASP, C, Perl 과 같은 언어로 제작된 사이트에서는 본인이 작성한 PHP 코드를 직접 재 사용할 수가 없습니다.


[*] XML-RPC

XML-RPC 에 대해서는 본인이 다른 곳(문서)에 기록을 해 놓았습니다.
http://jangnans.com/etc/siteopenapi/siteopenapi_spec.html 페이지에서 "4장 Site API 소개" 부분을 참고하십시오.

이처럼 RPC 는 데이터를 송/수신하고 처리를 하는 과정을 말합니다.
이 때(데이터를 송/수신할 때), XML 형식으로 데이터를 표현하는 것이 바로 XML-RPC 입니다.

XML 형식이라고 하는데, 실질적으로 어떻게 데이터를 전송하고, 수신하고하는걸까요?
RPC 에서는 당연히 클라이언트와 서버로 작업분담이 이루어집니다.
XML 로 데이터를 표현하니 C/S(클라이언트와 서버)간의 통신은 HTTP 를 바탕으로 이루어집니다.
데이터는 규격은 http://www.xmlrpc.com/spec 와 같으며 XML 로 표현이됩니다.
클라이언트가 서버로 전송하는 데이터는 HTTP 의 POST 방식으로 전달이 됩니다.

아마 그것은 (클라이언트가 서버로 데이터를 전송하는 것은) 아래와 같은 형식이 될 것입니다.

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181

<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
         </param>
      </params>
   </methodCall>

위 내용은 클라이언트가 데이터를 XML 표현으로 HTTP 의 POST 방식으로 서버에게 전송을 하는 것입니다.
서버는 위 데이터를 받아서 적절한 처리를 할 것입니다. 이때, 서버는 아마도 웹서버가 될 것입니다.
그리고 수신한 데이터에 대한 처리는 CGI(ASP, C, PERL 등)가 담당하게 될 것입니다.
데이터를 받아서 DB 관련 작업을 할 수도 있고 오류처리를 할 수도 있습니다.
웹서버에서 실행되는 언어(ASP, PHP 등)는 이러한 데이터의 작업에 대한 처리를 할 수 있습니다.
XML 데이터를 파싱해서 필요한 데이터를 추출한 다음 처리를 하면됩니다.

실제로 SOA 를 구현해야한다면, 그것이 서버측 작업을 해야한다면 어쩌면 테스트 클라이언트를 직접 작성하셔야할 지도 모르겠습니다.
서버 작업을 하기 위해서는 테스트용 클라이언트가 있어야합니다. 그렇지만 입맛에 맞는 클라이언트는 없습니다.
그러니 실질적으로 XML-RPC 의 모든 것을 구현해야합니다.

이해가 되셨는지 모르겠습니다.
실질적인 구현에 대한 정보는 http://www.xmlrpc.com/directory/1568/implementations 에서 얻을 수 있습니다.


우선 다른 누군가가 XML-RPC 모듈을 만들어 놓았는지 알아볼 필요가 있습니다.
XML-RPC 구현을 위한 소스 코딩 작업이 만만치는 않습니다.
물론 XML-RPC 관련 라이브러리를 구하지 못한다면 직접 작성을 해야합니다.
XML 문서의 파싱 라이브러리라도 구해야합니다. 물론 XML 파싱 라이브러리를 구할 수 없다면, 엮시 직접 코딩을 해야합니다.

C 언어와 Perl 쪽에서는 그리고 PHP 쪽에서는 어느정도 관련 라이브러리가 있습니다.

ASP 에대해서는 본인이 연구를 안해봐서 어떤지 모르겠습니다.
다음은 ASP 와 관련된 참고할 만한 정보입니다.
http://aspxmlrpc.sourceforge.net/ (자세히 보지는 않았지만, 서버와 클라이언트를 위한 XML-RPC 라이브러를 제공하는 것 같습니다.)
http://david.carter-tod.com/blackboard-tips-and-tricks#comment-35

 

[*] SOA 규격

XML-RPC 에 대한 준비가 되었으면 본격적으로 SOA 규격을 구현할 준비가 된 것입니다.
우선 SOA 문서에 대해서 읽어볼 필요가 있습니다.

참고로 SOA 는 정보의 검색에 중점을 두고 있습니다.

일반적인 사이트를 대상으로 사이트가 가지는 정보의 속성을 토대로 규격을 한 것입니다.
예를 들면, 홈페이지에 장난감에 대한 유용한 정보가 있는데 이 정보를 외부에서 사용을 할 수 있도록 해주고 싶어합니다.
이 경우 여러가지 방법이 있겠지만, SOA 를 통하면 홈페이지의 정보를 직접 검색해서 그 결과를 타 사이트, 또는 타 응용 프로그램에서 활용할 수 있습니다. 글의 제목이나 내용, 또는 상품의 가격이나 제작된 날짜 등을 검색해서 그 정보를 타 사이트로 연결, 또는 타 응용 프로그램으로 연결이 가능합니다.

이 와 같이 SOA 는 개별 사이트의 정보를 다른 곳에서 쉽게 이용을 할 수 있도록 하기위해서 규격된 것입니다. 정보의 검색외에도 정보를 외부에서 직접 가공을 하여서 홈페이지로 저장을 할 수도 있습니다.
예를 들면, 기존의 홈페이지 게시판에는 그림이나 파일의 첨부를 2개로 제한하는 경우가 많습니다. 국내의 가장 유명한 무료 웹 게시판이 이런 경우입니다. 이 경우, SOA 를 구현하면 그림이나 파일 첨부의 제한이 없어집니다. 뿐만아니라 디자인을 마음대로 할 수가 있습니다.
사용자가 자신의 상품을 홈페이지에 올리고 싶어하는데, 이미지 연결을 위해서 어렵게 HTML 작성을 직접하거나 제한된 게시판 기능을 이용해서는 사용자가 원하는 모습을 갖추기가 어렵습니다. SOA 는 이런 문제점을 해결해줍니다. 위즈위그 편집기에서 보이는 그대로 쇼핑몰에 정보를 올려줍니다. 이미지도 보이는 그대로 홈페이지에 자동으로 저장이됩니다.

현제 SOA 는 이러한 작업을 위해서 규격이되어있습니다.
그리고 실제로 이러한 작업이 많은 홈페이지에서 시행되고 있습니다.

참고할 만한 소스가 없이, SOA 를 처음부터 구현을 해야하는 입장이면, SOA를 규격하고 PHP 버젼을 구현한 본인과의 연락이 필요합니다.
코딩을 하는 과정에서 실제적으로 도움을 드릴 수 있다고 판단을 합니다.

본 문서를 읽으시는 분은 우선,
1. XML-RPC 에 대한 이해와 실제 예제의 구현를 통해서 정보를 습득하는 것이 필요합니다.
2. SOA 구현에 있어서 PHP 소스가 도움이되지 않는다면 본인에게 도움을 요청할 수 있습니다.

신고
Posted by naearu
연구_고민/리눅스2007.09.24 15:40
http://ubuntuforums.org/showthread.php?t=385981

Feisty:
Code:
deb http://download.tuxfamily.org/syzygy42 feisty avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42 feisty avant-window-navigator
Gutsy:
Code:
deb http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
위 두 코드를 소스 리스트에 집어 넣어 놓고...
아래 코드를 터미널에서 실행해줍시다~그럼 끝;
Code:
wget http://download.tuxfamily.org/syzygy42/reacocard.asc
sudo apt-key add reacocard.asc
rm reacocard.asc
sudo apt-get update
Then install AWN:
Code:
sudo apt-get install avant-window-navigator-bzr awn-core-applets-bzr
신고
Posted by naearu

12.3. 스트링 함수

 

  12.3.1. 스트링 비교 함수

 

스트링-값 함수는 그 결과 값의 길이가 max_allowed_packet 시스템 변수의 값 보다 클 경우에는, NULL을 리턴한다. Section 7.5.2, “서버 파라미터 튜닝하기를 참조할 것.


스트링 포지션(position)에서 연산을 하는 함수의 경우, 첫 번째 포지션은 숫자 1이 된다.

  • ASCII(str)

스트링 str 의 맨 왼쪽 문자의 숫자 값을 리턴한다. str 이 빈 스트링(empty string)일 경우에는 0 을 리턴한다. NULL if str NULL일 경우에는 NULL 을 리턴한다. ASCII()0 에서 255 사이의 숫자 값을 갖는 문자에 대해서 연산을 한다.

mysql> SELECT ASCII('2');

        -> 50

mysql> SELECT ASCII(2);

        -> 50

mysql> SELECT ASCII('dx');

        -> 100

ORD() 함수를 함께 참조할 것.

  • BIN(N)

N의 바이너리 값에 대한 스트링 표현식을 리턴하는데, 여기에서N (BIGINT) 숫자이다. 이것은 CONV(N,10,2)과 동일하다. N NULL일 경우에는 NULL을 리턴한다.

mysql> SELECT BIN(12);

        -> '1100'

  • BIT_LENGTH(str)

스트링 str 의 길이를 비트 단위로 리턴한다.

mysql> SELECT BIT_LENGTH('text');

        -> 32

  • CHAR(N,... [USING charset_name])

CHAR()은 각각의 인수 N 을 정수 형태로 해석을 하고 이러한 정수의 코드 값에 의해 주어지는 문자로 구성된 스트링을 리턴한다. NULL 값은 무시(skipped)된다.

mysql> SELECT CHAR(77,121,83,81,'76');

        -> 'MySQL'

mysql> SELECT CHAR(77,77.3,'77.3');

        -> 'MMM'

MySQL 5.0.15 이후 버전에서는,  255 보다 큰 CHAR() 인수는 여러 개의 결과 바이트로 변환된다. 예를 들면, CHAR(256)CHAR(1,0)와 같고, 그리고 CHAR(256*256) CHAR(1,0,0)과 같다:

mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));

+----------------+----------------+

| HEX(CHAR(1,0)) | HEX(CHAR(256)) |

+----------------+----------------+

| 0100           | 0100           |

+----------------+----------------+

mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));

+------------------+--------------------+

| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |

+------------------+--------------------+

| 010000           | 010000             |

+------------------+--------------------+

디폴트로는, CHAR()는 바이너리 스트링을 리턴한다. 주어진 문자 셋에 있는 스트링을 만들기 위해서는, USING 구문을 옵션으로 사용한다:

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));

+---------------------+--------------------------------+

| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |

+---------------------+--------------------------------+

| binary              | utf8                           |

+---------------------+--------------------------------+

만일 USING을 사용하였는데도 그 결과 스트링이 주어진 문자 셋에 대해서 유효하지 않게 되면, 경고문이 나오게 된다. 또한, 만일 스트릭트(strict) SQL 모드를 활성화 한다면, CHAR() 의 결과 값은 NULL이 된다.

MySQL 5.0.15 이전 버전에서는, CHAR()는 연결 문자 셋에 있는 스트링을 리턴하며 USING 구문은 사용할 수 없게 된다. 또한, 각각의 인수는 모듈로(modulo) 256으로 해석이 되기 때문에, CHAR(256) CHAR(256*256)는 둘 다 CHAR(0)과 동일한 것이 된다.

  • CHAR_LENGTH(str)

스트링 str의 길이를 리턴한다. 다중 바이트 문자는 단일 문자로 계산(count) 된다. , 5개의 2 바이트 문자를 갖는 스트링에 대해서, LENGTH() 10을 리턴 하지만, CHAR_LENGTH()5를 리턴 한다.

  • CHARACTER_LENGTH(str)

CHARACTER_LENGTH()CHAR_LENGTH()과 동일하다.

  • CONCAT(str1,str2,...)

인수를 연결한 결과로 나오는 스트링을 리턴한다. 한 개 또는 그 이상의 인수를 가질 수 있다. 만일 모든 인수가 바이너리 스트링이 아니라면, 그 결과는 바이너리가 아닌 스트링이 된다. 만일 인수에 바이너리 스트링이 포함되어 있다면, 그 결과는 바이너리 스트링이 된다. 숫자 인수는 동일한 바이너리 스트링 형태로 변환된다; 만일 이렇게 변환되는 것을 원하지 않을 경우에는, 아래의 예문과 같이 명확하게 타입 캐스트(type cast)를 사용하면 된다:

SELECT CONCAT(CAST(int_col AS CHAR), char_col);

CONCAT()는 모든 인수가 NULL이 아니면 NULL을 리턴한다.

mysql> SELECT CONCAT('My', 'S', 'QL');

        -> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

        -> NULL

mysql> SELECT CONCAT(14.3);

        -> '14.3'

  • CONCAT_WS(separator,str1,str2,...)

CONCAT_WS()는 구분자를 사용하는 연결(Concatenate With Separator)을 나타내는 것이며 CONCAT()의 특수 형태이다. 첫 번째 인수는 나머지 인수들에 대한 구분자(separator)가 된다. 구분자는 연결되는 스트링 사이에 추가된다. 구분자는 스트링이 될 수 있다. 만일 구분자가 NULL 이면, 그 결과는 NULL이다.

mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');

        -> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');

        -> 'First name,Last Name'

CONCAT_WS()는 빈 스트링(empty string)을 무시(skip)하지 않는다. 하지만, 구분자 인수 다음에 나오는 모든 NULL 값은 무시를 한다.

  • CONV(N,from_base,to_base)

서로 다른 문자 베이스(base)간의 숫자를 변환한다. from_base 에서 베이스 to_base로 변환된 숫자 N의 스트링 표현식을 리턴한다. 인수 중의 하나가 NULL이면 NULL을 리턴한다.인수 N 은 정수로 해석되지만, 정수 또는 스트링으로 지정될 수도 있다. 최소 베이스는 2 이고 최대 베이스는 36이다. 만일 to_base 가 음수라면, N 은 부호화된 숫자로 간주된다. 그렇지 않을 경우에는, N 은 부호 없는 숫자로 취급된다. CONV()64-비트 정밀도를 갖는다.

mysql> SELECT CONV('a',16,2);

        -> '1010'

mysql> SELECT CONV('6E',18,8);

        -> '172'

mysql> SELECT CONV(-17,10,-18);

        -> '-H'

mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);

        -> '40'

  • ELT(N,str1,str2,str3,...)

만일N = 1이면, str1, N = 2이면, str2 을 리턴하는 방식. N 1 보다 작거나 또는인수의 숫자보다 많을 경우에는 NULL을 리턴한다. ELT()FIELD()의 보수(complement)이다.

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');

        -> 'ej'

mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');

        -> 'foo'

  • EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

bits에 있는 모든 비트 셋(bit set)에 대해서는, on 스트링을, 그리고 모든 리셋 비트에 대해서는, off 스트링을 리턴한다. bits 에 있는 비트는 오른쪽에서 왼쪽으로 검사된다 (낮은 순서에서 높은 순서 비트로). 스트링은 왼쪽에서 오른쪽으로 결과에 추가되는데, separator 스트링으로 구분이 된다 (디폴트 스트링은 콤마 문자,’). 검사가 되는 비트의 숫자는 number_of_bits로 주어진다 (디폴트는 64).

mysql> SELECT EXPORT_SET(5,'Y','N',',',4);

        -> 'Y,N,Y,N'

mysql> SELECT EXPORT_SET(6,'1','0',',',10);

        -> '0,1,1,0,0,0,0,0,0,0'

  • FIELD(str,str1,str2,str3,...)

str1, str2, str3, ... 리스트에 있는 str 의 인덱스(포지션)를 리턴한다. str을 찾을 수 없는 경우에는 0 을 리턴 한다.

만일 FIELD()에 대한 모든 인수가 스트링이라면, 모든 인수는 스트링으로 비교된다. 만일 모든 인수가 숫자일 경우에는 숫자로 비교가 된다. 그렇지 않은 경우라면, 인수들은 두 번 (double) 비교가 된다.

만일 str NULL이라면, 리턴 값은 0 이 되는데, 그 이유는 NULL 은 어떤 값과도 등식 비교가 되지 않기 때문이다. FIELD()ELT()의 보수(complement)이다.

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');

        -> 2

mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');

        -> 0

  • FIND_IN_SET(str,strlist)

만일 스트링 str N 의 서브 스트링으로 구성된 스트링 리스트 strlist 에 있는 것이라면, 1의 범위에 있는 값을 N 에 리턴한다. 하나의 스트링 리스트는 콤마 문자로 구분된 서브 스트링들로 구성된 스트링이다. 만일 첫 번째 인수가 상수 스트링이고 두 번째 인수가 타입 SET의 컬럼이라면, FIND_IN_SET() 함수는 비트 산술식을 사용하기 위해서 최적화가 된다. 만일 str strlist에 없거나 또는 strlist가 빈 스트링이라면, 0을 리턴한다. NULL if만일 인수 중의 하나가 NULL이라면, NULL을 리턴한다. 만일 첫 번째 인수가 콤마 문자를 가지고 있다면, 이 함수는 제대로 동작을 하지 않는다.

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

        -> 2

  • FORMAT(X,D)

숫자 X 의 포맷을 '#,###,###.##' 형태로 만들고, D의 소수점 뒷자리에서 절사(round)를 하고, 그 결과를 스트링으로 리턴한다. 만일 D 0 이면, 그 결과는 소수점 또는 분수 부분을 갖지 않는다.

mysql> SELECT FORMAT(12332.123456, 4);

        -> '12,332.1235'

mysql> SELECT FORMAT(12332.1,4);

        -> '12,332.1000'

mysql> SELECT FORMAT(12332.2,0);

        -> '12,332'

  • HEX(N_or_S)

만일N_or_S 이 숫자라면, N에 대한 16진수 값에 해당하는 스트링 표현을 리턴하는데, 여기에서 N (BIGINT) 숫자가 된다. 이것은 CONV(N,10,16)과 동일하다.

만일 N_or_S 이 스트링 이라면, N_or_S 에 대한 16진수 스트링 표현식을 리턴하는데, N_or_S 에 있는 각각의 문자는 2개의 16진수 숫자로 변환된다.

mysql> SELECT HEX(255);

        -> 'FF'

mysql> SELECT 0x616263;

        -> 'abc'

mysql> SELECT HEX('abc');

        -> 616263

  • INSERT(str,pos,len,newstr)

str 의 포지션 pos 에서 시작하는 서브 스트링을 len 문자 길이만큼 스트링 newstr로 변경시켜서 str 을 리턴한다. 만일 pos 가 스트링의 길이 안에 있지 않다면, 원래의 스트링을 리턴한다. 만일 len 의 범위가 스트링의 나머지 길이 범위 내에 있지 않다면, 포지션 pos  이후의 나머지 스트링을 대체 시킨다. 만일 어떤 인수가 NULL 이면, NULL을 리턴한다.

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');

        -> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What');

        -> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');

        -> 'QuWhat'

이 함수는 다중 바이트에서도 동작을 한다.

  • INSTR(str,substr)

str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. 이것은 LOCATE()에서 두 개의 인수를 사용하는 것과 동일한 결과를 리턴 하지만, 인수들의 순서는 반대가 된다.

mysql> SELECT INSTR('foobarbar', 'bar');

        -> 4

mysql> SELECT INSTR('xbar', 'foobar');

        -> 0

이 함수는 다중 바이트에서도 동작을 하며, 최소 하나의 인수가 바이너리 스트링일 경우에만 문자 크기를 구분한다.

  • LCASE(str)

LCASE()LOWER()와 동의어 이다.

  • LEFT(str,len)

스트링 str에서 가장 왼쪽으로부터 len 개의 문자를 리턴한다.

mysql> SELECT LEFT('foobarbar', 5);

        -> 'fooba'

  • LENGTH(str)

str의 길이를 바이트 단위로 리턴한다. 다중 바이트 문자는 다중 바이트로 계산 (count)된다. 이것은 2 바이트 문자가 5개 있는 스트링의 경우, LENGTH() 10을 리턴하는 반면에, CHAR_LENGTH()5를 리턴한다는 것을 의미한다.

mysql> SELECT LENGTH('text');

        -> 4

  • LOAD_FILE(file_name)

파일을 읽은 다음에 파일의 내용물을 스트링으로 리턴한다. 이 함수를 사용하기 위해서는, 파일은 반드시 서버 호스트에 있어야 하며, 그 파일에 대한 경로 이름을 전체적으로 지정해야 하며, 그리고 FILE 권한을 가져야 한다. 그 파일은 모든 사용자에게 읽힐 수 있어야 하며 파일의 크기는 max_allowed_packet 바이트 보다는 작아야 한다.

만일 파일이 존재하지 않거나 또는 위의 조건 중에 하나로 인해 파일을 읽을 수가 없게 된다면, 이 함수는 NULL을 리턴한다.

MySQL 5.0.19 이후 버전에서는, character_set_filesystem 시스템 변수가 리터럴 스트링으로 주어진 파일 이름에 대한 해석을 제어한다.

mysql> UPDATE t

            SET blob_col=LOAD_FILE('/tmp/picture')

            WHERE id=1;

  • LOCATE(substr,str), LOCATE(substr,str,pos)

첫 번째 신텍스는 str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. 두 번째 신텍스는, 포지션 pos에서 시작을 해서, str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. substr str에 존재하지 않을 경우에는, 0을 리턴한다.

mysql> SELECT LOCATE('bar', 'foobarbar');

        -> 4

mysql> SELECT LOCATE('xbar', 'foobar');

        -> 0

mysql> SELECT LOCATE('bar', 'foobarbar', 5);

        -> 7

이 함수는 다중 바이트에서도 동작을 하며, 인수 중에서 최소 하나라도 바이너리 스트링일 경우에만 문자 크기를 구분한다.

  • LOWER(str)

현재 (current) 문자 셋 매핑에 따라서 스트링 str 의 모든 문자를 소문자로 변경 시켜서 리턴한다. 디폴트는 latin1 (cp1252 West European).

mysql> SELECT LOWER('QUADRATICALLY');

        -> 'quadratically'

이 함수는 다중 바이트에서도 동작을 한다.

  • LPAD(str,len,padstr)

왼쪽에 스트링 padstr 를 집어 넣어서 문자의 길이를 len 만큼 되도록 한 스트링 str 을 리턴한다. 만일 str len 보다 길다면, 리턴 값은 len 길이 만큼 줄어 든다.

mysql> SELECT LPAD('hi',4,'??');

        -> '??hi'

mysql> SELECT LPAD('hi',1,'??');

        -> 'h'

  • LTRIM(str)

스트링 앞에 있는 스페이스를 없앤 스트링 str 를 리턴한다.

mysql> SELECT LTRIM('  barbar');

        -> 'barbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • MAKE_SET(bits,str1,str2,...)

bits 셋에 대응되는 비트를 가지고 있는 스트링으로 구성된 셋 값 (콤마 문자로 구분된 서브 스트링을 가지고 있는 스트링)을 리턴한다. str1은 비트 0에 대응되고, str2 1에 대응되며, 계속 이런 식으로 대응이 된다. str1, str2, ... 에 있는 NULL 값은 결과에 따라 나오지 않는다.

mysql> SELECT MAKE_SET(1,'a','b','c');

        -> 'a'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');

        -> 'hello,world'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');

        -> 'hello'

mysql> SELECT MAKE_SET(0,'a','b','c');

        -> ''

  • MID(str,pos,len)

MID(str,pos,len)SUBSTRING(str,pos,len)과 동의어 이다.

  • OCT(N)

N 8진 값에 해당하는 스트링 표현식을 리턴하는데, 여기에서 N (BIGINT) 번호가 된다. 이것은 CONV(N,10,8)과 같다. 만일 N NULL이면, NULL을 리턴한다.

mysql> SELECT OCT(12);

        -> '14'

  • OCTET_LENGTH(str)

OCTET_LENGTH()LENGTH()과 동의어 이다.

  • ORD(str)

만일 If the leftmost character of the string스트링 str 의 가장 왼쪽의 문자가 다중 바이트 문자라면, 그 문자에 대한 코드를 리턴하는데, 그 값은 아래의 공식을 사용해서 얻어낸다:

  (1st byte code)

+ (2nd byte code × 256)

+ (3rd byte code × 2562) ...

만일 가장 왼쪽의 문자가 다중 바이트 문자가 아니라면, ORD()ASCII() 함수와 같은 값을 리턴한다.

mysql> SELECT ORD('2');

        -> 50

  • POSITION(substr IN str)

POSITION(substr IN str)LOCATE(substr,str)과 동의어 이다.

 

  • QUOTE(str)

SQL 명령문에서 이스케이프된 데이터 값으로 사용할 수 있는 결과를 만들기 위해 스트링에 인용 부호를 준다. 만일 인수가 NULL이면, 리턴 값은 인용 부호가 없는 단어 “NULL” 이 나오게 된다.

mysql> SELECT QUOTE('Don\'t!');

        -> 'Don\'t!'

mysql> SELECT QUOTE(NULL);

        -> NULL

  • REPEAT(str,count)

count 횟수 만큼 반복된 스트링 str 으로 구성된 스트링을 리턴한다. 만일 count 1 보다 작을 경우에는, 빈 스트링을 리턴한다. str 또는 count NULL이라면, NULL을 리턴한다

mysql> SELECT REPEAT('MySQL', 3);

        -> 'MySQLMySQLMySQL'

  • REPLACE(str,from_str,to_str)

스트링 from_str 가 나온 부분을 모두 스트링 to_str로 대체해서 스트링 str 을 리턴한다.               REPLACE()from_str에 대한 검색을 할 때 문자 크기를 구분해서 매칭을 실행한다.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');

        -> 'WwWwWw.mysql.com'

이 함수는 다중 바이트에서도 동작을 한다.

  • REVERSE(str)

문자의 순서를 역순으로 헤서 스트링 str 을 리턴한다.

mysql> SELECT REVERSE('abc');

        -> 'cba'

이 함수는 다중 바이트에서도 동작을 한다.

  • RIGHT(str,len)

str에서 오른쪽으로부터 len 문자 만큼을 리턴한다.

mysql> SELECT RIGHT('foobarbar', 4);

        -> 'rbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • RPAD(str,len,padstr)

스트링 padstr 를 오른쪽에 집어 넣어서 len 문자 길이 만큼 str을 만들어서 리턴한다. 만일 str len 보다 길다면, 리턴 값은 len 문자 만큼 짧아진다.

mysql> SELECT RPAD('hi',5,'?');

        -> 'hi???'

mysql> SELECT RPAD('hi',1,'?');

        -> 'h'

이 함수는 다중 바이트에서도 동작을 한다.

  • RTRIM(str)

스트링 str에서 뒤에 붙어 있는 스페이스 문자를 없앤 스트링을 리턴한다.

mysql> SELECT RTRIM('barbar   ');

        -> 'barbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • SOUNDEX(str)

Str의 사운덱스(soundex) 스트링을 리턴한다. 거의 같은 소리가 나는 두 개의 스트링은 고유의 사운덱스 스트링을 가져야 한다. 표준 사운덱스 스트링은 4 문자 길이가 되지만, SOUNDEX() 함수는 임의의 길이 스트링을 리턴한다. 여러분은 표준 사운덱스 스트링을 얻기 위해서 결과 값에 SUBSTRING()을 사용할 수가 있다. str에 있는 문자 중에 알파벳이 아닌 것들은 모두 무시가 된다. A-Z 범위를 벗어나는 모든 국제 문자들은 모두 모음으로 취급된다.

mysql> SELECT SOUNDEX('Hello');

        -> 'H400'

mysql> SELECT SOUNDEX('Quadratically');

        -> 'Q36324'

  • expr1 SOUNDS LIKE expr2

이것은 SOUNDEX(expr1) = SOUNDEX(expr2)과 같다.

  • SPACE(N)

N 개의 스페이스 문자로 구성된 스트링을 리턴한다.

mysql> SELECT SPACE(6);

        -> '      '

  • SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

len 인수가 없는 형태는 포지션 pos에서 시작을 하는 서브 스트링을 스트링 str 에서 리턴 한다. len 인수를 가지고 있는 형태는 포지션 pos에서 시작을 해서 서브 스트링 len 문자를 리턴한다. FROM을 사용하는 형태는 표준 SQL 신텍스이다. pos의 값으로 음수를 사용하는 것도 가능하다. 음수를 사용할 경우에는, 서브 스트링의 시작점이 스트링의 처음이 아닌 끝에서부터 pos 문자 위치가 된다. 음수 값은 이 함수의 어떤 형태에서도 사용이 가능하다.

mysql> SELECT SUBSTRING('Quadratically',5);

        -> 'ratically'

mysql> SELECT SUBSTRING('foobarbar' FROM 4);

        -> 'barbar'

mysql> SELECT SUBSTRING('Quadratically',5,6);

        -> 'ratica'       

mysql> SELECT SUBSTRING('Sakila', -3);

        -> 'ila'       

mysql> SELECT SUBSTRING('Sakila', -5, 3);

        -> 'aki'

mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);

        -> 'ki'

이 함수는 다중 바이트에서도 동작을 한다.

만일 len 1 보다 작으면, 그 결과는 빈 스트링이 된다.

SUBSTR()SUBSTRING()과 동일하다.

  • SUBSTRING_INDEX(str,delim,count)

구분자 (delimiter) delimcount 만큼 나오기 전에 스트링 str 에서 서브 스트링을 리턴한다. 만일 count 가 양수 (positive)라면, 마지막 구분자의 왼쪽에 있는 모든 것들이 리턴된다 (왼쪽부터 계산이 됨). 만일 count 가 음수일 경우에는, 마지막 구분자의 오른쪽에 있는 모든 것들이 리턴된다 (오른쪽부터 계산됨). SUBSTRING_INDEX()delim에 대한 검색을 할 때 문자의 크기를 구분한다.

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

        -> 'www.mysql'

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);

        -> 'mysql.com'

이 함수는 다중 바이트를 지원한다.

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

스트링 str 를 모든 remstr 접두사 (prefixes) 또는 접미사를 제거한 상태로 리턴한다. 만일 BOTH, LEADING, 또는 TRAILING 중의 어느 것도 주어지지 않는다면, BOTH가 주어진 것으로 간주된다. remstr 는 선택 사항이며, 만일 지정되지 않을 경우에는, 스페이스가 제거된다.

mysql> SELECT TRIM('  bar   ');

        -> 'bar'

mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');

        -> 'barxxx'

mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');

        -> 'bar'

mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

        -> 'barx'

이 함수는 다중 바이트를 지원한다.

  • UCASE(str)

UCASE()UPPER()와 동의어이다.

  • UNHEX(str)

HEX(str)와는 반대 연산을 실행한다. , 이 함수는 인수에 있는 각각의 16진수를 숫자로 해석을 하고 그 숫자에 대응하는 문자로 변환을 시킨다. 그 결과로 나오는 문자들은 바이너리 스트링으로 리턴된다.

mysql> SELECT UNHEX('4D7953514C');

        -> 'MySQL'

mysql> SELECT 0x4D7953514C;

        -> 'MySQL'

mysql> SELECT UNHEX(HEX('string'));

        -> 'string'

mysql> SELECT HEX(UNHEX('1267'));

        -> '1267'

  • UPPER(str)

Returns 스트링 str 를 현재의 (current) 문자 셋 매핑에 따라서 대문자로 변환이 된 모든 문자와 함께 리턴한다. 디폴트는 latin1 (cp1252 West European).

mysql> SELECT UPPER('Hej');

        -> 'HEJ'

이 함수는 다중 바이트를 지원한다.

신고
Posted by naearu

블로그들의 방문자수를 가져오는 프로그램을 짜야할 일이 생겨서..

블로그들에 프로그램으로 접속을 시도했다!!



얼래? 몇번하다보니 알았는데..이거..카운트가 올라가네??

설마 설마 하면서 새로고침을 몇번해주니까;;

얼라리랍쇼?

카운트가 쭉쭉올라가네? 막힘없는건가?

사용자 삽입 이미지
그래서 심심해서..
10초당 한번씩 리로드 되게 해놓고..
걍 두고 회사갓다 오니까..투데이가 만명이 넘었다 ㄱ-;;

(만명채웟는데 그새 3명이 들어왓네;;)

평소에 끽해야;; 300명? 많이오면 천명정도?엿던것을;; 그냥.. 10000명..워...참으로 대단하다 ㄱ-;;;

카운터좀 올리려고.. 이상한짓몇번 하긴 했지만;; 이걸로써.. 그냥.. 무의미해져버렷다..
자.. 대략 계산을 해봅시다..
이걸 켜놓고 나간게.. 아침..8시쯤..
끄고 확인한게 9시30분..
1분당..6명이 들어오는 셈이니까..
6x60x13=4,680
대략.. 4천명? 엥?? 계산이 이상한가??? ㄱ-;;
아.. 뭔가.. 셋팅미스인듯..10ㅊ당으로 돌아선 절대 만명이 안되는군;;
그렇다고 설마. 5천명이 하루에 왓다고 할리도 없고;;
뭐; 여튼..
생각해보면.. 1초당한번이면..13시간에 46,800이다.. ㄱ-; 이게 어디 하루치 카운터인가!!!
내 토탈 카운트보다 많다;;
뭐.. 소스를 손보면야.. 한시간안에 만명도 채우겟지만;;

이미 ㄱ-; 후...
file 이 네글자의 위력으로 하루 카운트가 만이 넘는다는게;; 참;; 신기하군하;;

심심한데 2만 넘겨놓을까;; 오늘만? ㅋ


....
해보고 싶으신분은 말씀하삼.. 친히 초당 한방씩 날리는 코드로 써드리겟심 ㄱ-;



신고
Posted by naearu

PHP에서 소수점 버림함수는 floor()입니다.

floor 버림
floor(4.3);  // 4
floor(9.999); // 9

ceil 올림
ceil(4.3);    // 5
ceil(9.999);  // 10

round반올림
round(3.4);        // 3
round(3.5);        // 4
round(3.6);        // 4
round(3.6, 0);      // 4
round(1.95583, 2);  // 1.96
round(1241757, -3); // 1242000
round(5.045, 2);    // 5.05
round(5.055, 2);    // 5.06


신고
Posted by naearu