PHP 8.4.2 Released!

stream_socket_client

(PHP 5, PHP 7, PHP 8)

stream_socket_clientBir Genel Ağ veya Unix alan soketi bağlantısı açar

Açıklama

stream_socket_client(
    string $adres,
    int &$hatanum = null,
    string &$ileti = null,
    ?float $süre = null,
    int $seçenekler = STREAM_CLIENT_CONNECT,
    ?resource $bağlam = null
): resource|false

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.

Bağımsız Değişkenler

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ğı.

Dönen Değerler

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.

Hatalar/İstisnalar

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 Bilgisi

Sürüm: Açıklama
8.0.0 süre ve bağlam artık null olabiliyor.

Örnekler

Ö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);
}
?>

Notlar

Uyarı

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.

Ayrıca Bakınız

  • stream_socket_server() - Bir Genel Ağ veya Unix alan sunucusu soketi oluşturur
  • stream_set_blocking() - Akımın engelleme kipini ayarlar
  • stream_set_timeout() - Akımın zaman aşımı süresini ayarlar
  • 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
  • fgets() - Dosya tanıtıcısından bir satır döndürür
  • fgetss() - Dosya tanıtıcısından bir satırı HTML etiketlerinden arındırarak döndürür
  • fwrite() - Dosyaya ikil kipte yazar
  • fclose() - Açık bir dosya tanıtıcısını kapatır
  • feof() - Bir dosya tanıtıcısı üzerinde konum dosya sonunda mı diye bakar
  • cURL İşlevleri

add a note

User Contributed Notes 2 notes

up
22
nicholas at nicholaswilliams dot net
16 years ago
For those wanting to use stream_socket_client() to connect to a local UNIX socket who can't find documentation on how to do it, here's a (rough) example:

<?php

$sock
= stream_socket_client('unix:///full/path/to/my/socket.sock', $errno, $errstr);

fwrite($sock, 'SOME COMMAND'."\r\n");

echo
fread($sock, 4096)."\n";

fclose($sock);

?>
up
10
Vasil Rangelov a.k.a. boen_robot
13 years ago
The remote_socket argument, in its end (well... after the port), can also contain a "/" followed by a unique identifier. This is especially useful if you want to create multiple persistent connections to the same transport://host:port combo.

Example:
<?php
$socket
= stream_socket_client('tcp://mysql.example.com:3306/root', $errorno, $errorstr, $timeout, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT);
?>

Note that while (p)fsockopen() follows a similar scheme, it doesn't have this particular feature.
To Top