Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
相当于Ruby的PHP';救援_Php_Ruby_Sockets_Try Catch_Rescue - Fatal编程技术网

相当于Ruby的PHP';救援

相当于Ruby的PHP';救援,php,ruby,sockets,try-catch,rescue,Php,Ruby,Sockets,Try Catch,Rescue,没有足够的声誉来正确标记它(ruby、PHP、socket、rescue) 我已经很长时间没有练习PHP了,因为我一直在做更多的Ruby脚本。我有点不好意思向你求助 我知道,在Ruby中,我可以使用rescue防止脚本在出错时崩溃,我希望用PHP实现同样的效果 例如,在Ruby中: require 'socket' begin puts "Connecting to host..." host = TCPSocket.new("169.121.77.3", 333) # This will

没有足够的声誉来正确标记它(ruby、PHP、socket、rescue)

我已经很长时间没有练习PHP了,因为我一直在做更多的Ruby脚本。我有点不好意思向你求助

我知道,在Ruby中,我可以使用rescue防止脚本在出错时崩溃,我希望用PHP实现同样的效果

例如,在Ruby中:

require 'socket'

begin puts "Connecting to host..." 
host = TCPSocket.new("169.121.77.3", 333) 
# This will (intentionally) fail to connect, triggering the rescue clause. 
rescue puts "Something went wrong." 
# Script continues to run, allowing, for example, the user to correct the host IP. 
end
我的PHP代码有点凌乱——已经很长时间了

function check_alive($address,$service_port) { 
    /* Create a TCP/IP socket. */ 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    if ($socket === false) { 
      echo socket_strerror(socket_last_error());
    } 
    else { 
      echo null; 
    } 
    $result = socket_connect($socket, $address, $service_port); 
    if ($result === false) { 
       echo socket_strerror(socket_last_error($socket)); 
       return 1; 
    }
    else { 
       echo null; 
    } 
    socket_close($socket); 
    return 0; } 
    $hosts = [...]; 
    // list of hosts to check 
    foreach($hosts as $key=>$host) { 
       check_alive($hosts); 
    }
基本上,我有一个主机阵列,我想检查它们是否还活着。并非所有主机都必须处于活动状态,因此我陷入了困境——数组中的第一个死主机使脚本崩溃

如果您有任何建议,我将不胜感激-我愿意接受,我并不完全理解PHP中的套接字连接。

PHP等价物是:

try { ... } catch (...) { ... }
如果您使用的是PHP 5.5,还有:

try { ... } catch (...) { ... } finally { ... }
您可以有几个catch子句,每个子句捕获不同的异常类


最后一部分始终运行,包括在引发异常时运行。

以下是PHP的等效部分:


-1格式化您的代码和问题!你试过使用吗?他显然不知道如何格式化,这是他第一次尝试。不必让他对这样的事情大惊小怪,而是解释或者为他做。好吧,你知道,祝PHP好运:也许可以改为尝试fsockopen:永远,除非try块中的某个地方发生致命错误。try/catch正是我要找的!谢谢你提醒我。我还将关注fsockopen,谢谢:)
try { // equivalent of Ruby `begin`

} catch(Exception $e) { // equivalent of Ruby `rescue(e)`

}