(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
stream_select — Belirtilen 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
&$oku
,&$yaz
,&$dış
,$saniye
,$mikrosaniye
= null
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.
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
vedış
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.
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.
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: | Açıklama |
---|---|
8.1.0 |
mikrosaniye artık null olabiliyor.
|
Ö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ş */
}
?>
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 nedenlenull
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şlev0
döndürdüğünde==
işleci bunutrue
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.