2012-11-02 122 views
1

調用時我試圖使人們可以在其中運行的網頁moss並檢查源代碼文件中的相似性。
爲此,我通過php上傳文件,並使用php中的'exec'將這些文件作爲參數調用moss script,並將輸出轉儲到單獨的文本文件中。該代碼有時可以正常工作,但有時它只是在上傳文件後停止。
以下是從腳本片段perl腳本有時無法創建套接字連接從php

$server = 'moss.stanford.edu'; 
$port = '7690'; 
. 
.  
$sock = new IO::Socket::INET (
            PeerAddr => $server, 
            PeerPort => $port, 
            Proto => 'tcp', 
           ); 
die "Could not connect to server $server: $!\n" unless $sock; 
$sock->autoflush(1); 
. 
. 

是無法創建連接,而不會繼續超出這個片段中的第四行 - '死「無法連接到服務器$服務器:$ \ n「除非$ sock;'

這不會一直髮生,但有時它工作得很好,有時它不會。
但是,當我登錄到我的網絡主機(這是btw godaddy),通過SSH並在終端執行腳本與相同的參數,它始終工作!

有人可以幫我解決這個問題,有時服務器上出現錯誤,當腳本通過瀏覽器執行時死掉了?

+0

是的,我錯了,謝謝指出。 :) – Panks

+0

它死了嗎?什麼是'$!'?什麼是'$ @'說?實現的怪癖(與跨平臺超時支持IIRC有關)意味着IO :: Socket :: INET在'$ @'中傳達錯誤而不是'$!'。這是不明顯的記錄(tm),在我看來可惜,但事實如此。 – pilcrow

回答

2

由於它可以在另一臺機器上正常工作,所以問題可能出在您的網絡或Perl安裝的細節上,或者與瀏覽器/ PHP交互有關。最容易檢查的是它的網絡。

看看你是否可以用Perl以外的東西重現網絡問題。也許telnet moss.stanford.edu 7690一堆。這將確定問題是Perl還是您的網絡連接是片狀的。

我也會讓ping moss.standford.edu運行,並嘗試在瀏覽器中重現問題。如果在出現問題的同時ping出現問題,那麼您就去了,這是一個網絡問題。

+0

當腳本完全在godaddy服務器上運行時,網絡問題如何可能成爲問題?我是學生,在我的大學他們已經阻止了這個端口(7690),這就是爲什麼我試圖在godaddy服務器上運行腳本並通過網頁使用它。 – Panks

+0

@Panks我看到,當你說你正在登錄以在本地運行「腳本」時,你的意思是Perl腳本,而不是調用Perl腳本的PHP腳本。我以爲你在本地和遠程服務器上嘗試PHP。在這種情況下,我們需要看看你是如何從PHP調用Perl程序的。 – Schwern

+0

其實它可以正常工作,如果我登錄到godaddy並直接在終端中運行perl,或者如果我在終端執行php文件,終端又使用'exec'命令調用perl腳本。在這兩種情況下,它工作得很好,結果被轉儲到終端。 – Panks

0

經過研究這個錯誤的日子......並確認我的代碼和服務器設置都是完美的,「連接被拒絕」錯誤的原因是由於共享服務器問題與阻塞的端口。

含義...託管公司如Hostgator和GoDaddy阻止MANY端口!由於安全問題,這是可以理解的。您不能簡單地選擇您想要使用的遠程服務器上的端口。

測試您的服務器/客戶端/端口/腳本的方法是使用更常用的端口打開遠程服務器的端口。 (即:8080,80等)由於打開這些端口存在安全風險,因此只有在測試腳本時纔打開端口,然後再關閉該端口。

如果您的腳本正確處理,那麼您需要找到共享託管公司不會阻止的端口。

*還有一個提示:這也可能是一個共享的託管公司有代理。這可能會增加更多'阻塞/連接'問題。

我希望這可以減輕他人花費我花費無數的時間來解決這個問題。