前提・実現したいこと
PHPのfwrite関数のエラーハンドリングテストを行うためにfwrite関数でエラーが
発生するパターンを知りたい。
発生している問題・エラーメッセージ
PHPでソケット通信の実装を行いました。 指定のIPアドレス、ポート番号にメッセージを送信するというシンプルな実装です。 fwriteを使用しているのですが、ソケットの書き込みでエラーが発生した場合、 警告メッセージを出力するよう実装しています。 PHPのマニュアルに「エラーが発生するとFALSEが返る」とあるのですが FALSEが返ってくるパターンが分かりません。 http://php.net/manual/ja/function.fwrite.php 第一引数をNULLにしたり、ソケットの疎通が取れ、書き込み(fwrite)を実行する 直前に相手側から疎通を遮断するといった方法を取るとFALSEではなくExceptionが 発生してしまいます。 マニュアルに「FALSEが返ってくる」とあるため「FALSEが返ってきた場合」の エラーハンドリングを実装したわけですが、テストに当たってこの現象を 再現できないために困っています・・・。
該当のソースコード
PHP
1//IPアドレス"XXX.XXX.X.XXX"のポート番号YYYYに対してソケット通信 2//(タイムアウトは5秒) 3$socket = fsockopen("XXX.XXX.X.XXX", YYYY, $errstr,5); 4 5//書き込み 6$fwrite = fwrite($socket, "メッセージ"); 7 8if ($fwrite === false || $fwrite < 0) { 9 echo 'ソケット書き込みに失敗しました'; 10} 11 12//ソケットクローズ 13fclose($socket); 14
試したこと
①第一引数にNULLを渡す
→Exceptionが発生する(fwrite() expects parameter 1 to be resource, null given)
②疎通が取れ、書き込み(fwrite)を実行する直前に相手側から疎通を遮断する
→Exceptionが発生する(fwrite(): send of XX bytes failed with errno=11 Resource temporarily unavailable)
補足情報(FW/ツールのバージョンなど)
バージョンはPHP 5.4.29
回答2件
あなたの回答
tips
プレビュー