CGI程序中出现500 Internal Server Error?

m_m_m_m_m_m17 2006-07-28 05:35:53
怎么办
...全文
543 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_skywsy 2006-07-28
  • 打赏
  • 举报
回复
一、检查CGI程序的属性,一定要设为755才可以。

二、检查一下是不是用了BINARY方式上传,CGI程序一定要用ASCII方式上传。建议在所用的FTP软件里把.cgi,.pl都设定为使用ASCII方式,并且把连接选项里的上传方式设为AUTO。

三、如果上面两项都没有问题,那就是程序本身有语法问题,常见的语法问题有以下一些:

  1。没有指定perl解释器的位置
     程序的第一行必须是服务器上PERL解释器的位置,一般是#!/usr/bin/perl

  2。在输出前没有先输出一个http头
     CGI程序必须告诉浏览器,这以后的输出将作为一个HTML文档来对待建议将这个语句作为一个函数,在输出前调用之,下面是一个例子。
     sub Head {
    print "Content-type: text/htmlnn";
     }

  3。某语句少写了分号
  
   4。括号、引号等不配套
     常见的是少写一边,或者单双引号混用了(毕竟都是一个键啊)还有就是多写了引号,我在把DW里生成的HTML代码COPY到程序里时就经常犯这个错误比如print "<img src=xxx.gif width="40" height="16">";这样的语句

  5。给变量赋了非法的值
     如$mail="xxx@xxx.com";就是一个非法的赋值应该写成$cgiurl="xxx@sina.com";或者使用单引号。

四、遇到上面3、4、5这样的情况,最主要的工作就是定位有问题的语句我所用的方法是这样的。

  ################
   # 错误处理 #
   ################
   sub error {
   &Header('错误',"错误:$_[0]");
   print "$_[1]";
   &Tailer;
   exit 0;
   }


  ##################
   # HTML 页面头部 #
   ##################
   sub Header {
   my ($title,$header) = @_;

   print "Content-type: text/htmlnn";
   print "<html><head><title>$title</title></head>n";
   print "<meta http-equiv="Content-Type" content="text/html; charset=gb2312">n";
  print "<center><h2>$header</h2></center><dir>n";
   }

  #################
   # HTML 页面尾部 #
   #################
   sub Tailer {
   print "</body></html>";
   }

  将上面这个错误处理函数放在程序的最尾部,而在程序的最前面就调用它
  
   &error('调试','程序头');
  
   平时将这一句注释掉,出现500错时将注释去掉,然后就可以使用Cut&Paste大法来查找错误语句了。具体方法是这样的:

  1)先把&error()这一句到错误处理函数之间的语句Cut掉,上传执行,这样应该肯定能执行。此时应显示“错误:调试”和“程序头”字样。
   2)将语句Paste回来,选取一半左右的语句Cut掉,当然要注意保持函数、循环的完整性,上传,看是否能够执行。
   3)若能执行,有问题的语句一定在被Cut掉的那一半里,若不能执行,起码剩下的这一半语句就有问题。
   4)这样反复Cut&Paste,很快就能找到错误语句的位置

  其实实际运用中并不一定如此死板,一般来说自己改过什么地方以后才出的错心中都是有数的,只要对这些地方重点使用C&P大法,效率会更高。

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧