proc_open

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

proc_openBir komutu çalıştırır ve G/Ç için bir dosya tanıtıcı açar

Açıklama

proc_open ( string $komut , array $tanıtıcılar , array &$borular [, string $dizin [, array $ortam [, array $seçenekler ]]] ) : resource

proc_open() işlevi, program çalıştırma konusunda daha geniş denetim imkanı sağlaması dışında popen() gibidir.

Değiştirgeler

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:

  • 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: pipe (ikinci eleman sürece okuma ucunu aktaran r veya yazma ucunu aktaran w olabilir) ve file (ikinci eleman bir dosya ismidir).
  • Gerçek bir dosya tanıtıcısına karşılık gelen bir akım özkaynağı (örneğin, 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:

  • suppress_errors (sadece windows): Değer olarak TRUE belirtilirse bu işlev tarafından üretilen hatalar baskılanır.
  • bypass_shell (sadece windows): Değer olarak TRUE belirtilirse cmd.exe kabuğu es geçilir.
  • context: Dosyaları açarken kullanılan (stream_context_create() ile oluşturulmuş) akım bağlamı
  • binary_pipes: Borular, normal olarak stream_encoding() ile değil ikil kipte açılır.

Dönen Değerler

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 Bilgisi

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.

Örnekler

Örnek 1 - proc_open() örneği

<?php
$tanıtıcılar 
= array(
   
=> array("pipe""r"),  // stdin, alt sürecin okuyacağı borudur
   
=> array("pipe""w"),  // stdout, alt sürecin yazacağı borudur
   
=> 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ü

Notlar

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.

Ayrıca Bakınız

  • popen() - Bir süreç tanıtıcısı açar
  • exec() - Bir komut çalıştırır
  • system() - Belirtilen harici komutu çalıştırır ve çıktısını gösterir
  • passthru() - Harici bir programı çalıştırır ve çıktısını ham olarak gösterir
  • stream_select() - Belirtilen akım dizisi üzerinde belirtilen zaman aşımı ile select() sistem çağrısının eşdeğeri olarak çalışır
  • Çalıştırma İşleci