Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl CGI脚本根据运行时间返回不同的结果_Perl_Apache_Cgi - Fatal编程技术网

Perl CGI脚本根据运行时间返回不同的结果

Perl CGI脚本根据运行时间返回不同的结果,perl,apache,cgi,Perl,Apache,Cgi,我有一个Perl CGI脚本,它显然随机地发出不同的HTML。所有输入都没有变化。例如,我将运行两次wget,得到两个不同的结果。CGI由一个开发数据库支持,该数据库也不会改变 我有一个debug语句,它告诉我从DB返回相同数量的元素到脚本中 坦率地说,我很困惑。逻辑、数据库和输入不会改变,但输出会改变 http服务器是Ubuntu 10.04上的apache2。Perl版本是Perl 5.10 编辑:无论何时从服务器上的命令行运行它,输出都是正确的 edit2:一些错误的运行看起来像是脚本的早

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

我有一个debug语句,它告诉我从DB返回相同数量的元素到脚本中

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

http服务器是Ubuntu 10.04上的apache2。Perl版本是Perl 5.10

编辑:无论何时从服务器上的命令行运行它,输出都是正确的


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

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

我看到了与您描述的效果类似的效果,这是mod_perl的CGI仿真工作方式的结果。详情如下

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


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

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

命令行:如果您的输出不同于Web页面到CLI脚本的执行,那么您可能缺少标题信息,或者HTML标记不完整或不完整。例如,您需要在内容类型语句后面加上两个换行符


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

如果没有要检查的代码,没有人会知道问题出在哪里。我不确定这里的代码的哪一部分很重要,我不能把所有的代码都放在这里。你没有
$[=rand
在您的代码中的任意位置您:)更严重的是,您是否尝试过转储所有环境和服务器变量,以查看其中是否有任何变量正在更改?这个问题很模糊,没有足够的信息。您没有说明输入是什么,它们是如何更改的,或者它们正在执行什么。--需要哪些模块使用了ng?正在进行什么编码?您的数据库使用什么字符集?如果输入直接来自数据库,SQL可能是罪魁祸首,因为除非您使用ORDER BY子句,否则不会返回有序结果。--我们需要更多信息以提供帮助。hmmmmmmmm。我可能有一些与数据相关的奇怪的相互配置我将禁用mod_perl(它只是一个普通的CGI脚本)有一段时间,看看这是否有效。链接讨论中的详细信息对我有效,但我必须使用
local我们的$counter=0;
的声明,例如,当处理程序子例程退出时,该值被删除。之后对Perl脚本的每次连续调用都开始“刷新”。