2014-02-16 37 views
1

我用stream_socket_client()創建了一些套接字,並將它們放入一個名爲$sockets的數組中。 當我運行的代碼,錯誤來了:stream_select error:嚴格標準

Strict Standards: Only variables should be passed by reference in D:\www\study\cl\s.php on line 63

代碼:

while (count($sockets)) { 
    $read = $write = $sockets; 
    stream_select($read, $write, $e = null, $timeout); //line 63 
    if (count($read)) { 
     foreach ($read as $r) { 
      $id = array_search($r, $sockets); 
      $data = fgets($r, 1024); 
      echo $data; 
      if (strlen($data) == 0) { 
       if ($status[$id] == "in progress") { 
        $status[$id] = "failed to connect"; 
       } 
       fclose($r); 
       unset($sockets[$id]); 
      } else { 
       $status[$id] .= $data; 
      } 
     } 
     foreach ($write as $w) { 
      $id = array_search($w, $sockets); 
      fwrite($w, "HEAD/HTTP/1.0rnHost: " . $host . "rnrn"); 
      $status[$id] = "waiting for response"; 
     } 
    } else { 
     foreach ($sockets as $id => $s) { 
      $status[$id] = "timed out " . $status[$id]; 
     } 
     break; 
    } 
} 

回答

0

這條線:

stream_select($read, $write, $e = null, $timeout); 

應該是:

$e=null; 
stream_select($read, $write, $e, $timeout); 

雖然第一個代碼將起作用,PHP將拋出E_STRICT消息。我不確定爲什麼PHP開發者決定如此。


但是,你應該檢查的stream_select()返回類型:

$ret = stream_select($read, $write, $e, $timeout); 
if($ret === FALSE) { 
    die('Error: stream_select'); 
} 

一旦你檢查返回類型,你也可以用沉默操作@

$ret = @stream_select($read, $write, $e = NULL, $timeout); 
if($ret === FALSE) { 
    die('Error: stream_select'); 
} 
+0

謝謝! $ e = null,然後做什麼,它的工作! – fantasy0707

+0

不客氣 – hek2mgl