(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 = 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) {
}
?>
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.