Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何提高页面加载时执行的端口扫描程序的性能_Php - Fatal编程技术网

Php 如何提高页面加载时执行的端口扫描程序的性能

Php 如何提高页面加载时执行的端口扫描程序的性能,php,Php,我有一个检测访客端口的小功能。问题是它太慢了。它将页面加载时间增加约3秒;这当然是不能接受的 有谁能改进这一点以获得更好的页面加载时间吗 function ipProxyPortCheck($ip){ $timeout = 1; $ports = array(80,3128,8080); $flag = 0; foreach($ports as $port){ @$fp = fsockopen($ip,$port,$errno,$errstr,$t

我有一个检测访客端口的小功能。问题是它太慢了。它将页面加载时间增加约3秒;这当然是不能接受的

有谁能改进这一点以获得更好的页面加载时间吗

function ipProxyPortCheck($ip){
    $timeout = 1;
    $ports = array(80,3128,8080);
    $flag = 0;
    foreach($ports as $port){
        @$fp = fsockopen($ip,$port,$errno,$errstr,$timeout);
        if(!empty($fp)){
            $flag = 1;
            fclose($fp);
        }
    }
    return $flag;
}

在一般情况下,除非减少超时值,否则无法改进此代码。如果您的访问者在您尝试连接到他们时根本没有响应,那么在您确定他们无法连接之前,需要经过完整的超时时间间隔


除此之外,您可以做的一个改进是添加
break当您成功连接时,这样您就不会尝试连接到其他端口(无需)。但这仅在访问者首先可连接时起作用。

您可以减少超时时间。接受浮点值作为超时值,超时值以秒为单位

我有一个检测访客端口的小功能。问题是速度太慢了。它会将页面加载时间增加约3秒,这自然是不可接受的。有谁能改进这一点以获得更好的页面加载时间吗

function ipProxyPortCheck($ip){
    $timeout = 1;
    $ports = array(80,3128,8080);
    $flag = 0;
    foreach($ports as $port){
        @$fp = fsockopen($ip,$port,$errno,$errstr,$timeout);
        if(!empty($fp)){
            $flag = 1;
            fclose($fp);
        }
    }
    return $flag;
}
首先:每个IP执行一次,并存储连续请求的结果。然后,您可以将超时时间减少到半秒(使用
$timeout=0.5
)。然后,确保在其中一个端口打开后立即从函数返回,这将减少等待时间,因为它会检查尽可能少的端口数量。最后,我建议记录哪个端口打开了一段时间,以确定哪些端口最有可能打开。您可以相应地对
$port
进行排序。因此,如果端口
80
8080
3128
具有更高的“打开”概率,请确保它位于第一位

function ipProxyPortCheck($ip){
    $timeout = 0.5;
    $ports = array(80,8080,3128);
    foreach($ports as $port){
        if((@$fp = fsockopen($ip,$port,$errno,$errstr,$timeout)) !== false) {
           fclose($fp);
           return 1;
        }
    }
    return 0;
}

你能举个例子吗?@AlexWhinfield你知道如何接近文档并理解它吗?你能举个例子吗?@AlexWhinfield:什么的例子?@AlexWhinfield:在
fclose
之后。但这真的应该是显而易见的。似乎没有什么不同。@AlexWhinfield:这并不是出乎意料的。请花点时间阅读答案,共有6行。尽管您并不完全是新手,欢迎来到Stack Overflow!请注意始终正确缩进代码示例。(不缩进被视为缺少缩进,而不是与零空格一致的缩进;))。请注意,我已经删除了“谢谢”部分,您不需要将其添加到其他帖子中。此代码的目的是什么?是否可以将其卸载到后台任务?在加载页面后,是否可以使用ajax请求来运行端口扫描程序?它用于检测访问者是否来自错误源(代理/自动)。此代码不太可能在Internet上工作。这是一个局域网应用程序还是什么?为什么不并行三个端口扫描?@bzlm你能举个例子吗?