stream_select

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

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

Açıklama

stream_select ( array &$oku , array &$yaz , array &$dış , int $saniye [, int $mikrosaniye = 0 ] ) : int

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.

Değiştirgeler

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 hariç dizilerinde akım özkaynaklarının değişen durumlarını belirten değişklikler yapılır.

stream_select() işlevine bu dizilerin hepsini aktarmak zorunda değilsiniz. Kullanmayacağınız dizileri ya boş bırakın ya da dizi yerine NULL belirtin. Ayrıca, bu dizilerin gönderimli aktarıldıklarını ve stream_select() dönerken bunlarda değişiklik yapılacağını da unutmayın.
saniye

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

saniye değiştirgesinde 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 değiştirgesinin 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).

Ö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 dizisini hazırlayalım */
$oku = array($oku1$oku2);
$yaz NULL;
$dış NULL;
if (
false === ($değişen_akım_sayısı stream_select($oku$yaz$dış0))) {
    
/* Hata durumunda yapılacaklar */
} elseif ($değişen_akım_sayısı 0) {
    
/* Akımların en azından birinde değişiklik olmuş  */
}
?>

Notlar

Bilginize:

Zend motorunun sınırlamalarından dolayı, gönderimli aktarılan bir değiştirgeye 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$d0);
?>

Bilginize:

Hat 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$d0)) {
    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:

Windows uyumluluğu: Windows 98 altında, proc_open() işlevinden dönen bir boru üzerinde stream_select() kullanımı veri kaybına sebep olabilir.

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

Ayrıca Bakınız