4

我的托管脚本已被移动,不再工作。

指定的 CGI 应用程序因未返回完整的 HTTP 标头集而行为异常。

我注意到我的托管公司的某个人修改了我的脚本,以便我曾经拥有的地方

use lib 'd:/myorig/LIB';

我现在有

use lib '//newhost/LIB';

这应该工作吗?

我尝试了 1800 INFORMATION 的建议并运行了最小的脚本

#!perl -w
use lib '//whatever/lib';
print "success";

...给出了相同的结果。

更新:ysth 对 FatalsToBrowser 的建议确实揭示了更多信息。看起来路径(由托管公司的人添加)可能是错误的。

更新2:托管公司现在表示,这些脚本与之前的托管人想法相同,但会引发大量语法错误。“由于我们无法为您调试脚本,我们建议您联系原始程序员并向他们寻求帮助”。 <grinds teeth>

部分解决方案:托管公司终于意识到他们没有正确设置权限。他们仍然不对,并且(aargh)他们不允许站点所有者设置文件夹权限,甚至在他们自己站点中的文件夹上也不行。

4

5 回答 5

3

我不知道它是否应该工作,但我的直觉是它会好的。但是,use lib您发布的两行并不等同。

# go to the 'd' drive and use the 'myorigLIB' directory on that drive
use lib 'd:/myorigLIB';

# go to the 'newhostLIB' server - no path is specified - this looks invalid to me
use lib '//newhostLIB';

也许您需要指定服务器上共享的路径?另外,您可能需要查看权限?也许 CGI 运行的用户无法访问该网络路径?

此外,您可以编写一个简单的(非 CGI)程序来测试您的理论并运行它:

#!perl -w
use lib '//whatever/lib';
print "success";

然后,如果可以的话,只需在服务器上运行它,看看会发生什么。

于 2009-04-19T08:01:22.363 回答
2

不,路径不完整,它需要服务器名称和完整路径。这也是一种不好的做法,因为它需要监控两台机器而不是一台机器才能让您的应用程序运行。

于 2009-04-19T08:11:40.760 回答
1
The specified CGI application misbehaved by not returning a complete set of HTTP headers.

那是没有错误的。如果你幸运的话,你的托管公司会为你提供一个错误日志,它会显示 perl 正在死去的实际错误。如果没有,请考虑使用

use CGI::Carp "fatalsToBrowser";

供测试用。(如果您是偏执狂(这不是一件坏事),一旦完成测试,您将避免启用它,因为错误通常会提供有关您的代码甚至您的数据库的信息,这可能有助于黑帽利用安全性孔。)

于 2009-04-19T10:05:47.320 回答
1

我知道我在尝试使用来自 apache 的映射驱动器和 unc 路径时遇到了麻烦,因为不允许 apache 用户使用网络驱动器。这很难弄清楚——但有可能做到。这可能是一个相关的问题。

于 2009-04-19T14:02:30.200 回答
1
#!perl -w

print "HTTP/1.0 200 OK\nContent-Type: text/plain\n\n";

my $path = "//whatever/lib";
print "\nExists ", -e $path;
print "\nDirectory ", -d $path;
print "\nReadable ", -r $path;
print "\nListing:\n";
print "\t$_\n" for glob "$path/*";
于 2009-04-20T13:45:00.453 回答