私は私が底に達することができない興味深い問題があります。次のようにforeachループがループの終わりに達する前に壊れています
私のコードは次のとおりです。
public function __destruct()
{
foreach ($this->_queue as $index => $header) {
$result = socket_write($this->_socket, $header);
if (!$result)
{
$s_err = socket_last_error($this->_socket);
$str_err = socket_strerror($s_err);
}
}
socket_close($this->_socket);
}
これは、Googleアナリティクスのイベントを追跡するために使用されます。イベントは常に3つの異なるヘッダー文字列で構成され、ソケットに書き込む必要があります。
私は2イベントでテストしています。つまり、$this->_queue
には6文字列が含まれています。
私はコードを実行するたびに、インデックス[2]
(3番目の項目)に達し、ループが終了すると、socket_close($this->_socket);
行に決して到達することはありません。
解決策を試したところ、hereとhereは成功しませんでした。バッファサイズを100000に設定し、usleep(5)と適切な復帰文字を含めました。
私のコードが実行される前にforeachを終了する可能性がある他の理由はありますか?
もう1つ、が良いこれを行うには?
ブラウザコンソールの情報はありますか?あなたは書き込みの間に答えを読むのを待っているソケットですか? –
@SergioBernardo 'socket_write'は、何バイトが書き込まれたかを示す整数を返します。エラーがあった場合は' false'を返します。私はxdebugでデバッグしましたが、毎回うまく書かれています。PHPマニュアルや他の場所では、何かが読まれるのを待っていたことを示していません。これは、キュー内の最初の3つの別々のアイテムに対して機能し、その後、ループだけでなく、3番目のアイテムの後の機能からも抜け出します。 – Skytiger
そのような場合、私はforeach(...)を次のように置き換えます:for($ i = 0; $ i _ queue); $ i ++){$ header = $ this - > _ queue [$ i]; ... print( "loop $ i - somewhere \ n")を特定の場所に置いて、どこで停止するかを確認してください。 –