<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'features.persistent-connections.php',
    1 => 'Kalıcı Bağlantılı Veritabanı Bağlantıları',
    2 => 'Kalıcı Bağlantılı Veritabanı Bağlantıları',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => '&Ouml;zellikler',
  ),
  'prev' => 
  array (
    0 => 'features.connection-handling.php',
    1 => 'Bağlantı y&ouml;netimi',
  ),
  'next' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Komut satırından kullanım',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'features/persistent-connections.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.persistent-connections" class="chapter">
  <h1 class="title">Kalıcı Bağlantılı Veritabanı Bağlantıları</h1>


  <p class="simpara">
   Kalıcı bağlantılar betiğinizin çalışması bittiğinde kapanmayan
   bağlantılardır. Bir kalıcı bağlantı istendiğinde PHP evvelce açılmış
   eşdeğer bir kalıcı bağlantı var mı diye bakar ve varsa onu kullanır. Yoksa
   yeni bir bağlantı oluşturur. Bir &#039;eşdeğer&#039; bağlantı, aynı konağa
   (uygulanabildiği takdirde) aynı kullanıcı adı ve parola kullanılarak
   açılmış bağlantıdır.
  </p>
  <p class="simpara">
   HTTP sunucuları hakkında tam bilgi sahibi olmayan kişiler ne yaptıklarını
   bilmeden yükü yanlış kalıcı bağlantılara dağıtabilir ve bu yanlış
   bağlantılarla çalışabilirler. Özellikle, size aynı bağlantı üzerinde
   &#039;kullanıcı oturumları&#039; açma olanağını, verimli hareket işlemleri
   kurulmasını ve başka birçok şeyi bir bütün halinde sağlamazlar. Aslında,
   son derece net olarak, kalıcı bağlantılar, kalıcı olmayan bağlantılarla
   mümkün olmayan işlevselliği size sağlayamazlar.
  </p>
  <p class="para">
   Neden?
  </p>
  <p class="simpara">
   Bu HTTP sunucusunun işi nasıl yaptığı ile ilgilidir. PHP&#039;nin HTML
   sayfalarını üretmek için HTTP sunucusunu üç şekilde kullanabilir.
  </p>
  <p class="simpara">
   İlk yöntem, PHP&#039;yi bir CGI &quot;sarmalayıcı&quot; olarak kullanmaktır. Bu yolla,
   HTTP sunucusundan her PHP sayfası isteğinde PHP yorumlayıcısının yeni bir
   örneği oluşturulup yok edilir. Yorumlayıcı her istekten sonra yok
   edildiğinden kazanılan özkaynaklar da (bir SQL veritabanı bağlantısı gibi)
   kaybedilir. Bu durumda, kalıcı bağlantılar kullanarak hiç bir şey
   kazanamazsınız; çünkü özkaynaklar kalıcı olmayacaktır.
  </p>
  <p class="simpara">
   İkinci ve en çok kullanılan yöntem, PHP&#039;yi çok süreçli bir sunucuda bir
   modül olarak çalıştırmaktır. Bu olanak şimdilik sadece Apache HTTP sunucusu
   ile mümkündür. Çok süreçli bir sunucu, işleri sayfaları sunmak olan bir çok
   (alt) süreci denetimi altında tutan bir ana sürece sahiptir. Bir istemciden
   bir istek geldiğinde, başka istemcilere hizmet sunmayan alt süreçlerden
   birini bu isteğe tahsis eder. Eğer aynı istemci ikinci bir istek yaparsa bu
   isteğe başka bir alt süreç yanıt verebilir. Kalıcı bir bağlantı açıldığında
   SQL hizmeti isteği yapılan her sayfa isteği SQL sunucuya tahsis edilen aynı
   bağlantıdan sunulur.
  </p>
  <p class="simpara">
   Son yöntem, PHP&#039;yi çok evreli bir sunucuda bir eklenti olarak kullanmaktır.
   PHP şimdilik, PHP&#039;nin bir eklenti olarak kullanımına izin veren Netscape
   FastTrack (iPlanet), Microsoft&#039;s Internet Information Server (IIS) ve
   O&#039;Reilly&#039;s WebSite Pro gibi çok evreli HTTP sunucularında ISAPI, WSAPI ve
   (Windows üzerinde) NSAPI için destek vermektedir. Davranış esas olarak
   ikinci yöntemde açıklanan çok süreçli yöntemle aynıdır.
  </p>
  <p class="para">
   Kalıcı bağlantılar ek bir işlevselliğe sahip değilseler bunlar neden tercih
   ediliyorlar?
  </p>
  <p class="simpara">
   Yanıtı oldukça basittir: Verimlilik. SQL sunucunuza bağlantı açmak çok
   masraflıysa kalıcı bağlantılar kurmak daha iyidir. Bu bedel gerçekte birçok
   sebebe bağlı olabileceği gibi olmayabilir de. Bu, veritabanının, HTTP
   sunucunun bulunduğu makinede olup olmamasından SQL sunucusunun makineye ne
   kadar yük bindirdiğine kadar geniş bir yelpazede değerlendirilebilir. Son
   değerlendirmede, eğer bu bedel yüksekse kalıcı bağlantıların büyük ölçüde
   yardımı olacaktır. SQL sunucuya yapılan her bağlantı
   isteğinde alt süreç sadece o sayfayı işleyeceği yerde, kalıcı bağlantı
   durumunda her alt sürecin ömrü boyunca bir bağlantı kurmasına olanak
   tanınır. Yani, bir kalıcı bağlantı açmış her alt sürecin kendine ait bir
   kalıcı bağlantısı vardır. Örneğin, SQl sunucunuza kalıcı bağlantı açan
   betiğiniz 20 ayrı alt süreç çalıştırıyorsa alt süreç başına bir tane olmak
   20 ayrı bağlantı var demektir.
  </p>
  <p class="simpara">
   Ancak şuna dikkat edin, bağlantı sayısı sınırlı bir veritabanını bu sınırın
   üstünde kalıcı bağlantılarla kullanıyorsanız bunun bazı götürüleri olabilir.
   Eğer veritabanınız aynı anda 16 bağlantılık bir sınıra sahipse ve çok
   meşgul bir sunucu oturumunda 17 alt evre bağlantı açmaya çalışıyorsa biri
   bunu başaramayacaktır. Eğer betiğinizde (sonsuz döngü gibi durumlarda)
   bağlantıların kapatılmasına izin vermeyen hatalar varsa, veritabanı sadece
   16 bağlantı ile hızla batağa saplanacaktır. Terkedilmiş ve boştaki
   bağlantıların devreye sokulması hakkında bilgi edinmek için veritabanınızın
   belgelerine bakınız.
  </p>
  <div class="warning"><strong class="warning">Uyarı</strong>
   <p class="simpara">
    Kalıcı bağlantıları kullanırken hesaba katmanız gereken bir çok
    yetersizlik vardır. Bunlardan biri, bir kalıcı bağlantı üzerinden tablo
    kilitlemesi yapıyorsanız ve betiğiniz herhangi bir şekilde kilidi serbest
    bırakamazsa aynı bağlantıyı kullanan sonraki betikler sonsuza kadar
    engellenebilir ve bunun sonucu olarak HTTP sunucunuzu veya veritabanı
    sunucunuzu yeniden başlatmak zorunda kalabilirsiniz. Bir diğer durumda,
    hareketleri (transaction) kullanırken, bir hareket bloğu tamamlanmadan
    betiğiniz çalışmasını bitirirse aynı bağlantıyı kullanan sonraki
    betiklerin işleri başlarından aşacaktır. Her durumda, tablolarınızın
    kilitlerini açmak ve hareketleri başa sarmak için
    <span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span> işlevini kullanarak bir
    temizlik işlevi tanımlayabilirsiniz. Daha da  iyisi, tablo kilitleri veya
    hareket blokları kullanan betiklerde kalıcı bağlantıları kullanmayarak bu
    sorunlardan tamamiyle kurtulabilirsiniz.
   </p>
  </div>
  <p class="simpara">
   Özetle, kalıcı bağlantılar normal bağlantılarla bire bir eşleşecek şekilde
   tasarlanmışlardır. Yani, betiğinizin davranışını değiştirmeden kalıcı
   bağlantılar yerine <em>her zaman</em> kalıcı olmayan
   bağlantılar kullanabilirsiniz. Bu, muhtemelen betiğinizin verimliliğini
   etkileyecektir ama davranışında bir değişikliğe yol açmayacaktır!
  </p>
  <p class="para">
   Ayrıca bakınız:
   <span class="function"><a href="function.ibase-pconnect.php" class="function">ibase_pconnect()</a></span>, <span class="function"><a href="function.ociplogon.php" class="function">ociplogon()</a></span>,
   <span class="function"><a href="function.odbc-pconnect.php" class="function">odbc_pconnect()</a></span>, <span class="function"><a href="function.oci-pconnect.php" class="function">oci_pconnect()</a></span>,
   <span class="function"><a href="function.pfsockopen.php" class="function">pfsockopen()</a></span> ve <span class="function"><a href="function.pg-pconnect.php" class="function">pg_pconnect()</a></span>.
  </p>
 </div>
<?php manual_footer($setup); ?>