【问题标题】:Slow PHP Routine慢 PHP 例程
【发布时间】:2020-02-27 09:47:45
【问题描述】:
<pre>

<?php

$newline = "\n";

$hit = 0;
$id = "id";
while ($hit < 10) { 
    $a = rand(0, 255);
    $b = rand(0, 255);
    $c = rand(0, 255);
    $d = rand(0, 255);

    $name = gethostbyaddr("$a.$b.$c.$d");

    if (!strpos($name, $id) === false) {
        print "  " . "<a href=$name>$name</a>" . $newline;
        $hit = $hit + 1;
    }
}

print $newline;
print "Copyright Search Engine" . $newline;
?>

这是一个小型搜索引擎,适用于私人企业家, 或者它会,如果它有效的话。
代码执行,它只是令人难以置信的慢。 有谁知道为什么。

如果 Code 是 Value,Title 是 NeoSearch,那么 销售条件,是这些。

信息
订购

10% 普罗米尔
一百万美元

雷克斯:。

【问题讨论】:

    标签: php gethostbyaddr


    【解决方案1】:

    许多网站的反向 DNS 设置不正确,因此如果您点击其中任何一个地址,调用 gethostbyaddr() 会很慢。

    此外,您可能应该将$a 限制为rand(0, 223)。超出此范围的任何内容都是多播地址,对搜索引擎没有用处。

    即使解决了这个问题,您的代码也一定会很慢。您正在寻找可解析为名称中包含 id 的地址。绝大多数名称不符合该模式,因此您必须测试数千个名称才能获得 10 个您想要的名称。

    这不是真正的搜索引擎的工作方式,它们不会查找随机 IP。他们从一组众所周知的网页开始,然后按照所有网页中的链接查找其他网站。

    【讨论】:

      【解决方案2】:

      我不确定您在这里尝试完成什么,但是查看您的代码并在本地对其进行测试我可以告诉您,您必须搜索大量主机才能找到包含 'id ' 因为大多数 IPv4 地址的主机名就是 IP 地址本身。

      您面临的另一个问题是您正在执行单线程,这意味着您将请求 1 个 IP 地址主机名,然后等待返回响应。

      如果您想查看您的代码在做什么,请尝试运行以下修改后的代码。

      <?php
      
      $newline = "\n";
      
      $hit = 0;
      $id = "id";
      $hosts = 0;
      while ($hit < 10) {
          $a = rand(0, 255);
          $b = rand(0, 255);
          $c = rand(0, 255);
          $d = rand(0, 255);
      
          $ip = "$a.$b.$c.$d";
      
          $name = gethostbyaddr("$a.$b.$c.$d");
          print($name . $newline);
      
          if (!strpos($name, $id) === false) {
              print "  " . "<a href=\"$name\">$name</a>" . $newline;
              $hit++;
          }
      
          $hosts++;
          print($hosts . $newline);
      }
      
      print $newline;
      print "Copyright Search Engine" . $newline;
      ?>
      

      我在 500 多台主机上停下来,但每台主机都需要大约一秒钟的时间。这意味着要抓取所有 14+ 十亿个 IPv4 地址将需要很长时间,更不用说使用随机数可能会重复。

      如果您让我们知道,我们很乐意帮助您更多地完成您正在尝试做的事情

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 2013-08-14
        • 2012-01-23
        • 2012-12-27
        相关资源
        最近更新 更多