stream_select

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

stream_selectBelirtilen akım dizisi üzerinde saniye ve mikrosaniye ile belirtilen zaman aşımıyla select() sistem çağrısının eşdeğeri olarak çalışır

Açıklama

stream_select(
    array|false&$oku,
    array|false&$yaz,
    array|false&$dış,
    int|false$saniye,
    ?int$mikrosaniye = null
): int|false

stream_select() işlevi akımları diziler halinde kabul eder ve durumları değişinceye kadar bekler. Akımlar üzerinde işlem yapması dışında socket_select() işlevinin benzeridir.

Bağımsız Değişkenler

oku

oku dizisindeki akımlar için veri okunabilir hale gelene kadar beklenir (daha doğrusu, okumanın engellenmediğini görene kadar - özellikle de akım özkaynağının dosya sonunda olduğu, fread() işlevinin sıfır uzunlukta bir dizge döndürdüğü duruma kadar).

yaz

yaz dizisindeki akımlar için yazmanın engellenmediği görülene kadar beklenir.

dış

dış dizisindeki akımlar için yüksek öncelikli istisnai ("band dışı") veri gelinceye kadar beklenir.

Bilginize:

stream_select() dönerken oku, yaz ve dış dizilerinde akım özkaynaklarının değişen durumlarını belirten değişklikler yapılır. Dizilerin özgün anahtarları korunur.

saniye

Son iki bağımsız değişkenin toplamı stream_select() işlevinin dönmeden önce bekleyebileceği zaman aşımı süresini belirler. Bu bağımsız değişkenlerin ikisine de 0 belirtilirse stream_select() veri için beklemeden akımların durum bilgisiyle hemen dönecektir.

saniye bağımsız değişkeninde null belirtilirse stream_select(), izlediği akımlardan birinde bir olay vuku bulana kadar (veya sistem çağrısı bir sinyal ile durdurulana kadar), gerekirse sonsuza kadar engellenebilir.

Uyarı

Zaman aşımı olarak 0 belirtilmesi akımların anlık durumlarının dönmesini sağlar. Ancak, işlevi sıfır zaman aşımı ile bir döngüye sokmak çok fazla işlemci zamanı harcanacağından iyi bir fikir değildir.

Bir kaç saniyelik bir zaman aşımı belirtmek ve bu arada diğer denetimleri ve işlemleri yapmak daha iyidir. 200000 mikrosaniyelik bir zaman aşımı betiğinizin işlemci kullanımını düşürmenize yardımcı olacaktır.

Zaman aşımı değerinin beklenecek azami süreyi belirttiğini unutmayın. stream_select() işlevi istenen akımlar kullanıma hazır olunca, sürenin bitmesini beklemeden dönecektir.

mikrosaniye

saniye bağımsız değişkeninin açıklamasına bakınız.

Dönen Değerler

stream_select() işlevi başarı durumunda değişikliğe uğrayan akımların sayısını döndürür. Hiçbir olay vuku bulmadan zaman aşımı dolmuşsa işlev 0 döndürebilir. Bir hata durumunda işlev false döndürür ve bir uyarı çıktılanır (sistem çağrısı bir sinyal ile kesilince de bu olur).

Sürüm Bilgisi

Sürüm: Açıklama
8.1.0mikrosaniye artık null olabiliyor.

Örnekler

Örnek 1 - stream_select() örneği

Bu örnekte $oku1 ve $oku2 akımlarına okumak için bir veri gelmiş mi diye bakılmaktadır. Zaman aşımı değeri 0 olduğundan işlev beklemeden dönmektedir.

<?php

$oku = array($oku1, $oku2);
$yaz = NULL;
$dış = NULL;
if (
false === ($değişen_akım_sayısı = stream_select($oku, $yaz, $dış, 0))) {

} elseif ($değişen_akım_sayısı > 0) {

}
?>

Notlar

Bilginize:

Zend motorunun sınırlamalarından dolayı, gönderimli aktarılan bir bağımsız değişkene doğrudan null belirtmek mümkün değildir. Bu nedenle null değerini doğrudan değil, bir değişken veya bir ifade üzerinden belirtin:

<?php
$d
= NULL;
stream_select($o, $y, $d, 0);
?>

Bilginize:

Hata durumlarını sınarken === işlecini kullanmanız gerektiğini unutmayın. Çünkü işlev 0 döndürdüğünde == işleci bunu true olarak değerlendirir. Örnek:

<?php
$d
= NULL;
if (
false === stream_select($o, $y, $d, 0)) {
echo
"stream_select() başarısız oldu\n";
}
?>

Bilginize:

Bir akıma okuma/yazma işlemi yapıyorsanız işlemek istediğiniz verinin tamamını işleme sokabileceğiniz gibi bir kanıya kapılmayın. Bazen ilk baytta işlem duruverir.

Bilginize:

Bazı akımlar (zlib gibi) bu işlevle seçilemez.

Bilginize: Windows uyumluluğu

Windows altında, proc_open() işlevinden dönen dosya tanıtıcıları üzerinde stream_select() kullanımı başarısız olur ve false döner.

Bir konsoldan herhangi bir girdi kullanılabilir olduğu anda STDIN durum değiştirir, ancak akımdan okuma yine de engellenebilir.

Ayrıca Bakınız

To Top