post방식, get방식 등
본 자료는 8페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
해당 자료는 8페이지 까지만 미리보기를 제공합니다.
8페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

post방식, get방식 등에 대한 보고서 자료입니다.

본문내용

.h 에 정의되어 있는 파일들이다.
/* libformat 라이브러리가 제공하는 랭귀지인지 판별 */
int format_valid_lang(const char *language);
/* 이 함수들을 통해 리턴되는 스트링은 dynamically allocate된 메모리 */
/* 참조이기 때문에 반드시 메모리 free 해 주어야 한다. */
char *format_fd ( int fd, const char *language );
char *format_fp ( FILE *fp, const char *language );
char *format_file ( const char *filename, const char *language );
char *format_string ( const char *str, const char *language );
libformat C library가 제공하는 함수는 이게 전부다. 정말 심플하기 때문에 쉽사리 확장모듈 만들생각이 들었고, 또한 이 문서까지 작성하게 되었다.
각함수들의 두번째 아규먼트인 language는 현재 "c", "c++", "java", "python", "verilog", "vhdl" 만 처리할 수 있다. php는 지원하지 않는다.
PHP에서 fd나 파일포인터를 사용할수 없기 때문에 우리는 아래 두개의 펑션만 구현한다.
이 두개의 구현으로도 충분한 활용이 가능하다.
format_file는 파일명과 언어이름을 입력하면 Highlight Syntax 된 HTML을 리턴하고, format_string는 소스코드를 직접 입력한다.
자 아까 보았던 confirm_libformat_compiled를 응용하여 만들어 보자.
먼저 ext/libformat/libformat.c 의 상단부에 헤더파일 인클루드를 적자.
#include "format.h"
하단부에 아래 코드를 추가하자. PHP확장모듈작성시에 대부분 매크로를 이용하므로 일반적인 C코드와는 좀 달라보인다.
PHP_FUNCTION(format_string)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
// 스트링 방식의 아규먼트 2개를 받는다.
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
// 두번째 파라메터인 language가 지원가능한 언어인지 검사한다.
if(format_valid_lang(language))
{
// libformat C library의 함수를 직접 사용하여 output에 참조시킨다.
output = format_string(str, language);
if(output)
{
// output 리턴후에 반드시 메모리 free를 해주어야 하지만 PHP는 이작업을 대신해준다.
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
PHP_FUNCTION(format_file)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
if(format_valid_lang(language))
{
output = format_file(str, language);
if(output)
{
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
ext/libformat/php_libformat.h를 열어 format_string와 format_file을 선언하자.
PHP_FUNCTION(format_string); /* format_string */
PHP_FUNCTION(format_file); /* format_string */
자 이제 make 하고 테스트 해보자
print format_string("import time","python");
?>
이런식으로 필요한 확장모듈을 만들어 보고, PHP의 구조에 대해 고찰해보자.
확장모듈 구조가 있는 PHP는 정말 못할것이 없어보인다.
특히 php-gtk 는 PHP확장모듈을 이용한 GUI 인터페이스 작성을 가능하게 해준다.
[마치는 글]
이상으로 짧은 글을 마칩니다.
제가 워낙 글실력이 없고, 설명이 부족하여 이해가 잘 안가실줄 믿습니다 ^^;
PHP, Perl, Python같은 대표적인 스크립트 랭귀지는 확장모듈 구조가 거의 비슷합니다.
C/C++로 된 라이브러리를 이런 스크립트 언어의 확장모듈로 쉽게 변환하여 주는 도구도 있습니다.
http://swig.sourceforge.net/
제가 스크립트 언어를 좋아하고 즐겨 쓸 수 밖에 없는 이유중 하나가 이러한 확장성 때문입니다.
일반적으로 프로젝트 개발 속도가 월등히 뛰어난 스크립트 언어들이 이러한 확장성 때문에 더욱 빛을 발휘하게 됩니다.
레드햇의 인스톨러인 아나콘다가 가장 대표적인 예 입니다. 아나콘다가 Python으로 작성되었다는 것은 짚고 넘어가야할 부분입니다.
현재 Perl과 Python에 비하면 PHP의 확장모듈은 아직 많이 부족합니다.
이것은 Perl/Python에 비해 역사도 짧고 확장모듈의 구조가 아직 덜 갖추어져 있기 때문이고, 아직 PHP가 완벽한 객체지향이 아니기 때문에 더 어렵기도 합니다.
PHP5가 나오면 PHP도 Python처럼 다양한 GUI 확장모듈들도 얼마든지 쉽게 만들수 있을 거라 생각됩니다.
PHP로 윈도우프로그래밍도 하고 3D게임도 만들 수 있는 세상이 올거라 기대하며 이만 글을 마칩니다.
박준철, exman@medialand.co.kr, http://www.exman.pe.kr
  • 가격3,000
  • 페이지수23페이지
  • 등록일2012.03.13
  • 저작시기2008.04
  • 파일형식한글(hwp)
  • 자료번호#778322
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니