mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
368 lines
13 KiB
XML
368 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 769812c12f00c1978bf7dd711dca38dbf05462da Maintainer: nilgun Status: ready -->
|
||
<refentry xml:id='function.proc-open' xmlns="http://docbook.org/ns/docbook">
|
||
<refnamediv>
|
||
<refname>proc_open</refname>
|
||
<refpurpose>Bir komutu çalıştırır ve G/Ç için bir dosya tanıtıcı açar
|
||
</refpurpose>
|
||
</refnamediv>
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<methodsynopsis>
|
||
<type class="union"><type>resource</type><type>false</type></type><methodname>proc_open</methodname>
|
||
<methodparam><type class="union"><type>array</type><type>string</type></type><parameter>komut</parameter></methodparam>
|
||
<methodparam><type>array</type><parameter>tanıtıcılar</parameter></methodparam>
|
||
<methodparam><type>array</type><parameter role="reference">tanıtıcılar</parameter></methodparam>
|
||
<methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>dizin</parameter><initializer>&null;</initializer></methodparam>
|
||
<methodparam choice="opt"><type class="union"><type>array</type><type>null</type></type><parameter>ortam</parameter><initializer>&null;</initializer></methodparam>
|
||
<methodparam choice="opt"><type class="union"><type>array</type><type>null</type></type><parameter>seçenekler</parameter><initializer>&null;</initializer></methodparam>
|
||
</methodsynopsis>
|
||
<para>
|
||
<function>proc_open</function> işlevi, program çalıştırma konusunda daha
|
||
geniş denetim imkanı sağlaması dışında <function>popen</function> gibidir.
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="parameters">
|
||
&reftitle.parameters;
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><parameter>komut</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Bir dizge olarak çalıştırılacak komut. Özel karakterler uygun şekilde
|
||
öncelenmeli ve uygun tırnaklama uygulanmalıdır.
|
||
</para>
|
||
<note>
|
||
<simpara>
|
||
<emphasis>Windows</emphasis> üzerinde,
|
||
<parameter>seçenekler</parameter> içinde
|
||
<literal>bypass_shell</literal> &true; olmadıkça
|
||
<parameter>komut</parameter> <emphasis>tırnaklı</emphasis> dizge
|
||
olarak (yani, tam olarak <function>proc_open</function> işlevine
|
||
belirtildiği gibi) <literal>/c</literal> seçeneğiyle
|
||
<command>cmd.exe</command>'ye aktarılır (aslında,
|
||
<literal>%ComSpec%</literal>). Bu <command>cmd.exe</command>'nin
|
||
<parameter>komut</parameter>'taki sarmalayıcı tırnakları kaldırmasına
|
||
sebep olur (ayrıntılar için <command>cmd.exe</command> belgelerine
|
||
bakın), bu da istenmeyen ve daha tehlikeli olabilecek bir davranışla
|
||
sonuçlanır, çünkü <command>cmd.exe</command> hata iletiler aktarılan
|
||
<parameter>komut</parameter>'u (parçalarını) içerebilir (aşağıya
|
||
bakınız).
|
||
</simpara>
|
||
</note>
|
||
<para>
|
||
PHP 7.4.0'dan beri, <parameter>komut</parameter> 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.
|
||
</para>
|
||
<note>
|
||
<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.
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>tanıtıcılar</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
İndisli bir dizi olup, indisler tanıtıcı numaralarını, değerler ise
|
||
PHP'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.
|
||
</para>
|
||
<para>
|
||
Her eleman şunları içerebilir:
|
||
<simplelist>
|
||
<member>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: <literal>pipe</literal> (ikinci eleman sürece okuma ucunu
|
||
aktaran <literal>r</literal> veya yazma ucunu aktaran
|
||
<literal>w</literal> olabilir) ve <literal>file</literal> (ikinci
|
||
eleman bir dosya ismidir). <literal>w</literal> dışındaki herşeyin
|
||
<literal>r</literal> gibi ele alınacağına dikkat edilmelidir.
|
||
</member>
|
||
<member>
|
||
Gerçek bir dosya tanıtıcısına karşılık gelen bir akım özkaynağı
|
||
(örneğin, <constant>STDIN</constant>, bir soket, açılmış bir dosya
|
||
gibi).
|
||
</member>
|
||
</simplelist>
|
||
</para>
|
||
<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.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>borular</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
PHP'nin oluşturduğu boru uçlarına karşılık gelen dosya tanıtıcılarını
|
||
içeren indisli bir dizi.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>dizin</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Komutun ilk çalıştırılacağı dizin. İlk çalıştırma dizini <emphasis
|
||
role="strong">mutlak</emphasis> bir dosya yolu olabileceği gibi
|
||
öntanımlı çalışma dizinini kullanmak isterseniz &null; da olabilir.
|
||
Öntanımlı çalıştırma dizini PHP sürecinin çalıştırıldığı dizindir.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>ortam</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Çalıştırılacak komutun ortamına aktarılacak ortam değişkenleri dizisi.
|
||
PHP süreci ile aynı ortamı kullanmak isterseniz &null;
|
||
belirtebilirsiniz.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>seçenekler</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Ek seçenekler belirtme imkanı sunar. Olası seçenekler:
|
||
<simplelist>
|
||
<member>
|
||
<literal>suppress_errors</literal> (sadece windows): Değer olarak
|
||
&true; belirtilirse bu işlev tarafından üretilen hatalar baskılanır.
|
||
</member>
|
||
<member>
|
||
<literal>bypass_shell</literal> (sadece windows): Değer olarak
|
||
&true; belirtilirse <literal>cmd.exe</literal> kabuğu es geçilir.
|
||
</member>
|
||
<member>
|
||
<literal>blocking_pipes</literal> (sadece windows): &true;
|
||
atandığında boruların engellenmesi zorlanır.
|
||
</member>
|
||
<member>
|
||
<literal>create_process_group</literal> (sadece windows): &true;
|
||
atandığında <literal>CTRL</literal> olaylarının çocuk süreç
|
||
tarafından işlenmesini sağlar.
|
||
</member>
|
||
<member>
|
||
<literal>create_new_console</literal> (sadece windows): Ebeveynin
|
||
konsolunu miras almak yerine yeni sürece yeni bir konsol açılır.
|
||
</member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="returnvalues">
|
||
&reftitle.returnvalues;
|
||
<para>
|
||
Süreci ifade eden bir özkaynak döner. Bu özkaynak ile işiniz bittiğinde
|
||
<function>proc_close</function> ile serbest bırakmalısınız. Hata durumunda
|
||
işlev &false; döndürür.
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="changelog">
|
||
&reftitle.changelog;
|
||
<para>
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>7.4.4</entry>
|
||
<entry>
|
||
<parameter>seçenekler</parameter> bağımsız değişkenine
|
||
<literal>create_new_console</literal> seçeneği eklendi.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.4.0</entry>
|
||
<entry>
|
||
<function>proc_open</function> artık <parameter>komut</parameter>
|
||
bağımsız değişkeninde bir dizi de kabul edebiliyor.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.4.0</entry>
|
||
<entry>
|
||
<parameter>seçenekler</parameter> bağımsız değişkenine
|
||
<literal>create_process_group</literal> seçeneği eklendi.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="examples">
|
||
&reftitle.examples;
|
||
<para>
|
||
<example>
|
||
<title>- <function>proc_open</function> örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$tanıtıcılar = array(
|
||
0 => array("pipe", "r"), // stdin, alt sürecin okuyacağı borudur
|
||
1 => array("pipe", "w"), // stdout, alt sürecin yazacağı borudur
|
||
2 => array("file", "/tmp/hatalar", "a") // stderr çıktısı bu dosyaya yazılır
|
||
);
|
||
|
||
$dizin = '/tmp';
|
||
$ortam = array('bir_seçenek' => 'aeiou');
|
||
|
||
$süreç = proc_open('php', $tanıtıcılar, $borular, $dizin, $ortam);
|
||
|
||
if (is_resource($süreç)) {
|
||
// $borular artık şöyledir:
|
||
// 0 => alt sürecin std. girdisine yazmak için tanıtıcı
|
||
// 1 => alt sürecin std. çıktısını okumak için tanıtıcı
|
||
// Hata çıktıları varsa /tmp/hatalar dosyasına yazılacak
|
||
|
||
fwrite($borular[0], '<?php print_r($_ENV); ?>');
|
||
fclose($borular[0]);
|
||
|
||
echo stream_get_contents($borular[1]);
|
||
fclose($borular[1]);
|
||
|
||
// Bir kısır döngü oluşmaması için proc_close işlevini
|
||
// çağırmadan önce açık boruların kapatılması hayati önemdedir.
|
||
$dönen_değer = proc_close($süreç);
|
||
|
||
echo "komut $dönen_değer değerini döndürdü\n";
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.similar;
|
||
<screen>
|
||
<![CDATA[
|
||
Array
|
||
(
|
||
[bir_seçenek] => aeiou
|
||
[PWD] => /tmp
|
||
[SHLVL] => 1
|
||
[_] => /usr/local/bin/php
|
||
)
|
||
komut 0 değerini döndürdü
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- Windows üzerinde <function>proc_open</function> tuhaflığı
|
||
</title>
|
||
<simpara>
|
||
Aşağıdaki betiğin <filename>filename.txt</filename> üzerinde <literal>search</literal> dizgesini arayacağı ve sonucu basacağı umulurken biraz farklı davranır:
|
||
</simpara>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$tanıtıcılar = [STDIN, STDOUT, STDOUT];
|
||
$komut = '"findstr" "search" "filename.txt"';
|
||
$süreç = proc_open($komut, $tanıtıcılar, $borular);
|
||
proc_close($süreç);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
'findstr" "search" "filename.txt' is not recognized as an internal or external command,
|
||
operable program or batch file.
|
||
]]>
|
||
</screen>
|
||
<simpara>
|
||
Bu davranışın etrafından dolaşmak için komutu ek tırnaklarla sarmalamak
|
||
yeterlidir:
|
||
</simpara>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
$cmd = '""findstr" "search" "filename.txt""';
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="notes">
|
||
&reftitle.notes;
|
||
<note><title>Windows uyumluluğu</title>
|
||
<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.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Eğer ihtiyacınız tek yönlü bir boru ise kullanımı daha kolay olan
|
||
<function>popen</function> işlevini kullanın.
|
||
</para>
|
||
</note>
|
||
</refsect1>
|
||
|
||
<refsect1 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><function>popen</function></member>
|
||
<member><function>exec</function></member>
|
||
<member><function>system</function></member>
|
||
<member><function>passthru</function></member>
|
||
<member><function>stream_select</function></member>
|
||
<member><link linkend="language.operators.execution">Çalıştırma
|
||
İşleci</link></member>
|
||
</simplelist>
|
||
</para>
|
||
</refsect1>
|
||
</refentry>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|