2013. 9. 5. 19:02

1. ppC++

ppC++( C++의 선행처리기의 약어)은 HTML선행처리된 C/C++ 프로그래밍 언어이다.
이 처리기는 C/C++ 언어로, HTML 코드 내에서 서버 기반 프로그램을 작성할 수 있으며,
웹 프로그래밍을 쉽게 처리할 수 있도록 새로운 몇 가지 기능도 제공합니다.


ppC++은 기본적이고 간단한  HTML 환경에 고성능과 안정성이 조화롭게 운영될 수 있는

프로그램을 작성 하기 위해 개발되었습니다.


C/C++ 언어와 HTML의 기본적인 내용을 알고 있고, Perl, PHP, JSP, Python, ASP 등의

새로운 인터프리터 언어를 배우는 시간이 없을 경우,  ppC++을 이용하여 동적인 웹 페이지를
작성 할 수 있습니다.

만약 당신이 C/C++ 프로그래머라면, 별도의 새로운 기술을 습득할 필요 없이,
기본적인 HTML언어와
혼합해서 곧바로 서버기반 프로그램을 빠르게 작성 할 수 있습니다.


이러한, ppC++의 주요 목적은 고전적인 C/C++ 언어를 이용해서 간단하면서도 빠르게 동적인

웹 페이지를 작성할 수 있도록 하는 것입니다.

 

 

2 소개

2.1 시작

ppC++은 기본적인 CGI프로그래밍과 동일합니다.
C/C++ 언어만 사용하면서도 간단하면서도 빠르고 강력한 기능을 안정적으로 사용할 수 있게 되고, 복잡한
CGI 프로그래밍의 내부를 숨겨서 단순하게 사용할 수 있도록 해줍니다.

이것이 어떻게 동작하는지는 다음의 예를 보시면 알 수 있습니다

<html>
  <body>
    <;    printf( “Hello from ppC!”);    ;>
  </body>
</html>


예제에서 알 수 있듯이, 그저 단순한 HTML 페이지처럼 보이지만, HTML코드 사이에서 특수한

태그로(<; ;>) 표현된 C/C++ 언어로 구성된 한 줄을 확인할 수 있습니다.

자, 상기의 예제 파일을 cgi-bin 폴더 혹은 html 폴더에 “hello.ppc”로 저장한 후,  ppC++ 웹 컴파일러 시스템이나,
단순히 브라우저의 주소에 “
http://xxx.xxx/cgi-bin/hello.ppc“라고 입력해서 실행 할 수 있습니다.(UNIX버전일 경우)

일반적인 CGI프로그램과 동일하므로, 다음과 같은 결과를 브라우저에 출력하게 됩니다. 

<html>
  <body>
     Hello from ppC!
  </body>
</html>


지금까지 설명으로 알 수 있듯이, ppC++ 선행처리기로 작성된 “hello.ppc.[cgi]” 파일은 소스파일이 없이
곧바로 실행 가능한 독립적인 CGI 프로그램으로 컴파일 되며, 소스코드나 ppC++ 웹 컴파일러를 필요로 하지 않고
작동되는 독립된 서버기반 프로그램입니다.


만약, 누군가 웹에서 소스코드를 보기 위해서 hello.ppc 파일을 다운로드 한다면, 웹 서버는

“500 Internal Server Error” 에러메시지를 표시해서, 소스코드를 보호하게 됩니다.

 

2.2 설치

ppC++을 사용 하기 위해서는 가장 먼저 웹 서버가 설치되어 있어야 합니다.
현재 지원 가능한 웹 서버는 아파치 2.0 이상을 지원하고 있습니다.(Apache 2.x)

아파치 웹 서버의 설정과 설치에 대해서 잘 알지 못한다면, LAMP, XAMP와 같은 자동 설치
프로그램을 이용하시기 바랍니다.웹 서버의 설정 중 중요한 것은 “CGI” 실행가능 상태입니다.

 

2.3 아파치 설정파일 변경

 Httpd.con
                  AddHandler
                  ScriptAlias /cgi-bin /var/www/cgi-bn [ 특정 폴더에서만 실행]

  

3 ppC++ 선행처리기 문법

HTML 페이지에서 ppC++ 코드를 삽입하는 방법은 다음과 같습니다.


1).  <;  printf( “
표준적인 방법세미콜론으로 종료“;  ;><br>
     ”<;  …  ;>” 사이에 일반적인 C/C++ 코드를 기술합니다.
    또한 표준적인 C/C++의 문법을 그대로 사용해서 사용하면 됩니다.

2).  <;= ” 태그  ’<;=’  태그는 변수/함수의 값을 곧바로 출력 “;  ;><br>
   “<;= …  ;>” 태그는 값을 출력합니다. cout << 값 또는 printf(“값”)의 단축된 표현입니다.
   변수 또는 함수형 등의 수식의 값을 곧바로 출력합니다.

3).  <?= “PHP형식의 태그” ?> <%= “ASP형식의 태그” %>
   <;= “어떤 형태로도 가능” %> <%= “이런형식도” ?> <?= “혼합해서 사용해도 가능” ;><br>
   “<? ?>, <% %>, <; ;>, <? %>, <%  ?>, <?  ;>”와 같은 형식의 전용태그(ASP, PHP,JSP…)를
  자유롭게 혼합해서 사용할 수 도 있습니다. 이것은 다른 언어로 작성된 소스를 곧바로
  ppC++로 처리할 수도 있음을 의미합니다. (표준적인 방법은 <;  … ;> 형식입니다)

4). <;=  “이것과“;    ;> == <;= “이것은 동일” ;>
     값 표현 식 태그(“<;= … ;>”)에서 문장의 종료 표시인 세미콜론(;)을 생략해도 동일한
    결과가 출력됩니다.

 


상기의 설명에서도 알 수 있듯이, 정해진 전용태그 없이 “<” 기호 다음에 ?, %, ; 등의 태그를 자유롭게

사용해도 됩니다.
본 가이드에서는, C/C++코드는 “<; … ;>” 태그로 기술하며, 값 표현식 태그는
“<;= …  ;>” 태그로 사용합니다.

 

3.1 함수, 클래스 전역 변수

함수, 클래스 및 전역 변수는 어디서든지 선언할 수 있습니다. 또한 표준 C/C++ 헤더 파일도 동일 또는 별도의
ppc 파일에서 어디서나 선언해서 사용할 수 있습니다.(전 역 성)

가장 간단한 예제인 함수와 클래스를 ppc++에서 사용하는 방법에 대한 예제입니다. 

본 스크립트에 포함된 함수 :<;  function(“foo”);  ;>
  
   <; void function(string parameter){
        cout << “
안녕하세요! 인자를 가진 함수입니다. <b>”
             << parameter << “</b>!”<<endl;
   };>


상기의 예제에서 알 수 있듯이, 함수 선언 이전에도 함수를 호출해서 사용할 수 있습니다

이런 코드는 정상적으로 작동하지만, 좀더 HTML에 최적화 되어서 사용하기 쉽도록
ppC++에서는 다음과 같은 표현방식을 사용가능 하도록 추가 되었습니다. 

본 스크립트에 포함된 함수: <; function(“foo”); ;>
  
   <; void function(string parameter){;>
        안녕하세요! 인자를 가진 함수입니다
        <b><;= parameter ;></b>!
   <;};>

 

즉, 원하는 C/C++코드가 필요하다면, 어디서나 열기 태그(“<;”)와 닫기 태그(“;>”)를 사용하여 언제든지
C/C++코드를 삽입하여 작성할 수 있습니다. 클래스/구조체의 경우에도 상기의 예제와 같이 사용됩니다. 

이곳에서 객체를 생성 : <u><;  myClass obj ;></u><br>
객체 메소드 호출: <u><;  obj.function(“bla-bla”) ;></u><br>
<; class myClass{
     public:
                  myClass() { ;>
객체 생성자 <b><;= this  ;></b> <; }
                 ~myClass() { ;> 객체<b><;= this ;></b>소멸중… <; }
      void function(string p) { ;>
        객체내의 메소드 <b><;= this ;></b>
        와 인자 <b><;= p ;></b>
     <; }
  } ;>

 


전역 변수, 클래스, 구조체, 객체(함수와 클래스에서  액세스 할 경우)를 함수 내부에서 사용 할 경우라면

특별한 키워드를 사용하여 정의 해야 합니다.
 ”global”  키워드로 선언 해야만 합니다. ppC++은 별도의 main() 함수를 사용하지 않기 때문에,전역변수를
사용 할 경우라면 해당 키워드를 사용해야만 접근할 수 있습니다. 

<;  // 전역변수 사용
      global int var = 2003;
      void function() { ;>

          안녕하세요, var 변수의 값은 <b><;= var ;></b>!
   <; } ;>
  본 스크립트에는 전역변수가 포함되어 있습니다. <b><;=var;></b>.
  
  함수 호출: <; function() ;>


함수 내에서 전역변수를 사용 할 경우는 반드시 global 변수로 정의해야만 합니다.

이러한 이유에서 다음의 예제에서 var 변수에 액세스 할 수 없습니다.(에러 발생) 

 <; int var = 2003;
   void function()  {  ;>

      안녕하세요, var 의 값은<b><;= var ;></b>!
<; } ;> 

 

 

또한, C/C++ 표준 라이브러리나 사용자정의 라이브러리를 어디서나 곧바로 사용할 수 있습니다.
일반적인 문법과 같은 방식으로 아무런 변경 없이 그대로 사용할 수 있습니다.
또한, 라이브러리를 나중에 선언하고 먼저 사용해도 아무런 문제가 발생하지 않습니다.
다음의 예제는 수학함수 라이브러리를 사용하는 예제입니다. 

<; #include <math.h> ;>
   0.5의 코사인 값은 <b><;=  cos(0.5)  ;></b><br>
  1970년 1월 1일부터 현재까지의 초는    
   <b><; printf(“%ld</b>”,time(NULL)); //선언이전에 함수호출
   #include <time.h> ;>


    cstdio(stdio.h), cstdlib(stdlib.h),iostream(iostream.h)

    헤더파일은 이미 포함된 상태입니다. 

 

다음의 예제는 사용자정의 라이브러리를 사용하는 예제입니다.(“my_header_file.h”) 

<; #include “my_header_file.h” ;>
   안녕하세요! 사용자 정의 함수의 결과는 
   <i><;= my_func1(“bla-bla-bla”) ;></i> 와(과)
   <i><;= my_func2(12345) ;></i>입니다!

 

 

 

3.2 제어 구조

제어 구조(반복 문 /분기 문 : while, for, if-else) 관련 명령어 또한, 변경 없이 곧바로 사용할 수 있습니다.
또한,  HTML에 최적화된 상태로 사용할 수 있습니다.
아래와 같은 출력 문을 얻기 위한 일반적인 방법은 다음과 같습니다.

abcccabcccO!bcccabcccabcccabcccaO!cccabcccabcccabcccabO!ccabcccabcccabcccabcO!

<;
    for(int i=0; i < 100; ++i){
        if(i%21 == 10){
            cout << “<b>O!</b>”;
            i++;
        }  
        switch(i%5){
        case 0: cout << “<i>a</i>”; break;
        case 1: cout << “<u>b</u>”; break;
        default: cout << “<sup>c</sup>”; break;
        }
    }
;>      

 

 

그러나, ppC++을 사용하여 좀더 HTML 친화적인 코드로 작성하는 방법은 다음과 같습니다. 

<;
    for(int i=0; i < 100; ++i){
        if(i%21 == 10){ ;>

            <b>O!</b><;
            i++;
        }  
        switch(i%5){
        case 0: ;>
<
i>a</i><; break;
        case 1: ;>
<u>b</u><; break;
        default: ;>
<sup>c</sup><; break;
        }
    }
;>

 

 

 3.3 HTTP 요청 변수 (GET POST)

 지금까지의 기술로도 동적인 HTML 웹 페이지를 작성할 수 있게 되었지만, 좀더 사용자와 대화할 수 있는
웹 페이지를 만들고자 한다면, HTTP GET/POST 방법과 FORM에 대하여 알아야 합니다.


다음의 예제와 같이 사용자가 입력하는 var1, var2라는 변수를 처리하기 위해서는 HTTP의 GET/POST

처리 방식과  FORM에 대해서 처리 해야 합니다. 

<form method=”post” action=”script.ppc”>
        <input type=”text” name=”var1″ value=”value1″>
        <input type=”text” name=”var2″ value=”value2″>
        <input type=”submit”>
</form>    


상기의 예제는, 단순한 HTML코드로서 사용자가 var1, var2라는 입력상자에 값을 입력한 후 Submit버튼을
누르면
script.ppc라는 파일로 해당 변수를 전달하고 해당 스크립트에서 전달된 var1, var2 변수를
사용하는 예제입니다.


ppC++에서는 상기의 처리 과정에서 넘겨지는 변수 var1, var2를 자동으로 생성해서 전달합니다.

CGI 프로그래밍에서 가장 핵심적인 처리 부분인 변수전달과 분석과정을 캡슐화하여 내부적으로 처리합니다.
사용자는 세부적인 사항에 대한 지식이 없이도, 단지 사용법만 익혀서 처리하면 됩니다.
기존의 C기반의 CGI 프로그래밍에서는 여러 가지의 사용자의 입력을 분석/처리 하는 다수의 라이브러리가
존재했으며, 각각의 장단점이 존재했었습니다.


ppC++에서는 단순하면서도 강력한 방법으로 처리합니다. 모든 변수와 환경변수는 “ppc”라는 객체에

캡슐화하여 처리하도록 되어 있습니다. (ppc.var1, ppc.var2…) 

<; // script.ppc ;>
<html>
<body>
    var1 의 값 <;= ppc.var1 ;><br>
    var2 의 값 <;= ppc.var2 ;><br>
     <hr>모든 변수 표시:<br>
    <; for(int i=0; i< ppc.__COUNT__; ++i) { ;>
        <i><;= i ;></i>). <;= ppc.key(i)  ;> = <;= ppc.value(i)  ;> <br>
    <; } ;>      
</body>
</html> 


상기 예제의 출력결과는 다음과 같습니다. 

 
var1 의 값 value1
var2 의 값 value2

———————————————————-
모든 변수 표시:
0). var1 = value1
1). var2 = value2


만약에, 하나의 스크립트파일(.ppc)에서 GET방식과 POST방식을 동시에 사용할 경우에는

“ppc.get(변수)”, “ppc.post(변수)”와 같이 사용합니다. 

<form action=”script.ppc.cgi?var1=value” method=POST>
<input name=var1 value=another_value>
</form>


상기의 예제에서는, var1의 값이 전달될 때 GET방식의 URL로 값을 전달하며,

실제 처리는POST로 전달하는 예제입니다. 그 결과 GET방식의 경우는 “value” 값이 전달되며(ppc.get(var1))  
POST 방식의 경우는(ppc.post(var1)) “another_value” 값을 반환합니다.
ppc.var1의 경우 ppc.post / ppc.get보다 높은 우선순위를 가지고 있습니다.

반드시 기억할 것은, “ppc.XXXX”의 반환 값은 실제 C/C++의 문자열 형 객체는 아니며,
STL의 문자열 형태임을 명심하시기 바라며, 모든 기능을 다 사용할 수는 없습니다.(std::string)

  

3.4 쿠키

모든 Cookie 관련 작업은 “cookie” 클래스 객체를 통해서 처리 할 수 있습니다.

cookie.set(“name=value; EXPIRES=date; PATH=path; DOMAIN=domain_name; SECURE”)

형식으로 브라우저에게 쿠키 값을 전달 할 수 있습니다.
다음의 예제는 쿠키 “foo”를 설정하고 두 번째 페이지에 대한 링크를 제공하고 있습니다. 

<;// page1.ppc ;>
<html>
<body>
<;  // 현재 비어있는 쿠키변수:
  if(cookie.foo==”") { ;>

        Setting cookie<;
        cookie.set(“foo=oof”); } ;>

<a href=”page2.ppc.cgi”>두번째 페이지로 이동</a>
</body>
</html>


 ”Page2.ppc”에서는 쿠키의 값을 보여줍니다. 쿠키 값을 설정하지 않는다면 빈 문자열이 출력 됩니다. 

<;// page2.ppc ;>
<html>
<body>
쿠키 <b>foo</b> 는 <b><;= cookie.foo ;></b>!<br>
<a href=”page3.ppc.cgi”>세 번째 페이지로 이동</a>
</body>
</html>


“Page3.ppc”에서도 cookie.foo의 값에 액세스할 수 있습니다. 

<;// page3.ppc ;>
<html>
<body>
현재 페이지에서도 쿠키 값에 액세스 할 수 있습니다.<br>
<b>foo</b>의 값은 <b><;= cookie.foo ;></b>!!!<br>
<a href=”page1.ppc.cgi”>첫 번째 페이지로 이동</a>
</body>
</html>

 

 
Cookie 값을 삭제 할 경우는, 단순히 cookie.set(“FOO =”)와 같이 빈 문자열로 쿠키를 설정하면
브라우저에서
해당 쿠키 변수를 삭제합니다.


다시 한번, 기억할 것은 cookie객체의 반환 값은 “string”형이지만, 일반적인 C/C++ 문자열형
객체가 아닙니다.

 

3.5  #ppcinclude 전처리 지시어

만약에, ppc 스크립트에서 또 다른 ppc스크립트를 포함할 경우, 일반적인 “#include”문으로는 처리할 수 없습니다.
ppC++ 스크립트에서 다른 스크립트를 포함해야 할 경우는 #ppcinclude”라는
별도의 전 처리기 지시어를
사용해야 합니다. 
“#include”문으로 ppc 스크립트를 포함할 경우에는 컴파일 에러를 접하게 될 것입니다. 
C/C++ 표준의 “#include”  지시어는 “.h / .c / .cpp” 파일만 포함해야 합니다. 

<;// main.ppc;>
<html>
  메인 파일!
  <; int a=15 ;>
   a 의 값은 <;= a ;>!<br>
<; #ppcinclude “second_file.ppc” ;>
</html>

<;//second_file.ppc ;>
<hr>
두 번째 파일!<br>
메인 파일의 변수(a)에 액세스 할 수 있습니다.!<br>
a 의 값은 <;= a ;>!


“main.ppc”를 실행하면 다음과 같은 결과가 출력됩니다. 

메인 파일! a 의 값은 15!

—————————————————————-
두번째 파일!
메인 파일의 변수(a)에 액세스 할 수 있습니다!
a 의 값은 15!


“main.ppc”파일을 컴파일 하면, “#ppcinclude” 문에 의해서 자동으로 “second.ppc”가 포함되므로,

정상적으로 컴파일 됩니다. 만약, “second.ppc” 파일만 별도로 컴파일 할 경우에는 “a”변수가
선언되지 않았다는 에러 메세지가 표시됩니다.

“#ppcinclude” 지시어로 포함하는 ppc 스크립트 파일에는 함수, 구조체, 클래스 등 어떠한 것도
포함될 수 있습니다. 따라서, ppc 스크립트를 하나의 파일로 작성하거나, 분리된 ppc 스크립트
파일로 분리되어 사용할 수 있게 됩니다. 단, 이름이  충돌 되면 안됩니다.(모듈화) 

<; // main2.ppc ;>
<html>
<body>
  Hello from main 2 file!<br>
  Here i will call the function from the <b>with_function.ppc</b> file,
    which will be included after:<br>
    <; function(“One-two, one-two…”) ;>
<hr>including “with_function.ppc“…<; #ppcinclude “with_function.ppc” ;>
  
hm, let’s include it again(will we get conflict with included before?):
  <? #ppcinclude “with_function.ppc” ;>
</body>
</html>

<;// with_function.ppc ;>
<fieldset>
Hello!  this file contains the function.<br><br> Calling function: <; function(“bla-bla”) ;>
<; void function(string word) { ;>
     <i>I am the function with parameter <b><;= word ;></b></i>
<; } ;>
</fieldset>


“main2.ppc”를 컴파일 해서 실행하면 브라우저에는 다음과 같이 출력됩니다. 

Hello from main 2 file!
Here i will call the function from the with_function.ppc file, which will be included after:
I am the function with parameter One-two, one-two…
——————————————————————————–
including “with_function.ppc”… Hello! this file contains the function.

Calling function: I am the function with parameter bla-bla hm, let’s include it again(will we get conflict with included before?):
Hello! this file contains the function.

Calling function: I am the function with parameter bla-bla

 


4.
기타 키워드 목록

ppC++ 선행처리기에는 표준 C/C++ 언어에 다음과 같은 키워드가 추가되어 있습니다.
   ppc
   cookie
   global

 

 

5.  ppC++ 상수 목록

· ppc.SCRIPT

   string ppc.SCRIPT -  ppc 스크립트 실행 바이너리 이름
                                           

예를 들어, 파일이름이 “script.ppc”일 경우는

<;= ppc.SCRIPT ;> 태그의 결과는  “script.ppc.cgi”(Windows) 거나  ”script.ppc”(UNIX).

운영환경 검사:<br>
<; if(ppc.SCRIPT == “script.ppc”) { ;>
    운영환경은 Unix!  <;= ppc.SCRIPT ;>“!
<; } else { ;>
    운영환경은 Windows!<;= ppc.SCRIPT ;>
<; } ;>

 
· ppc.__COUNT__

   int  ppc.__COUNT__ – 모든 HTTP 요청 변수의 숫자 값을 저장

 

 6. ppC++ 함수 목록

· ppc.header(string)

  void ppc.header(string val) – 브라우저에 HTTP 헤더를 전송합니다.

ppc.header(“Content-type: text/html”);
ppc.header(“Location: script.ppc”);


· ppc.content_type(string)

   void ppc.content_type(string val) – 문서의 컨텐츠 형식을 설정합니다.

ppc.content_type(“text/ html”);
ppc.content_type(“image/gif”);
ppc.content_type(“text/plain”);

 · ppc.addslashes (string)

   string ppc.addslashes(string val)  - 백 슬러쉬를 추가해서 반환 합니다.

ppc.addslashes(“it\’s \”ppC++\”!”);  반환 값은 다음과 같습니다.

“it\\’s \\”ppC++\\“!”


· ppc.key(int)

   const string ppc.key(int val) – HTTP 요청 변수의 이름을 반환합니다.
                                              val 값은 0이거나,  ppc.__COUNT__  미만 값 이여야 합니다.

 
· ppc.value(int)

   const string ppc.value (int val) – HTTP 요청 변수의 값을 반환합니다.
                                                val 값은 0이 거나, ppc.__COUNT__  미만 값 이여야 합니다.

 
· ppc.urldecode(string)

   string ppc.urldecode(string val) – URI(Uniform Resource Identifier)의 값을 해독합니다.

 

· ppc.urlencode(string)

   string ppc.urlencode(string val) -  “-_”문자를 제외한 모든 영 숫자가 아닌 문자를 URI형태로
 변환 합니다. “%”문자와 2개의 16진수로 변환하며,
 FORM의 변환 형식과 동일하게 변환합니다. 

<;= ppc.urlencode(“x = a * b”);   // will print “x%20%3D%20a%20%2A%20b”.
                // if I will try to send “x = a * b” through HTTP request string – it may
                // be parsed wrong, because of spaces and non-alphanumeric characters.
                // If i send it encoded, the content will be saved:
 ;>
<br>
<a href=’<;= ppc.SCRIPT ;>?variable=x = a * b’ >send a variable(unsafe). </a><br>
<a href=’<;= ppc.SCRIPT ;>?variable=<;= ppc.urlencode(“x = a * b”) ;>‘>
send a variable(safe).</a><br>

<; if(ppc.variable != “”){ ;>
        expression: <;= ppc.variable ;>
<; } ;>

  
· ppc.double()

   double ppc.double(val) – val 변수를 double 형으로 변환합니다.
val 변수는 string, double, float, char * 형이 될 수 있습니다.

  · ppc.float()

   float ppc.float(val) – val 변수를 float 형으로 변환합니다.

· ppc.int()

   int ppc.int(val) – val 변수를 int 형으로 변환합니다.
val 변수는 string, double, float, char * 형이 될 수 있습니다.

 
· ppc.string()

   string ppc.string(val) – val 변수를 string 형으로 변환합니다.
val 변수는 int,double, float,char * 형이 될 수 있습니다.

 
· ppc.get(string)

   string ppc.get(string val) – Form이 GET으로 전송 된 경우, 변수의 값을 반환합니다.

 

· ppc.post(string)

   string ppc.post(string val) – Form이 POST로 전송 된 경우, 변수의 값을 반환합니다.

· ppc.read_file(sring)

   string ppc.read_file(string filename) – filename을 열어 그 내용을 반환합니다.

· ppc.save_file(string, string)

   bool ppc.save_file(string filename, string contents) – filename에 contents 내용을 저장합니다.
   에러가 발생할 경우 “false”

 · cookie.set(string)

   void cookie.set(string val) – val 값을 브라우저에게 쿠키로 설정합니다. 

   “name=value; EXPIRES=date; PATH=path; DOMAIN=domain_name; SECURE”
   · name              - 쿠키 변수의 이름.
   · value              - 쿠키 변수의 값.
   · EXPIRES=date  - 쿠키 변수의 생존 시간 설정(기본값은 브라우저가 열려있는 동안)
   · PATH=path      - 쿠키 변수의 가시성(범위설정)
   · DOMAIN          - 도메인 이름기반 쿠키변수의 가시성(범위설정)
   · SECURE           - 암호화 사용 여부

    최소 설정 값은 “name=value”.

 * string – ppC++에서 사용하는 string형은 C++ 표준 라이브러리인 std:string 형임

 

 

예제1) MySQL Server C API를 사용해서 연결하는 방법에 대한 예제 

<!DOCTYPE HTML>
<html>
<body>

<?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>

#include “mysql.h”

/* 변수 선언 */

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

int fields;               

int cnt;
string result;  /*
결과물을 String형태로 저장해야 정상 출력 */

clock_t start, end;
start = clock();
?>

<?
    mysql_init(&mysql);
    if( !mysql_real_connect(&mysql, NULL, “root”, “
비밀번호“, “mysql”, 3306, (char *)NULL, 0) ) {
?>    <b>
에러 발생</b> : <Font color=red><?= mysql_error(&mysql); ?></font><br>
<?
      exit(1);
    }
?>
      
      
<font size=”5″>MySQL</font><font color=”#0000FF” size=+1>
<?= mysql_get_client_info(); ?></font> 서버에<font color=”#0000FF” size=-1>성공적</font>
으로 접속하였습니다.
<hr width=”600″ align=”left”>
현재 운영중인 <font color=”#0000FF”>데이터베이스</font>는 다음과 같습니다.<br>

<?   
res = mysql_list_dbs(&mysql,”%”);
fields = mysql_num_fields(res);
while( (row = mysql_fetch_row(res)) ) {
      for(cnt = 0; cnt < fields; ++cnt)
                  result = row[cnt];
?>
             <font color=gray size=+1><?= result; ?></font><br>
<? }   ?>
<hr width=”600″ align=”left”>
Mysql DB의 <font color=”#0000FF”>테이블</font>은 다음과 같습니다.<br>

<?            
res = mysql_list_tables(&mysql, “%”);
fields = mysql_num_fields(res);
while((row = mysql_fetch_row(res))) {
     for(cnt = 0; cnt < fields; ++cnt) {
        result = row[cnt];
?>
     <font color=gray size=+1><?= result; ?></font><br>
<?   }
} ?>

<hr width=”600″ align=”left”>
<?  end = clock(); ?><br>
<font color=”#333333″>CPU 시간</font> :<?= (end – start)/(double)CLOCKS_PER_SEC; ?>sec

<?
mysql_free_result(res);
mysql_close(&mysql);
?>

</body>
</html>


MySQL등의 함수에서 string 형에서 char * 로 변환하는 방법

   char qry[512];
   string str = “insert into notice (title, writer, detail, regdate) VALUES (‘”+ppc.title+”‘,
             ‘”+ppc.writer+”‘, ‘”+ppc.detail+”‘, now())”;
   strcpy(qry, str.c_str());

상기의 방법으로 변환 또는,
  string result = row[cnt];
  <?= result; ?> 형태로 string으로 전환 후 <?= 로 출력

Posted by openserver