Luis Colorado �۾��� �Ұ�: Luis Colorado���� �����ο� �ִ� Telefonica Sistemas S.A.���� ���н��ý��۰� ���ͳ������� �����ϰ� ���ִ� �����ڷ� ���ϰ� ��ʴϴ�. �۾��̴� Universidad Complutense of Madrid���� �������� �����Ͽ����� ��� ���н� ��ƿ��Ƽ�� ���¼ҽ��� ���·� �����ؿ��� ��ʴϴ�. �� ��:���� �� ���ߵ��� M4 �۵����� ����ڰ� CGI�� ���������ϱ� �ٿ�ε� |
���:
�� �ۿ����� HTML���������� �����ͺ��̽��� ������ �� �ְ� ���ִ�
���ο� ���α��� ���� �̾߱��ϰ��� �մϴ�. �� ���α��� ����� ������
������������ �����ϰ�, ȯ�漳������ �������� ȹ���ϸ�, ���̾ƿ� ���Ŀ�
���������� ������ִ� �͟�ϴ�. �� ���α��� �ֱ� 1�⵿��
Linux Journal��
LinuxFocus (www.linuxfocus.org)
���� ���� �����ϴ�
M4�� ���� ��� ��縦 �дٰ� ������ �������� ��Ƽ� ������ ���Դϴ�.
�� ���� ���� ���� �����в� ���� ���Ͽ� �����ͺ��̽��� �̿��� �� �ְ��ϴ� ��Ű���� �����ϰ� �� ���̵��� �ٺ������� ���� �̾߱��ϰ��� �Ѵ�. �� PG2CGI��Ű���� ���� ��뼳������ ���� ���Ͽ� ���� ���� �ƴ϶� ������ �Ұ��� ����Ʈ��� ����� ���� ���ڵ��� �� �غ� ���� �������� �ǵ���� �����ֱ⸦ ����ϸ鼭 �� ���� ���´�. (�̹� �����Ҹ��� ���̵尡 ���α��� �����ǿ� ��� �ִ�. �� �������� �ִ� URL�� �� �� �ڿ� �ִ�.)
���� ���������ΰ� ��������Ŀ������ HTML�ҽ��� �����ϱ� ���Ͽ� M4�� ����ϴ� �Ϳ� ���� �������� ������� �� ���α��� �����Ͽ���. ����� �۵��� ���������� �����ϴ� ���������� �����μ�, �������� ������ �����ϴ� �����μ��� M4�� ���缺�� ���뼺�� �����־���.
�ݸ� �ſ� �پ��� �� ������ �����ͺ��̽��� �̿��ϴ� ���� ���� ȯ����̸� �������ִ� ��ƿ��Ƽ�� ������ �����Դ�.(��κ��� �̷� �ٸ� ������ �ϴ� �������α����� ������̰ų� �ٷ� �� �ִ� Ư�� ���Ŀ� ����� �ϴ� �ɰ��� �������� ������ �ִ�.)
�̷��� ����Ʈ���� ��Ű������ �����ͺ��̽��� �� ȯ���� �ϳ��� �������ش�. ���� ���ؼ� ������ ���� �䱸������ �����Ͽ��� �Ѵ�.:
���ڰ� �˰��ִ� HTML�� �����ͺ��̽��� ��ȣ�۵��ϰ� �ϴ� ��ƿ��Ƽ�� ��κ��� HTML�� Ȯ���ױ������� �̿��Ͽ� ��°������ ����� ����; �̷��� ���ο� �±��� ���� '��ũ��(macro)'�� �۵��ȴ�. ���� �̷��� ����� �ɰ��� ������ ������ �ִ�: �츮�� ��κ��� �ð��� ������ HTML�±� ���̿��� �� ��ҵ��� �����ϴµ� ���� �ǰ� �̷��� ���� �߿��� ���������� �ȴ�. ���� �̷��� ��ƿ��Ƽ���� ���� �����ϴ� HTML�±���̿��� Ư���� ȿ���� ���� ���Ͽ� ����ǰ� �Ѵ�. �� ���α������� �ʿ��� ��ũ�� ���ǰ���� �����ϱ� ���Ͽ� M4�� ����Ѵ�. �� ���α��� � �������� �� ������ �������� �ʴµ�, �ᱹ ���������� ������� ���ľ� ���Ǵ� �Ͱ� ���������� �ǰ� �ȴ�. ���α��� ����(����;query)�� ����� ��ũ�ε��� ������ ����� �� ���� M4�� �̷��� ��ũ���� ���հ� �־��� HTML���ø��� �̿��Ͽ� HTML������ ����� ���� �ȴ�.
�� �� ��ƿ��Ƽ�� �䱸���ǵ��� ������Ű�� ���Ͽ� ȿ�����鿡�� �ణ�� ������ �������� �����Ѵ�.(��ƿ��Ƽ�� ����Ǵ� ���� M4�� ������ ȣ���ϰ� �ȴ�.) ���� �� ����� ��κ��� ��� ����������.(��κ��� ��츦 �����غ��� HTML������ �������� �����ϱ� ���Ͽ� �����ͺ��̽��� ���Ǵ� �̹� ������ ����Ǿ� �ִ�.)
M4�� �������� ���ߵ� ��ũ�� ó�� �����̴�. �츮�� ���� ����Ʈ����� �� ��ũ��ó���⸦ �ſ� �����ϰ� ����Ѵ�.:
M4�� ���� PostgreSQL�����ͺ��̽��� CGI(Common Gateway Interface)�� �����ϱ� ���Ͽ� ���ߵǾ���. ���� ���� ������� �̰��� CGI�Ӹ� �ƴ϶� �ٸ� �������̽��� ����ϱ�� ����� �Ϲ����̶�� ����� �� �� �־���.(���� ���ڸ� LDAP������ �����ͽ��� ����Ŭ�� ���� �ٸ� �����ͺ��̽��� ����Ʈ����(gateway)�ε� ���ȴ�.) ���� �������̽��� �ʿ��� ����� ��� �����ϱ� ���Ͽ� ǥ��ȭ�Ǿ����� PostgreSQL�� ������ �̷��� ���ο� �������̽��� ���� �ٽ� ���ߵǾ���. ���� �ٸ� �����ͺ��̽� �����ڸ� �������ִ� ���α��� ����� ���� ���ο� ����̹����� ����� ���� �����ϴ�. |
�̷��� ��ũ��ó������ �ݺ������ GNU�� M4��ƿ��Ƽ�� �˻��ϴ� ���� �� �������������� �ᱹ ȿ�����鿡�� �ս��� �����´�.
�� ��ƿ��Ƽ�� �־��� ������Ģ�� ������ ������ Ȯ���ϱ� ���Ͽ� ����ǥ������ ������ ����Ѵ�. ����ǥ������ �츮���� �ſ� ������ ����� �����ϱ� ������ ������ ���� �� ��ȣ�ǰ� �ִ�. ����ǥ������ ������ ���� ������ ������ �ִ�.:
|
�ϳ��� ����ǥ���Ŀ��� ������ ����ü�ε�� ��ȭ�� �� �ֱ���� ǥ������ ������ ����ǥ���Ŀ��� ����̹��� �����ϱ� ���� �������� �Ľ��� ���� �̷������.
�� ���� ���캸��: Ŭ���̾�Ʈ�� ���ǹ��� � ������ �����Ϸ� �Ѵٸ� �� �����͵��� ���� ������ �˸°� �ٲ������ �Ѵ�.:
��=��
���ǹ��� �� ������ �����ؾ� �ϱ� ������ ���忡 �ΰ��� ������ ���� �� ����.
���ñ�Ģ���� ���� ������ �� �� �� ������ �ݵ�� ����ϴ� ���� ���� ���̴�.:
QUERY_STRING: "^FIELD=[^&]*$";
�� ���� ���ǹ��� ������ ������ ������ ��쿡�� ��Ģ���� ȣ��Ǵ� ���� �����Ѵ�. ���� ������ ���� ���� ��ȣ�� ���� ��� ���α��� ��ġ�ϴ� ���� �Ľ��� �� �ְ� ���ش�.:
QUERY_STRING: "^FIELD=([^&]*)$";
�� �������� ���α��� �������Ϳ� ���� ��������� %xx�������� ���Ǵ� ���� ������ ������ ��ȯ�����ش�.
���� ��� �۵��ϴ��� �̾߱� �غ���. ó������ ����Ǹ� ���α��� �������κ��� ȯ�溯������ ���� �Ƽ� �� ������ �̿��Ͽ� ������ ������ ȯ�漳���� ���ش�. ȯ�溯���� ���α��� Ȯ���غ��� ��� �͵��̴�.:Ŭ���̾�Ʈ�� �����ΰ�? � ��û�� �̷�����°�? ��û�� ������ �����ΰ�? Ŭ���̾�Ʈ�� �����ϴ� ������ ����(MIME����)�� �����ΰ�?���.... PG2CGI�� �� ���� ��Ģ�� ���ʿ� ���Ǵ� ��Ģ�� �����Ѵ�. ����� ������������ ��Ģ�� �����ȴ�.:
QUERY_STRING: "^FIELD=([^&]*)$";
! HTTP_ADDRESS: "^194\.142\.12\.";(�� ������ ���� ��û�� 194.142.12.xxx�������� �̷������ٸ� ��Ģ�� ��ȿ�� �ȴ�.)
[ QUERY_STRING: "USER=([^&]*)" ];�� ���� Ŭ���̾�Ʈ�� ���� �شٸ� �����(user)�� ���� ������ �� �ְ����ش�. ���� Ŭ���̾�Ʈ�� ���� ������ �ʴ´ٸ� ��Ģ�� ��ȿȭ���� �ʴ´�.
�̷��� ������� ��Ģ�� ����� �ִ�. �������� �츮�� ��Ģ���� ��ȿ�� �������� ���ϱ� ���Ͽ� ���� ���ǵ��� ���´�. ���ǵ��� �߰�ȣ "{}"���̿� ��ġ�Ѵ�.
��Ģ�� �����ʰ� ������ �߰�ȣ"{}"�� ������ �����ν� ��踦 ��Ÿ����. ���� ���ʰ� �������� '->'��ȣ�� �̿��Ͽ� ���еȴ�.
������ ����� ������ ������ ���� ���ǵ��� ����ִ�.: ������ �̸�,':'����, ���ڿ��� ������ �ǹ��ϴ� ';'����. �����ʿ� �ִ� ��� ������ M4�� ���� ����Ǿ��� �־��� ���� ������ �Ҵ��ϴ� ���̴�.:
�ٸ� ������ ���ø������̳� ������ ����̹��� ���� ���Ǿ��� ���� �ִ�.
�ſ� �����ϴ�. ������ ��Ģ���� ���ʿ� �ִ� ����ǥ�������κ��� ����� ����� ���µ� �� ����� ���� ������ ��ȯ�Ǿ�����.(�� ���ο� �������� �̸��� `term_<i>_match_<j>'�� ���� �����̴�. �̶� <i>�� ��Ģ�� ���� ������ȣ�̴�.(�ᱹ ù ������ 1��, �ι�° ������ 2�� ������ ���°� �ȴ�.) ���� Ŭ���̾�Ʈ�� ���� ������ ���� ���ǹ��� ���Ǿ��ٰ� ����.:
������Ʈ�� ����� ��Ģ�� ������ ����.:
QUERY_STRING: "NAME=([^&]*)"; QUERY_STRING: "FAMNAME1=([^&]*)"; QUERY_STRING: "FAMNAME2=([^&]*)";����� ������ ���� �� ���̴�.::
term_0_match_0 <- "NAME=JOSE"; term_0_match_1 <- "JOSE"; term_1_match_0 <- "FAMNAME1=DE LA FUENTE"; (������ +���ڷ� �ٲ������ �� �� �ִ�.) term_1_match_1 <- "DE LA FUENTE"; term_2_match_0 <- "FAMNAME2=LOPEZ"; term_2_match_1 <- "LOPEZ";����̹�:
�� �ۿ��� ��ü������ ����̹��� ���� �̾߱�� ���� �ʾҴ�. ���� �̹� PG2CGI�����ǿ� ��� �ִ� �����ڷḦ ���� ����̹��� ������� �����ߴ�. ������ �ִ� ���ڶ�� �� ������������ ���ԵǾ� �ִ� ���� �о�� �ٶ���.
POSTGRESQL�� ��Ǵ� �����ͺ��̽��� �����ϴ� ��쿡�� �� �ϳ��� ����̹��� ���ȴ� ���� �̹� �����ڴ� LDAP������ �����ͺ��̽��� ���� �ٸ� ����̹��� ������ ��ȹ�� ������ �ִ�.
����:
��ü���� ���� �ҽ��� ���캸��
slug.ctv.es�� �ִ� �������װ� ���õ� �����ͺ��̽����� �������� ���̺��� ������. �̴� ���̺����� ������ ���ڵ带 ã�ƺ��ų� ��ü ����� ����� ���Ͽ� �ΰ��� ���ø��� ����ϴ� ���� �ܼ��� ���̴�.
/etc/html2sql.cfg
{ PATH_INFO: "^/avisos/?$"; # PATH_INFO������ ���� ���õȴ�. [SERVER_ADMIN: ".*"]; # SERVER_ADMIN���κ��� ������ ��´�. ���û��� } -> { DRIVER: "POSTGRESQL"; PGTTY: "/dev/console"; # �ַܼ� �α��ϵ��� �Ѵ�. PGDATABASE: "postgres"; # �츮�� �� ���Ǹ� �Ѵ�.(�� ���������� ���ø����Ͽ��� �������� ���ڵ���� # �����ϱ� ���Ͽ� ���ǹ��� ����Ѵ�.) PGQUERY: "select oid,ct,titulo,texto,mt" " from avisos" " where (dt is NULL or dt > 'now')" " order by mt desc"; # ������ ���ø��� ������ �ִ�. M4FILE: "/usr/local/etc/httpd/plantillas_m4/avisos.m4"; WEBMASTER: "term_1_match_0"; #TESTMODE: "TRUE"; } # ���� ���ñ�Ģ�� �˷��� �켱Ű���� OID�� ������ ��������(aviso)�� ������ �� # �ֵ��� ���ش�. �� ������CGI�� PATH_INFO������ ���ԵǾ� �ִ�. { PATH_INFO: "^/avisos/([0-9]+)/?$"; SERVER_ADMIN: ".*"; } -> { DRIVER: "POSTGRESQL"; PGTTY: "/dev/console"; # �տ��� ó�� �ַܼ� �α��Ѵ�. PGDATABASE: "postgres"; OID: "term_0_match_1"; # OID�� �ο��Ѵ�. # �ѹ��� ������ �߿��ϴ�. �츮�� �ʵ��� ���ۺκп� OID�� ���Խ�Ű�� # �̰�� �츮�� �� ���ڵ带 ����� ���� �����۸�ũ�� ���� �ϰ� �ʹ�. PGQUERY: "select oid,ct,titulo,texto,mt,dt,autor" " from avisos" " where (dt is NULL or dt > 'now') and oid=OID"; # ���� ���ø��� ���� �ٸ���. M4FILE: "/usr/local/etc/httpd/plantillas_m4/avisos_oid.m4"; WEBMASTER: "term_1_match_0"; #TESTMODE: "TRUE"; } |
define(<<<for>>>, <<<dnl
ifelse(eval((<<<$2>>>) <= (<<<$3>>>)), 1, <<<define(<<<$1>>>,<<<$2>>>)$4<<<>>>dnl for(<<<$1>>>,eval(<<<$2>>>+1),<<<$3>>>, <<<$4>>>)dnl >>>)dnl >>>)dnl divert(0)dnl Mime-Version: 1.0 Content-type: text/html <HTML>
<!-- la tabla est\xe1 vac\xeda -->
>>>,<<<dnl /* PGRES_NTUPLES != 0 )( */
for(<<<i>>>,0,eval(PGRES_NTUPLES-1),<<<dnl
</table>
>>>)dnl /* PGRES_NTUPLES */ >>>,<<<dnl /* ifelse PGRES_RESULTSTATUS )(*/ Error en el resultado: <B>PGRES_RESULTSTATUS</b><BR>
>>>)dnl <CENTER><HR WIDTH=100></center>
|
divert(-1)
$Id: generic_list.m4,v 1.1 1998/07/06 17:13:33 luis Exp $ define(<<<cell>>>, <<<PGRES_CELL_$1_$2>>>) define(<<<field>>>, <<<PGRES_FNAME_$1>>>) define(<<<for>>>, <<<dnl ifelse(eval((<<<$2>>>) <= (<<<$3>>>)), 1, <<<define(<<<$1>>>,<<<$2>>>)$4<<<>>>dnl for(<<<$1>>>,eval(<<<$2>>>+1),<<<$3>>>, <<<$4>>>)dnl >>>)dnl >>>)dnl divert(0)dnl Mime-Version: 1.0 Content-type: text/html <HTML>
ifelse(PGRES_RESULTSTATUS, <<<PGRES_TUPLES_OK>>>,<<<dnl
<!-- la tabla est\xe1 vac\xeda -->
>>>,<<<dnl /* PGRES_NTUPLES != 0 )( */
>>>)dnl /* PGRES_NTUPLES */ >>>,<<<dnl /* ifelse PGRES_RESULTSTATUS )(*/ Error en el resultado: <B>PGRES_RESULTSTATUS</b><BR>
>>>)dnl <CENTER><HR WIDTH=100></center>
|
����� �� URL���� �� �� �ִ�.:
http://slug.ctv.es/cgi-bin/pg2cgi/avisos/
http://slug.ctv.es/cgi-bin/pg2cgi/avisos/20384
�ٿ�ε�
PG2CGI���α��� ���� URL�鿡�� �ٿ�ε� ���� �� �ִ�.:
http://slug.ctv.es/~luis/utils/pg2cgi.tar.gz���� : ����ȣ
�� ������Ʈ�� Miguel �ngel Sep?veda�Կ� ���� �����ǰ� �ֽ��ϴ�. © Luis Colorado 1998 LinuxFocus 1999 |