2016-10-17 19 views
1
try { 
    $fp = fsockopen($site, $port, $errno, $errstr, 2); 
} 
catch(Exception $ex) { 
    echo 'error'; 
} 

私は私が@を使用することができることを知っている警告がfsockopenPHPでfsockopenエラーを処理する方法は?

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No such host is known.

Warning: fsockopen(): unable to connect to www.myrandsitedf.net:80 (php_network_getaddresses: getaddrinfo failed: No such host is known.)

のために与えられていることを確認していながら、なぜcatchは、動作していませんエラー/警告メッセージを抑制しますが、これがエラーを処理する正しい方法ではないと思います。

また、私のホストのCronjobは、PHPファイルにエラーがあるのを許可していません。@で解決できません。

+0

PHPは手続き理由関数**決して例外をスローしない**彼らは失敗時に真偽値を返します。機能が突然例外を投げ始めると、fail-by-booleanメソドロジで書かれたすべての「古い」スクリプトが破られます。正確に[文書化された](http://php.net/fsockopen): '呼び出しが失敗した場合、FALSEを返します。 ' –

答えて

0

exceptionserrorsの違いを作らなければなりません。 にエラー(警告、などが...)彼らはキャッチでキャッチすることができるような例外に変換したい場合は、例外にエラーを変換error_handlerを登録する必要があります。

function error_handler($errno, $errstr, $errfile, $errline) 
{ 
    if(($errno & error_reporting()) > 0) 
     throw new ErrorException($errstr, 500, $errno, $errfile, $errline); 
    else 
     return false; 
} 
set_error_handler('error_handler'); 
+0

上記の例ではどうすれば使用できますか? '警告'があり、スクリプトを止めずに止めないと、 '@'は私のためのトリックをやりません。 – Drago

+0

警告を無視したい場合、これは別の話です。 http://php.net/manual/en/function.error-reporting.phpで説明されているように 'error_reporting(0)'関数を使用してください。とにかく、現在の警告はホストが見つからないことを示しているため、とにかく続行できません – Simon

関連する問題