2009-04-19 31 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/*";