PHP Conference Japan 2024

stream_set_blocking

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

stream_set_blocking設定串流的阻塞/非阻塞模式

說明

stream_set_blocking(資源 $stream, 布林值 $enable): 布林值

設定 stream 的阻塞或非阻塞模式。

此函數適用於任何支援非阻塞模式的串流(目前為一般檔案和通訊端串流)。

參數

stream

串流。

enable

如果 enablefalse,指定的串流將切換為非阻塞模式,如果為 true,則將切換為阻塞模式。這會影響從串流讀取資料的呼叫,例如 fgets()fread()。在非阻塞模式下,fgets() 呼叫將立即返回,而在阻塞模式下,它會等待串流上的資料可用。

回傳值

成功時返回 true,失敗時返回 false

注意事項

注意:

在 Windows 上,這對本地檔案沒有影響。Windows 不支援本地檔案的非阻塞 IO。

參見

  • stream_select() - 對指定的串流陣列執行等效於 select() 系統呼叫的操作,並以秒和微秒指定逾時。
新增註釋

使用者提供的註釋 2 則註釋

匿名
11 年前
在 Windows 上,此函數不適用於使用 proc_open 開啟的管道(https://bugs.php.net/bug.php?id=47918, https://bugs.php.net/bug.php?id=34972, https://bugs.php.net/bug.php?id=51800
MagicalTux at ookoo dot org
18 年前
當您在非阻塞串流上使用 fwrite() 時,資料不會像 t dot starling 所說的那樣被靜默丟棄。

請記住,fwrite() 會返回一個整數,這個整數代表實際寫入到串流的資料量。因此,如果您看到 fwrite() 返回的值小於寫入的資料量,則表示您將來必須再次呼叫 fwrite() 以寫入剩餘的資料量。

您可以使用 stream_select() 等待串流可供寫入,然後繼續將資料寫入到串流。

非阻塞串流很有用,因為您可以擁有多個非阻塞串流,並等待它們可供寫入。
To Top