安装APACHE的方式不变,这里要说的主要是如何 让APACHE支持CGI。
首先要下载ActivePerl-5.8.4.810-MSWin32-x86
安装ActivePerl可以让Apache支持CGI和PL的程序,下载地址:http://www.activestate.com/Produ ... .plex?id=ActivePerl,找到如下的页面进行下载MSI包。
这个程序主要是用来在程序里解析CGI程序的。后续例子会讲到。
下载安装完后,默认安装,会装在C根目录下。
安装完成后,修改httpd.conf
主要有几个地方
1、查找scriptAlias /cgi-bin/ 把路径该成你的WEB路径,例如:"c:/myweb";
2、查找<directory ,在1的后面,这里主要是设置路径的访问权限,该成如下
<Directory /var/www/cgi-bin>
AllowOverride All
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
这里如果设置错误,将会产生以下错误
You don't have permission to access...
3、查找AddHandler cgi-script .cgi,后面加上.pl ,即 AddHandler cgi-script .cgi .pl
4、重新启动APCHE,测试以下例子:
hello.cgi
#! C:/Perl/bin/perl
print "Content-type: text/html/n/n";
print "Hello,World.";
其中第一行为解析程序安装路径
第二行为必须,写每行后面必须加";"
该测试程序如产生以下错误
The server encountered an internal error or misconfiguration and was unable to complete your request,cgi
则一般是因为:
- CGI 程式中沒有印出:欲输出内容的MIME形态
一般而言,就是没传回 Content-type: text/html 再加上一列空白行分隔.
请查 CGI 程式是否有 print "Content-type: text/html/n/n"; - 您的 CGI 程式呼叫 Perl 的 magic code 路径不对.
在程式的第一行要放上 Perl 的呼叫路径.
如 #! /usr/bin/perl 或 #! /usr/local/bin/perl
可以 telnet 进主机后, 下 which perl 指令寻找. - 欲开启或写入的档案, 其绝对路径错误.
例如 $guestbook_file="/home/your_dir/www/gbk.txt"; - 欲开启或写入的档案或目录, 其权限没设置好.
通常要写入的档案 权限要设置为 666, 仅提供读的档案, 权限设置为 755.
或者让 nobody 身份拥有写入或读取权限 - 上传 CGI 程式时, 沒有用 ASCII 模式上传.
- CGI 程式的语法有误, 可能是忘了在某一列 Perl 敘述之後, 加上 ';' 这个结束符号, 或是忘了加上括号() { }. 或者是其它语法错误导致.
- CGI 程式本身的权限属性没设置好, 通常 CGI 程式设为 755, 或者让 nobody 身份拥有写入或读取权限。
- 您可能是在印出 html 语法时, 忘了把双引好中的其它双引号給 meta 掉(或称作 escape 掉).
例如: print "<font color="red">Hello</font>/n"; 便是错误的语法.
应改成 print "<font color=/"red/">Hello</font>/n";
也就是說在双引号中, 若要有双引号, 应写成 /" 來 替代 " .
比较方便的做法是使用 perl 的 qq, 可將上面改写成:
print qq(<font color="red">Hello</font>/n);
或者, 使用 Here document 的写法:
print <<HERE;
<font color="red">Hello</font>
..............................
HERE - 上传至 Unix/Linux/FreeBSD 主机之后, 每列结尾出现 ^M 的符号. 将这些符号删除即可.
- 若您的程式有利用 DBI+DBD 撰写 SQL 资料库程式, 则当某些 SQL 语法错误时, 也会产生 Error 500.
- 程式有使用 die 语法來 catch error, 而沒有做适当的 "错误或例外处理".
- require 某一个 perl file, 但该 perl file 并不存在,或者路径错误.
- 引用的 Perl 模组(module), 并未安装好, 或者, 忘了加 use 语法来引用模组,却用了某一模组的函式功能.
- 在 Win95/98 中试图使用 flock 语法來 "锁定/解开" 档案, 也会发生 Error 500.