Problem : Uzaktaki
makineye soket acarak baglanmak istiyorsunuz.
Cozum: TCP ile uzaktaki bir makineye baglanmak icin fsockopen
() hazir fonksiyonu kullanilir.
Not: Baska bir sunucuya izin almadan soket acarak baglanmak
istemedigim icin php.org.tr'in egitim sunucusunu kullaniyorum.(turk-php.com
virtual host uzerinde oldugu icin istedigim sonucu alamiyorum…)
<?php
$baglanti = fsockopen("www.php.org.tr", 80, $errno, $errstr,
30);
if (!$baglanti) {
die($errstr);
}
fputs($baglanti, "GET / /HTTP/1.0 \r\n\r\n");
while (!feof($baglanti)) {
$satir = fgets($baglanti, 2048);
echo $satir;
}
fclose ($baglanti);
?>
Bir diger cozum ise PHP'nin soket kutuphanesini kullanmaktir.(PHP
icerisinden bu modulu kullanabilmek icin configure betigi
--enable-sockets parametresi ile calistirilmalidir.)
<?php
$url = 'www.php.org.tr';
$serv_port = getservbyname('www', 'tcp');
$adres = gethostbyname($url);
$sock = socket (AF_INET, SOCK_STREAM, 0);
if ($sock < 0) {
die(strerror($sock));
}
$res = connect($sock, $adres, $serv_port);
if ($res < 0) {
die(strerror($res));
}
$veri = "HEAD / HTTP/1.0 \r\n\r\n";
write ($sock, $veri, strlen($veri));
while (read($sock, $cevap, 2048)) {
print $cevap;
}
close ($sock);
?>
Her iki programda ayni islevi gormektedir.Ilk programda fsockopen
() hazir fonksiyonu yardimiyla sokete baglanmak icin bir
arayuz olustrulmustur.
Ikinci programda, programciya daha fazla kontrol sunan soket
modulu kullanilmistir.Bu kutuphane ile daha dusuk seviyeli
C API'lerine direkt erisim saglanmaktadir.
Serkan Hadi Ceylani
serkan@turk-php.com
Kaynak : ISBN 0-672-31924-1
|