<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.exec.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'function.proc-open.php',
    1 => 'proc_open',
    2 => 'Bir komutu &ccedil;alıştırır ve G/&Ccedil; i&ccedil;in bir dosya tanıtıcı a&ccedil;ar',
  ),
  'up' => 
  array (
    0 => 'ref.exec.php',
    1 => 'Program &Ccedil;alıştırma İşlevleri',
  ),
  'prev' => 
  array (
    0 => 'function.proc-nice.php',
    1 => 'proc_nice',
  ),
  'next' => 
  array (
    0 => 'function.proc-terminate.php',
    1 => 'proc_terminate',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'reference/exec/functions/proc-open.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.proc-open" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">proc_open</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.3.0, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">proc_open</span> &mdash; <span class="dc-title">Bir komutu çalıştırır ve G/Ç için bir dosya tanıtıcı açar
  </span></p>

 </div>
 <div class="refsect1 description" id="refsect1-function.proc-open-description">
  <h3 class="title">Açıklama</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>proc_open</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$komut</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$tanıtıcılar</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$tanıtıcılar</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$dizin</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.array.php" class="type array">array</a></span></span> <code class="parameter">$ortam</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.array.php" class="type array">array</a></span></span> <code class="parameter">$seçenekler</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span><br>): <span class="type"><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>proc_open()</strong></span> işlevi, program çalıştırma konusunda daha
   geniş denetim imkanı sağlaması dışında <span class="function"><a href="function.popen.php" class="function">popen()</a></span> gibidir.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.proc-open-parameters">
  <h3 class="title">Bağımsız Değişkenler</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">komut</code></dt>
     <dd>
      <p class="para">
       Bir dizge olarak çalıştırılacak komut. Özel karakterler uygun şekilde
       öncelenmeli ve uygun tırnaklama uygulanmalıdır.
      </p>
      <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
       <span class="simpara">
        <em>Windows</em> üzerinde,
        <code class="parameter">seçenekler</code> içinde
        <code class="literal">bypass_shell</code>  <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> olmadıkça
        <code class="parameter">komut</code> <em>tırnaklı</em> dizge
        olarak (yani, tam olarak <span class="function"><strong>proc_open()</strong></span> işlevine
        belirtildiği gibi) <code class="literal">/c</code> seçeneğiyle
        <strong class="command">cmd.exe</strong>&#039;ye aktarılır (aslında,
        <code class="literal">%ComSpec%</code>). Bu <strong class="command">cmd.exe</strong>&#039;nin
        <code class="parameter">komut</code>&#039;taki sarmalayıcı tırnakları kaldırmasına
        sebep olur (ayrıntılar için <strong class="command">cmd.exe</strong> belgelerine
        bakın), bu da istenmeyen ve daha tehlikeli olabilecek bir davranışla
        sonuçlanır, çünkü <strong class="command">cmd.exe</strong> hata iletiler aktarılan
        <code class="parameter">komut</code>&#039;u (parçalarını) içerebilir (aşağıya
        bakınız).
       </span>
      </p></blockquote>
      <p class="para">
       PHP 7.4.0&#039;dan beri, <code class="parameter">komut</code> bir komut
       bağımsız değişkenleri dizisi olarak aktarılabilmektedir. Bu durumda süreç
       doğrudan (kabuk üzerinden gitmeden) açılabilmekte ve gerekli
       bağımsız değişken öncelemesini PHP yapabilmektedir.
      </p>
      <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
       <p class="para">
        Windows üzerinde, dizi elemanlarının bağımsız değişken öncelemesi,
        çalıştırılan komutun komut satırı çözümlemesinin, VC çalışma
        zamanında yapılan komut satırı bağımsız değişkenleri ayrıştırılması
        işlemiyle uyumlu olduğu varsayılır.
       </p>
      </p></blockquote>
     </dd>
    
    
     <dt><code class="parameter">tanıtıcılar</code></dt>
     <dd>
      <p class="para">
       İndisli bir dizi olup, indisler tanıtıcı numaralarını, değerler ise
       PHP&#039;nin çocuk süreçlere bu tanıtıcıları nasıl aktaracağını gösterir. 0
       indisi, standart girdi; 1 indisi, standart çıktı; 2 indisi ise standart
       hata içindir.
      </p>
      <p class="para">
       Her eleman şunları içerebilir:
       <ul class="simplelist">
        <li>Sürece aktarılacak boruyu tanımlayan bir dizi. İlk eleman
        tanıtıcı türü, ikincisi belirtilen türde bir seçenektir. Geçerli
        türler: <code class="literal">pipe</code> (ikinci eleman sürece okuma ucunu
        aktaran <code class="literal">r</code> veya yazma ucunu aktaran
        <code class="literal">w</code> olabilir) ve <code class="literal">file</code> (ikinci
        eleman bir dosya ismidir). <code class="literal">w</code> dışındaki herşeyin
        <code class="literal">r</code> gibi ele alınacağına dikkat edilmelidir.
        </li>
        <li>
         Gerçek bir dosya tanıtıcısına karşılık gelen bir akım özkaynağı
         (örneğin, <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong>, bir soket, açılmış bir dosya
         gibi).
        </li>
       </ul>
      </p>
      <p class="para">
       Dosya tanıtıcıları 0, 1 ve 2 ile sınırlı değildir; çocuk sürece
       aktarılmak üzere herhangi bir dosya tanıtıcı belirtebilirsiniz.
       Böylece, betiğiniz diğer betiklerin arasında bir yardımcı süreç olarak
       çalışabilir. Bu özellikle, güvenlikle ilgili konularda PGP, GPG ve
       openssl gibi programlara anahtar parolasını aktarmak için
       kullanışlıdır. Ayrıca, bu programlar tarafından yardımcı dosya
       tanıtıcılarıyla sağlanan durum bilgisini okumak için de kullanışlıdır.
      </p>
     </dd>
    
    
     <dt><code class="parameter">borular</code></dt>
     <dd>
      <p class="para">
       PHP&#039;nin oluşturduğu boru uçlarına karşılık gelen dosya tanıtıcılarını
       içeren indisli bir dizi.
      </p>
     </dd>
    
    
     <dt><code class="parameter">dizin</code></dt>
     <dd>
      <p class="para">
       Komutun ilk çalıştırılacağı dizin. İlk çalıştırma dizini <strong>mutlak</strong> bir dosya yolu olabileceği gibi
       öntanımlı çalışma dizinini kullanmak isterseniz <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> da olabilir.
       Öntanımlı çalıştırma dizini PHP sürecinin çalıştırıldığı dizindir.
      </p>
     </dd>
    
    
     <dt><code class="parameter">ortam</code></dt>
     <dd>
      <p class="para">
       Çalıştırılacak komutun ortamına aktarılacak ortam değişkenleri dizisi.
       PHP süreci ile aynı ortamı kullanmak isterseniz <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
       belirtebilirsiniz.
      </p>
     </dd>
    
    
     <dt><code class="parameter">seçenekler</code></dt>
     <dd>
      <p class="para">
       Ek seçenekler belirtme imkanı sunar. Olası seçenekler:
       <ul class="simplelist">
        <li>
         <code class="literal">suppress_errors</code> (sadece windows): Değer olarak
         <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> belirtilirse bu işlev tarafından üretilen hatalar baskılanır.
        </li>
        <li>
         <code class="literal">bypass_shell</code> (sadece windows): Değer olarak
         <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> belirtilirse <code class="literal">cmd.exe</code> kabuğu es geçilir.
        </li>
        <li>
         <code class="literal">blocking_pipes</code> (sadece windows): <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
         atandığında boruların engellenmesi zorlanır.
        </li>
        <li>
         <code class="literal">create_process_group</code> (sadece windows): <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
         atandığında <code class="literal">CTRL</code> olaylarının çocuk süreç
         tarafından işlenmesini sağlar.
        </li>
        <li>
         <code class="literal">create_new_console</code> (sadece windows): Ebeveynin
         konsolunu miras almak yerine yeni sürece yeni bir konsol açılır.
        </li>
       </ul>
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.proc-open-returnvalues">
  <h3 class="title">Dönen Değerler</h3>
  <p class="para">
   Süreci ifade eden bir özkaynak döner. Bu özkaynak ile işiniz bittiğinde
   <span class="function"><a href="function.proc-close.php" class="function">proc_close()</a></span> ile serbest bırakmalısınız. Hata durumunda
   işlev <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> döndürür.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.proc-open-changelog">
  <h3 class="title">Sürüm Bilgisi</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Sürüm: </th>
       <th>Açıklama</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>7.4.4</td>
       <td>
        <code class="parameter">seçenekler</code> bağımsız değişkenine
        <code class="literal">create_new_console</code> seçeneği eklendi.
       </td>
      </tr>

      <tr>
       <td>7.4.0</td>
       <td>
        <span class="function"><strong>proc_open()</strong></span> artık <code class="parameter">komut</code>
        bağımsız değişkeninde bir dizi de kabul edebiliyor.
       </td>
      </tr>

      <tr>
       <td>7.4.0</td>
       <td>
        <code class="parameter">seçenekler</code> bağımsız değişkenine
        <code class="literal">create_process_group</code> seçeneği eklendi.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.proc-open-examples">
  <h3 class="title">Örnekler</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Örnek 1 - <span class="function"><strong>proc_open()</strong></span> örneği</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$tanıtıcılar </span><span style="color: #007700">= array(<br />   </span><span style="color: #0000BB">0 </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">"pipe"</span><span style="color: #007700">, </span><span style="color: #DD0000">"r"</span><span style="color: #007700">),  </span><span style="color: #FF8000">// stdin, alt sürecin okuyacağı borudur<br />   </span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">"pipe"</span><span style="color: #007700">, </span><span style="color: #DD0000">"w"</span><span style="color: #007700">),  </span><span style="color: #FF8000">// stdout, alt sürecin yazacağı borudur<br />   </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">"file"</span><span style="color: #007700">, </span><span style="color: #DD0000">"/tmp/hatalar"</span><span style="color: #007700">, </span><span style="color: #DD0000">"a"</span><span style="color: #007700">) </span><span style="color: #FF8000">// stderr çıktısı bu dosyaya yazılır<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$dizin </span><span style="color: #007700">= </span><span style="color: #DD0000">'/tmp'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$ortam </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'bir_seçenek' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'aeiou'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$süreç </span><span style="color: #007700">= </span><span style="color: #0000BB">proc_open</span><span style="color: #007700">(</span><span style="color: #DD0000">'php'</span><span style="color: #007700">, </span><span style="color: #0000BB">$tanıtıcılar</span><span style="color: #007700">, </span><span style="color: #0000BB">$borular</span><span style="color: #007700">, </span><span style="color: #0000BB">$dizin</span><span style="color: #007700">, </span><span style="color: #0000BB">$ortam</span><span style="color: #007700">);<br /><br />if (</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$süreç</span><span style="color: #007700">)) {<br />    </span><span style="color: #FF8000">// $borular artık şöyledir:<br />    // 0 =&gt; alt sürecin std. girdisine yazmak için tanıtıcı<br />    // 1 =&gt; alt sürecin std. çıktısını okumak için tanıtıcı<br />    // Hata çıktıları varsa /tmp/hatalar dosyasına yazılacak<br /><br />    </span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$borular</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">], </span><span style="color: #DD0000">'&lt;?php print_r($_ENV); ?&gt;'</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$borular</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br /><br />    echo </span><span style="color: #0000BB">stream_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$borular</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br />    </span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$borular</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br /><br />    </span><span style="color: #FF8000">// Bir kısır döngü oluşmaması için proc_close işlevini<br />    // çağırmadan önce açık boruların kapatılması hayati önemdedir.<br />    </span><span style="color: #0000BB">$dönen_değer </span><span style="color: #007700">= </span><span style="color: #0000BB">proc_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$süreç</span><span style="color: #007700">);<br /><br />    echo </span><span style="color: #DD0000">"komut </span><span style="color: #0000BB">$dönen_değer</span><span style="color: #DD0000"> değerini döndürdü\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
Yukarıdaki örnek şuna benzer bir çıktı üretir:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
    [bir_seçenek] =&gt; aeiou
    [PWD] =&gt; /tmp
    [SHLVL] =&gt; 1
    [_] =&gt; /usr/local/bin/php
)
komut 0 değerini döndürdü</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Örnek 2 - Windows üzerinde <span class="function"><strong>proc_open()</strong></span> tuhaflığı
    </strong></p>
    <div class="example-contents"><p>
     Aşağıdaki betiğin <var class="filename">filename.txt</var> üzerinde <code class="literal">search</code> dizgesini arayacağı ve sonucu basacağı umulurken biraz farklı davranır:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$tanıtıcılar </span><span style="color: #007700">= [</span><span style="color: #0000BB">STDIN</span><span style="color: #007700">, </span><span style="color: #0000BB">STDOUT</span><span style="color: #007700">, </span><span style="color: #0000BB">STDOUT</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$komut </span><span style="color: #007700">= </span><span style="color: #DD0000">'"findstr" "search" "filename.txt"'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$süreç </span><span style="color: #007700">= </span><span style="color: #0000BB">proc_open</span><span style="color: #007700">(</span><span style="color: #0000BB">$komut</span><span style="color: #007700">, </span><span style="color: #0000BB">$tanıtıcılar</span><span style="color: #007700">, </span><span style="color: #0000BB">$borular</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">proc_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$süreç</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">&#039;findstr&quot; &quot;search&quot; &quot;filename.txt&#039; is not recognized as an internal or external command,
operable program or batch file.</pre>
</div>
    </div>
    <div class="example-contents"><p>
     Bu davranışın etrafından dolaşmak için komutu ek tırnaklarla sarmalamak
     yeterlidir:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">$cmd = '""findstr" "search" "filename.txt""';</span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.proc-open-notes">
  <h3 class="title">Notlar</h3>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: <strong>Windows uyumluluğu</strong><br />
   <p class="para">
    2 (strerr) tanıtıcısı hariç, tanıtıcılar çocuk süreçlere kalıtım yoluyla
    aktarılırlar, fakat Windows mimarisi dosya tanıtıcılarını düşük seviyeli
    tanıtıcılarla ilişkilendirmediğinden çocuk süreç bu tanıtıcılara erişemez.
    stdin, stdout ve stderr beklendiği gibi çalışır.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Eğer ihtiyacınız tek yönlü bir boru ise kullanımı daha kolay olan
    <span class="function"><a href="function.popen.php" class="function">popen()</a></span> işlevini kullanın.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.proc-open-seealso">
  <h3 class="title">Ayrıca Bakınız</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.popen.php" class="function" rel="rdfs-seeAlso">popen()</a> - Bir s&uuml;re&ccedil; tanıtıcısı a&ccedil;ar</span></li>
    <li><span class="function"><a href="function.exec.php" class="function" rel="rdfs-seeAlso">exec()</a> - Bir komut &ccedil;alıştırır</span></li>
    <li><span class="function"><a href="function.system.php" class="function" rel="rdfs-seeAlso">system()</a> - Belirtilen harici komutu &ccedil;alıştırır ve &ccedil;ıktısını g&ouml;sterir</span></li>
    <li><span class="function"><a href="function.passthru.php" class="function" rel="rdfs-seeAlso">passthru()</a> - Harici bir programı &ccedil;alıştırır ve &ccedil;ıktısını ham olarak
  g&ouml;sterir</span></li>
    <li><span class="function"><a href="function.stream-select.php" class="function" rel="rdfs-seeAlso">stream_select()</a> - Belirtilen akım dizisi &uuml;zerinde saniye ve mikrosaniye ile
   belirtilen zaman aşımıyla select() sistem &ccedil;ağrısının eşdeğeri olarak
   &ccedil;alışır</span></li>
    <li><a href="language.operators.execution.php" class="link">Çalıştırma
    İşleci</a></li>
   </ul>
  </p>
 </div>

</div><?php manual_footer($setup); ?>