【问题标题】:This code works in php 5.6 (server status), why doesn't it work in php 7.4?此代码适用于 php 5.6(服务器状态),为什么它不适用于 php 7.4?
【发布时间】:2020-04-26 05:55:37
【问题描述】:

下午好,我是 php 新手,所以在这里我需要一些帮助。此代码在 php 5.6 中工作,服务器状态可读并且在线,但是当我使用 php 7.4 时服务器状态变为离线但实际上服务器在线。谁能帮我? php 7.4 需要更改代码吗?谁能帮我改一下?

<?php

       $file = file ("http://xxx/ServerDisplay.ini");
         foreach($file as $line)
         {
                 if(strspn($line, "[") != 1)
               parse_str($line);
         }

       function statuscheck ($ serverip, $ port) { 
               $ Sockres = @ fsockopen ($ serverip, $ port, $ errno, $ errstr, 1); 
               if (! $ sockres) { 
               return "&nbsp;<font color='red'><b>Off-Line</b></font>"; 
               } else { 
                    @fclose($sockres); 
                    return "&nbsp;&nbsp;<font color='green'><b>On-Line</b></font>"; 
                    } 
               } 

          //Вывод на экран статус сервера и онлайн рас 

          $serverip = "xxxxxxx"; 

          echo "<b><font size=2 color=#ffffff>"; 
          echo "<div> "; 
          echo "Login: " . statuscheck($serverip, "10001"); 
          echo "</div> "; 
          echo "<div> "; 
          echo "Zone:" . statuscheck($serverip, "27780"); 
          echo "</div> "; 

           $serverip = "xxxxxxxx";                             
           echo "Total Online : $UserNum";  

?>

*我已经审查了我的服务器 IP

【问题讨论】:

  • 避免在 $ 和关键字 ($ serverip, $ port) 之间保留空格。删除空格,然后重试。
  • 开启error_reporting,从你的代码中删除error suppression并检查你得到的错误
  • @Karthick 实际上没有空间 $serverip 空间是在我在这里复制粘贴期间发生的,我的问题是代码在 php 5.6 中工作(服务器状态在线)我不知道为什么它没有在 php 7.4 中工作(状态变为离线)
  • @kerbholz 我的问题是代码在 php 5.6 中工作(服务器状态在线)我不知道为什么它在 php 7.4 中不起作用(状态变为离线)
  • @wack 我在 PHP 7.4.0/Apache 2.4.1 上尝试了相同的脚本,其 IP 为 localhost - 127.0.0.1 用于端口 80/443,它运行良好并显示在线状态。首先,从源 PC/服务器远程登录到提到的服务器,并确保端口正在侦听并打开到目标。远程登录 $serverip 10001

标签: php


【解决方案1】:

状态显示在线与相同的脚本。

$file = file ("http://karthick.stackoverflow.com/php.ini");
         foreach($file as $line)
         {
                 if(strspn($line, "[") != 1)
               parse_str($line);
         }

       function statuscheck ($serverip, $port) { 
               $sockres = @fsockopen ($serverip, $port, $errno, $errstr, 1); 
               if (!$sockres) { 
                return "&nbsp;<font color='red'><b>Off-Line</b></font>"; 
               } else { 
                    @fclose($sockres); 
                    return "&nbsp;&nbsp;<font color='green'><b>On-Line</b></font>"; 
                    } 
               } 

          $serverip = "127.0.0.1"; 

          echo "<b><font size=2 color=#ffffff>"; 
          echo "<div> "; 
          echo "Login: " . statuscheck($serverip, "80"); 
          echo "</div> "; 
          echo "<div> "; 
          echo "Zone:" . statuscheck($serverip, "443"); 
          echo "</div> "; 

           $serverip = "127.0.0.1";                             
           //echo "Total Online : $UserNum";

输出:

【讨论】:

  • 所以我的脚本没有问题?,但我尝试使用相同的脚本,它在我的使用 php 7.4 的 web 中不起作用,但是当我在我的本地主机/我的 web 上使用它时使用 php 5.6 它的工作正常没有问题。您还有其他解决方案吗?
  • @wack 看不出您的脚本有任何问题,而且运行良好。首先,您需要确保这些目标服务器端口正在侦听您的源 Web 服务器(而不是 localhost)。您的目标服务器可能在线,但在执行此脚本之前,应打开从源 Web 服务器到目标服务器的端口。如果它在本地主机上工作,则这些端口会从您的 PC 到该目标服务器打开。
猜你喜欢
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多