<-
Apache > HTTP Server > �ĵ� > �汾2.2 > ���.../ָ��
���� ��л | �������� | ��ƪ���ߣ��𲽹� | ��ҳ�����£�2006��1��8�� | ��ȡ���°汾

CGI��̬ҳ��

top

���

CGI(�������ؽӿ�)������web���������ⲿ�������ɳ���֮�佻���ķ�����ͨ����ָCGI�������CGI�ű�����������վ��ʵ�ֶ�̬ҳ�����򵥺ͳ��õķ��������Ľ��������Apache web�������Ͻ���CGI�Լ���α�дCGI������н��ܡ�

top

����Apache������CGI

Ҫ��CGI������������������������Apache������CGI��ִ�У��䷽���ж��֡�

ScriptAlias

ScriptAliasָ��ʹApache����ִ��һ���ض�Ŀ¼�е�CGI���򡣵��ͻ���������ض�Ŀ¼�е���Դʱ��Apache�ٶ��������е��ļ�����CGI������ͼ��������

ScriptAliasָ�����磺

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/

���Apache����װ��Ĭ��λ�ã�Ĭ�ϵ������ļ�httpd.conf�оͻ����������á�ScriptAlias��Aliasָ��dz����ƣ����Ƕ�����ӳ�䵽һ���ض�Ŀ¼��URLǰ׺������һ�㶼����ָ��λ��DocumentRoot�����Ŀ¼���䲻֮ͬ����ScriptAlias�ֶ���һ�㺬�壬��URLǰ׺������κ��ļ�������ΪCGI�������ԣ��������ӻ�ָʾApache���κ���/cgi-bin/��ͷ����Դ����ӳ�䵽/usr/local/apache2/cgi-bin/Ŀ¼�У�����֮ΪCGI����

���磬�����URLΪhttp://www.example.com/cgi-bin/test.pl������Apache����ͼִ��/usr/local/apache2/cgi-bin/test.pl�ļ����������������Ȼ������ļ�������ڶ��ҿ�ִ�У������ض��ķ����������������Apache����һ��������Ϣ��

ScriptAliasĿ¼�����CGI

���ڰ�ȫԭ��CGI����ͨ����������ScriptAliasָ����Ŀ¼�У�����������Ա�Ϳ����ϸ����˭����ʹ��CGI���򡣵��ǣ������ȡ��ǡ���İ�ȫ��ʩ����û�����ɲ���������Ŀ¼�е�CGI�������С����磬�����ϣ���û���UserDirָ��������Ŀ¼�д��ҳ�棬���������Լ���CGI���򣬵���Ȩ����cgi-binĿ¼���������Ͳ�������������Ŀ¼��CGI���������

����CGI������Ŀ¼ִ����Ҫ�������裺��һ����������AddHandler��SetHandlerָ���cgi-script���������ڶ�����������Optionsָ��������ExecCGIѡ�

��Options��ʽ������CGI��ִ��

�������������ļ��У�ʹ��Optionsָ����ʽ�������ض�Ŀ¼��CGI��ִ�У�

<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>

����ָ��ʹApache����CGI�ļ���ִ�С����⣬��������߷�������Щ�ļ���CGI�ļ��������AddHandlerָ����߷��������д���cgi��pl��׺���ļ���CGI����

AddHandler cgi-script .cgi .pl

.htaccess�ļ�

.htaccessָ��ʾ����������û��Ȩ���޸�httpd.conf�ļ�������¼���CGI����

�û�Ŀ¼

Ϊ�������û�Ŀ¼��������".cgi"��β���ļ���ΪCGI����ִ�У������ʹ���������ã�

<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>

����������û�Ŀ¼��ָ��һ��cgi-bin��Ŀ¼���������е��ļ���������CGI����������������ã�

<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>

top

��дCGI����

��дCGI�����"����"����֮����������Ҫ�IJ�ͬ��

���ȣ���CGI������������ǰ�������һ��HTTP��MIME������ͷ���Կͻ���ָ�����������ݵ����ͣ����������£���������

Content-type: text/html

��Σ����Ҫ����HTML��ʽ�ģ������������������ʾ������ij����ʽ����������£������HTML��ʽ�ģ���żȻҲ�����һ��gifͼƬ����������HTML�����ݡ�

���������㣬��дCGI����ͱ�д�������������ͬ��

��һ��CGI����

���CGI�����������������д�ӡһ�����֡������д�Ϊfirst.pl�ļ������������cgi-binĿ¼�С�

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

��ʹ����ϤPerl���ԣ���ҲӦ���ܿ���������ʲô����һ�У�����Apache����ļ�������/usr/bin/perl(�����κ�������ʹ�õ�shell)���Ͳ�ִ�С��ڶ��У���ӡ����Ҫ�����������˵�����������������У���ͷ�����������У���ʾHTTPͷ�Ľ����������У���ӡ����"Hello, World."�����򵽴˽�����

����ϲ����������������ַ��

http://www.example.com/cgi-bin/first.pl

���������ų��������λ�ã��Ϳ���������������п���һ�У�Hello, World. ����Ȼ������ô�������ģ�����һ������������������У���ô�Ϳ������������κγ���

top

�����Dz�������

ʹ����������������CGI���򣬿��ܻᷢ�����������

CGI��������
̫���ˣ���˵��һ������������������������������������ȷ������CGI������ʹ������ȷ�� Content-Type ��
CGI�����Դ�������һ��"POST Method Not Allowed"��Ϣ
��˵��Apacheû�б���ȷ������ִ��CGI���������Ķ�����Apache������©��ʲô��
һ����"Forbidden"��ͷ����Ϣ
��˵����Ȩ�����⡣�ο�Apache������־��������ļ�Ȩ����
һ��"Internal Server Error"��Ϣ
����Apache������־�������ҵ�CGI��������ij�����Ϣ"Premature end of script headers"���Դˣ���Ҫ������и�����ҳ����ܲ�����ȷHTTPͷ��ԭ��

�ļ���Ȩ��

��ס������������������û�������еģ��ڷ�����������ӵ�е���һ������Ȩ�û���Ȩ��(ͨ����nobody��www)����Ҫ�����Ȩ���������ļ���ִ�С�ͨ��������nobody�㹻��Ȩ����ִ���ļ��ķ����ǣ����ļ������κ��˽Կ�ִ�е�Ȩ�ޣ�

chmod a+x first.pl

���⣬�����Ҫ�������ļ����ж�ȡ��д�룬Ҳ�������Щ�ļ�������ȷ��Ȩ�ޡ�

·����Ϣ�ͻ�������

������������ִ��һ������ijЩ��Ϣ���Զ�����shell����������ģ�����PATH ������shell�������õ��ļ��������Ķ��ҵ���

���ǣ���CGI����ͨ��web������ִ��ʱ����û�д�PATH �����ԣ�����CGI���������õ��κγ���(��sendmail)������ָ����������·����ʹshell���ҵ�������ִ�����CGI����

һ����ͨ���÷��ǣ���CGI����ĵ�һ����ָ��������(ͨ����perl)�����磺

#!/usr/bin/perl

���뱣֤����ȷָ���������

���⣬���CGI����������ijЩ������������Ҫȷ������Ҫ�ı����Ѿ���ȷ����Apache�����˴��ݡ�

�������

����CGI����ʧ�ܵ�ԭ�����ڳ����������⣬���������Ѿ������������ִ����CGI���������¡����������������ǰ��������������ִ����ij����ܹ����ִ���������⡣���磺

cd /usr/local/apache2/cgi-bin
./first.pl

(��Ҫ����perl���ͳ�����Ϊshell��Apache����ݽű���һ�е�·����Ϣ�ҵ�������)

�����ȿ������������Ӧ����һ��HTTPͷ������Content-Type�ͽ�β�Ŀ��С�����㿴���˱��ʲô��������ô�����ڷ�������������ʱ��Apache�᷵�� Premature end of script headers ���󡣲μ��������дCGI�����Ի�ø�����Ϣ��

������־

������־��������ѡ��κδ��󶼻��ڴ�����־���������أ�������Ӧ�����Ȳ鿴������������վ�ռ��ṩ�߲�������ʴ�����־����ô��Ӧ�ÿ��ǻ�һ���ռ��ṩ�ߡ�ѧ���Ķ�������־�����Կ����ҳ����Ⲣ���ٽ����

Suexec

suexec����CGI������������������������û�����Ŀ¼�IJ�ͬ���Բ�ͬ���û�Ȩ�����С�suexec�м����ϸ��Ȩ��У�飬�κ�У��ʧ�ܶ���ʹCGI�������� Premature end of script headers ����

Ϊ�˼�����Ƿ�ʹ����suexec ������ apachectl -V �����SUEXEC_BIN��λ�á����Apache������ʱ����suexec�������ļ��������ڴˣ���ôsuexec���ᱻ���

������ܾ�ͨsuexec�������벻Ҫʹ������Ҫ��������ֻҪɾ��(��������)SUEXEC_BIN��ָ��λ�õ�suexec�������ļ��������������Ϳ����ˡ�������������������������Ķ�suexec�ĵ�����ϸ�˽������л��ƣ�Ȼ������ suexec -V �����ҵ�suexec��־�ļ�����ʹ�ø���־�ļ��ҵ���Υ���������жϹ���

top

Ļ��������������?

�����CGI��������룬���Ļ��IJ���(������������ͷ�����֮�������ͨѶ��)�ͱ�ú������ˡ���Ϊ��Ȼ�ɹ���д��һ�������ӡ"Hello, World"������û��ʵ�ʵ��ô���

��������

����������ʹ�ü����ʱ���������õ��ı���������·��(��ʵ���ļ���һ������·���Բ�ȫ�������)������û����Լ�����ն����͵ȵȡ������������� env �����Եõ������׼�Ļ��������б�

��CGI��������У���������������������û����������������������(Netscape��IE��Lynx)������������(Apache��IIS��WebSite)�Լ���Ҫִ�е�CGI�������Ƶȵȡ�

������Щ������CGI����Ա����Ч����ֻ�ǿͻ���-������ͨѶ��һ�����ݡ������ı����б�μ�http://hoohoo.ncsa.uiuc.edu/cgi/env.html

����򵥵�CGI�����г������еĻ���������Apache���а��cgi-binĿ¼�л���һ�����Ƶij���ע�⣬��Щ�����DZ���ģ���Щ���ǿ�ѡ�ģ���������ܻῴ��һЩ�ٷ��б���û�еı��������⣬Apache�ж��ַ���������Ĭ���ṩ�ı���֮���������ר�û���������

#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}

STDIN �� STDOUT

�������Ϳͻ���֮�������ͨѶ��ͨ����׼�����豸(STDIN)�ͱ�׼����豸(STDOUT)��ɡ�ͨ����STDIN��ָ���̻���һ�����������õ�һ���ļ���STDOUTָ����̨����ʾ����

����POSTһ��������һ��CGI����ʱ������е����ݱ�����Ϊһ��������ʽͨ��STDIN���͸�CGI�����������������Ϳ��Դ�����Щ���ݣ��·���Щ���������Լ��̻���һ���ļ���

����"������ʽ"�ܼ򵥣�һ���ֶ����Ƽ���ֵ���м��õȺ�(=)���ӣ�����������ֶζ��������(&)���ӡ��dz����ַ�����ո�"&"�ź�"="�ţ���ת��Ϊ���ֵ��ʮ��������������⡣�����ַ������磺

name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey

��ʱ����ᷢ��URL����Ҳ������������ַ�����������ʽ��ʹ������������ַ������������û�������QUERY_STRING ����ΪGET�������HTML�����FORM��ǩ������METHOD���ԣ���ָ���������ݵĶ���ʹ��GET��POST ��

��ij�����������ַ����ֽ��Ի��������Ϣ�����ң��п��ģ����԰����㴦����Щ���ݣ�����Ϊ���CGI����������Ŀ�ĵĴ�������

top

CGIģ��/��

��дCGI����ʱ����Ӧ�ÿ���ʹ�ô�����ģ������ɴ��������Ĺ������Լ��ٴ��󲢸���ؿ�����

�����Perl���Ա�дCGI���򣬿��õ�ģ���CPAN ����õ�ģ����CGI.pm ��Ҳ���Կ�����CGI::Lite ����ʵ����һ���ڶ������������б������С���ܼ���

�����C���Ա�дCGI�������кܶ�ѡ������֮һ��CGIC�⣬����http://www.boutell.com/cgic/

top

������Ϣ

�����д�����CGI��Դ��������Usenet��comp.infosystems.www.authoring.cgi�ͱ�������CGI������⡣HTML Writers Guild ���ʼ��б���һ���������������Դ��������Դ��http://www.hwg.org/lists/hwg-servers/

���⣬�������Ķ�CGI�淶��������CGI�������������ϸ�ڣ�ԭʼ�汾��NCSA ������һ�����²ݰ���Common Gateway Interface RFC project

������һ���ʼ��б�����������ύCGI�������ʱ����Ӧ��ȷ���ṩ���㹻����Ϣ�Ը����׵ط��ֲ�������⣬���磺������ʲô�¡���ϣ���õ�ʲô����������������������ʲô���롢�����еķ�������CGI��������ʲô���Ա�д�ġ�������ܾ��ṩ�Ǹ�����Ĵ��롣

ע�⣬��Ҫ��CGI��������ύ��Apache bug���ݿ⣬��������ŷ��ֵ���ApacheԴ�����е����⡣