3

これを適切にタグ付けするのに十分な評判がありません (ruby、PHP、socket、rescue)

私は、Ruby スクリプトをより多く作成しているため、長い間 PHP を練習していませんでした。これで助けを求めるのはちょっと恥ずかしいです。

Ruby では、レスキューを使用して、エラーが発生した場合にスクリプトがクラッシュするのを防ぐことができることを知っています。また、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 のソケット接続を完全には理解していないことを受け入れます。

4

2 に答える 2

5

PHP に相当するものは次のとおりです。

try { ... } catch (...) { ... }

PHP 5.5 を使用している場合は、次のものもあります。

try { ... } catch (...) { ... } finally { ... }

複数の catch 句を使用して、それぞれが異なる例外クラスをキャッチできます。

例外が発生した場合を含め、finally 部分は常に実行されます。

于 2013-11-19T22:59:11.347 に答える