2012-11-02 78 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等)由于打开这些端口存在安全风险,因此只有在测试脚本时才打开端口,然后再关闭该端口。

如果您的脚本正确处理,那么您需要找到共享托管公司不会阻止的端口。

*还有一个提示:这也可能是一个共享的托管公司有代理。这可能会增加更多'阻塞/连接'问题。

我希望这可以减轻他人花费我花费无数的时间来解决这个问题。