array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.stream-socket-client.php', 1 => 'stream_socket_client', ), 'up' => array ( 0 => 'ref.stream.php', 1 => 'Akım İşlevleri', ), 'prev' => array ( 0 => 'function.stream-socket-accept.php', 1 => 'stream_socket_accept', ), 'next' => array ( 0 => 'function.stream-socket-enable-crypto.php', 1 => 'stream_socket_enable_crypto', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/stream/functions/stream-socket-client.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
stream_socket_client — Bir Genel Ağ veya Unix alan soketi bağlantısı açar
$adres
,&$hatanum
= null
,&$ileti
= null
,$süre
= null
,$seçenekler
= STREAM_CLIENT_CONNECT,$bağlam
= null
adres
ile belirtilen hedefe bir akım veya
verikatarı bağlantısı açar. Oluşturulacak soketin türü standart URL
biçemi kullanılarak belirtilir: şema://hedef
.
TCP ve UDP gibi Genel Ağ Alanı soketleri (AF_INET
)
için, adres
'in hedef
parçası bir konak ismi veya IP adresinden sonra gelen bir ikinokta imi
ve bir port numarasından oluşur. Unix alan soketleri için
target
parçası ise dosya sistemi üstündeki bir soket
dosyasını göstermelidir.
Bilginize:
Akım öntanımlı olarak engellenebilen türde açılır. stream_set_blocking() işlevini kullanarak engellenmeyen kipe geçebilirsiniz.
adres
Bağlanılacak soketin adresi.
hatanum
Bağlantı başarısız olursa sistem seviyesindeki hatanın numarası bu bağımsız değişkene atanır.
ileti
Bağlantı başarısız olursa sistem seviyesindeki hatanın açıklaması bu bağımsız değişkene atanır.
süre
connect()
sistem çağrısının zaman aşımına uğrayacağı
saniye sayısı. Öntanımlı olarak, default_socket_timeout
kullanılır.
Bilginize: Bu bağımsız değişken sadece eşzamansız bağlantı yapılmaya çalışılmıyorsa uygulanır.
Bilginize:
Soket üzerinde veri okumak veya yazmak için zaman aşımı, sokete bağlantı yapılırken uygulanacak şekilde sadece stream_set_timeout() tarafından belirlenir.
seçenekler
Bağlantı seçeneklerinin birleşimi olarak bir bit maskesi. Geçerli
bağlantı seçenekleri: STREAM_CLIENT_CONNECT
(öntanımlı), STREAM_CLIENT_ASYNC_CONNECT
ve
STREAM_CLIENT_PERSISTENT
.
bağlam
stream_context_create() ile oluşturulmuş geçerli bir bağlam özkaynağı.
Başarısızlık durumunda false
, aksi takdirde
fgets(), fgetss(),
fwrite(), fclose() ve
feof() gibi diğer dosya işlevleri ile kullanılmak üzere
bir akım özkaynağı döner.
Başarısızlık durumunda hatanum
ve
ileti
bağımsız değişkenlerine, sistem-seviyesi
connect()
çağrısında oluşan sistem seviyesindeki
hatanın bilgisi atanır. hatanum
'da
döndürülen değer 0
ise ve işlev false
döndürüyorsa,
hata connect()
çağrısından önce oluşmuş demektir.
Bu sorunla çoğunlukla soketin ilklendirilmesi sırasında karşılaşılır.
hatanum
ve ileti
bağımsız değişkenlerinin daima gönderimli aktarılmasına dikkat edilmelidir.
Sürüm: | Açıklama |
---|---|
8.0.0 |
süre ve bağlam artık
null olabiliyor.
|
Örnek 1 - stream_socket_client() örneği
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
Örnek 2 - UDP bağlantı kullanımı
localhost üzerindeki "daytime" (port 13) UDP hizmetinden tarih ve saati öğrenmek.
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
echo "HATA: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
UDP soketler bazen, uzak konağa erişilemediği halde hata vermeksizin açılmış gibi görünür. Hata sadece bağlantıya veri okuyup yazmaya çalıştığında ortaya çıkar. Bunun sebebi UDP'nin bir bağlantısız protokol olmasıdır. Bağlantısız protokollerde işletim sistemi, asıl veri alınıncaya veya gönderilinceye kadar sokete bir bağlantı oluşturmaya çalışmaz.
Bilginize: Bir sayısal IPv6 adresi (
fe80::1
gibi) belirtirken port numarasıda belirtmek isterseniz IP adresini köşeli ayraçlar arasına almalısınız. Örnek:tcp://[fe80::1]:80
.
Bilginize:
Platforma bağlı olarak, Unix alan soketleri mevcut olmayabilir. Kullanılabilecek aktarım çeşitlerinin listesi stream_get_transports() işlevi ile alınabilir. Yerleşik aktarım türlerinin tam listesini Desteklenen Soket Aktarımlarının Listesi sayfasında bulabilirsiniz.