代码之家  ›  专栏  ›  技术社区  ›  Paul Nathan

PerlCGI脚本根据运行返回不同的结果

  •  3
  • Paul Nathan  · 技术社区  · 14 年前

    我有一个PerlCGI脚本,它显然随机地发出不同的HTML。所有输入都没有变化。例如,我会跑 wget 两次,得到两个不同的结果。CGI由一个开发数据库支持,这个数据库也是不变的。

    我有一个调试语句,它通知我从数据库返回到脚本中的元素数相同。

    坦白说,我很迷惑。逻辑、数据库和输入不会改变,但输出会改变。

    HTTP服务器是Ubuntu10.04上的Apache2。Perl版本是Perl5.10。

    编辑:每当我从服务器上的命令行运行它时,输出都是正确的。

    edit2:一些错误的运行看起来像脚本的早期版本。我不 认为 Apache是缓存CGI,但它似乎正在获取过时的缓存版本……

    2 回复  |  直到 13 年前
        1
  •  3
  •   Grant McLean    14 年前

    您的CGI脚本是使用Apache的标准CGI API运行的还是使用Apache::Registry(或Apache2中的modPerl::Registry)CGI仿真层在mod_perl下运行的?

    我看到了一个类似于您描述的效果,这是由mod euperl的CGI仿真工作方式产生的。细节是 discussed here .

    一个解决方法是使用脚本开头用“my”声明的任何“global”变量,并将关键字“my”更改为“our”。

    当然,你的问题可能是完全不同的——没有更多的信息很难说。

        2
  •  0
  •   Sierpinski    14 年前

    缓存:Apache可能没有缓存,但您的浏览器可能是。关闭缓存(将浏览器缓存设置为0MB)。

    命令行:如果您的输出在脚本的网页和cli执行上有所不同,那么您可能缺少头信息,或者HTML标记不完整或损坏。例如,您需要在内容类型语句后面加两个换行符。

    如果它在CLI上工作,但现在通过Web服务器上的CGI工作,那么它必须是您的代码、Apache中缺少的模块或类似的东西。