(PHP 4 >= 4.3.0, PHP 5)
proc_open — Bir komutu çalıştırır ve G/Ç için bir dosya tanıtıcı açar
$komut
, array $tanıtıcılar
, array &$borular
[, string $dizin
[, array $ortam
[, array $seçenekler
]]] )proc_open() işlevi, program çalıştırma konusunda daha geniş denetim imkanı sağlaması dışında popen() gibidir.
cmd
Çalıştırılacak komut.
tanıtıcılar
İ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.
Her eleman şunları içerebilir:
STDIN
, bir soket, açılmış bir dosya
gibi).
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.
borular
PHP'nin oluşturduğu boru uçlarına karşılık gelen dosya tanıtıcılarını içeren indisli bir dizi.
dizin
Komutun ilk çalıştırılacağı dizin. İlk çalıştırma dizini mutlak 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.
ortam
Çalıştırılacak komutun ortamına aktarılacak ortam değişkenleri dizisi.
PHP süreci ile aynı ortamı kullanmak isterseniz NULL
belirtebilirsiniz.
seçenekler
Ek seçenekler belirtme imkanı sunar. Olası seçenekler:
TRUE
belirtilirse bu işlev tarafından üretilen hatalar baskılanır.
TRUE
belirtilirse cmd.exe kabuğu es geçilir.
Süreci ifade eden bir özkaynak döner. Bu özkaynak ile işiniz bittiğinde
proc_close() ile serbest bırakmalısınız. Hata durumunda
işlev FALSE
döndürür.
Sürüm: | Açıklama |
---|---|
6.0.0 |
seçenekler değiştirgesinin olası seçeneklerine
context ve binary_pipes
seçenekleri eklendi.
|
5.2.1 |
seçenekler değiştirgesinin olası seçeneklerine
bypass_shell seçeneği eklendi.
|
5.0.0 |
dizin , ortam ve
seçenekler değiştirgeleri eklendi.
|
Örnek 1 - proc_open() örneği
<?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";
}
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
Array ( [bir_seçenek] => aeiou [PWD] => /tmp [SHLVL] => 1 [_] => /usr/local/bin/php ) komut 0 değerini döndürdü
Bilginize: Windows uyumluluğu
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.
Bilginize:
Eğer ihtiyacınız tek yönlü bir boru ise kullanımı daha kolay olan popen() işlevini kullanın.