2009-04-19 49 views
4

我托管的脚本已被移动,不再有效。对于UNC路径使用“lib”工作吗?

指定的CGI应用 通过不返回完整 组HTTP标头的行为不端。

我注意到,有人在我的主机公司已修改了我的脚本,以便在那里我曾经有

use lib 'd:/myorig/LIB'; 

我现在有

use lib '//newhost/LIB'; 

如若这项工作?

我试过1800信息的建议,并跑了

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

最小的剧本......这给了相同的结果。

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

Update2:托管公司现在说,这些脚本,从以前的主持人的意见,保持不变,抛出了很多语法错误。 “由于我们无法为您调试脚本,因此我们建议您联系原始程序员并要求他们寻求帮助。” <grinds teeth>

部分分辨率:托管公司终于意识到他们没有正确设置权限。他们仍然是不正确的,(aargh)他们不允许网站所有者设置文件夹权限,甚至不允许在他们自己的网站上的文件夹中。

回答

2

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

+0

+1两机器评论 – 2009-04-20 16:57:45

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"; 

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

1
The specified CGI application misbehaved by not returning a complete set of HTTP headers. 

这是一个非错误。如果幸运的话,您的托管公司会向您提供一个错误日志,以显示perl正在死亡的实际错误。如果不是, 考虑使用

use CGI::Carp "fatalsToBrowser"; 

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

1

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

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/*";