存档

文章标签 ‘cgi’

在apache里有两种配置执行CGI程序的方法:

2009年10月30日 没有评论

方法一:(把特定的目录指定为CGI执行目录)
在这种方法里,指定目录下的所有文件都会被认为是CGI脚本而执行,而且一般来说该
目录为不可写属性,这就意味着这个目录下不能放置除CGI脚本以外的.html网页或.txt?
据文件,这种方法由于管理方便,为大多数管理员使用,设置的方法如下:

在conf/http.conf文件中加入如下语句:

ScriptAlias /cgi-bin/ “/home/www/cgi-bin/”
ScriptAlias /cgi/ “/home/www/cgi/”
。。。。。。。
。。。。。。。
同时设置该目录的属性(禁止写及列表)
<Directory “/home/www/cgi-bin”>
AllowOverride None
Options None
</Directory>

以上设置方法为大多数作虚拟主机的服务器设置所使用。

方法二: (把特定的文件后缀作CGI脚本执行)
这种方法是把特定的后缀作CGI文件处理,例如:.cgi .pl .sh等,当这些文件被请求
的时候,服务器会作执行处理而不把内容直接返回浏览器。
这种方法对于只有小数用户的服务器来说,使用很方便,不过安全行相应降低。如果
你的服务器只有你自己使用,且安全性很高,则建议你采用这种设置方法:

在conf/httpd.conf(1.3.9以后的版本) 或conf/srm.conf(1.3.9以前的版本)文件中作如
下修改:

#AddHandler cgi-script .cgi .pl (把该行语句前头的’#'去掉,增加.pl的后缀)

在conf/httpd.conf(1.3.9以后的版本) 或conf/access.conf(1.3.9以前的版本)添加需
要执行CGI的目录属性:

<Directory “/home/*/public_html/cgi-bin”>
Options ExecCGI
AllowOverride None

</Directory>

上述方法令所有用户的cgi-bin目录下的.cgi.pl文件均可被执行。

采用这种方法设置CGI使用会方便些,特别有一些CGI程序采用.cgi文件作密码文件,采用
这种设置,密码文件不会被列出,但是系统的安全性较第一种差。

分类: 编程开发 标签:

配置APACHE支持CGI(WIN环境)

2009年10月30日 没有评论

安装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.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zalvsa/archive/2006/07/03/869473.aspx

分类: 编程开发 标签:

You don’t have permission to access /php/php-cgi.exe/index.php on this serve解决

2009年10月30日 没有评论

php+apache 运行php网页事出现以下异常:

Forbidden
You don’t have permission to access /php/php-cgi.exe/index.php on this serve

请修改apache的httpd.conf文件,把原来:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all</Directory>
改为如下:
<Directory />
Options FollowSymLinks
AllowOverride None
### Order deny,allow
### Deny from all
### Satisfy all</Directory>

把PHP下面的php.ini下的:
short_open_tag=off;修改成on

重启apache,问题解决了

分类: 编程开发 标签: