2010-06-23 4 views
13
ben php belirli yürütülebilir dosyaları çalıştırmak için exec fonksiyonu kullanıyorum

yakalama. php: Komut çıktısını

exec ($file , $output , $return_value ) ; 

ben dönüş değerleri kontrol ederek ikinci argüman yılında çıktı almak mümkün, Yani başarıyla yürütüldü verilen dosya, o ince çalışıyorken. Komut yürütme nedense nedeniyle başarısız oluyor Ama benim gereksinimdir. Yürütülen programın hata mesajını almam gerekiyor. Hatayı almak için ne yapmam gerekiyor. ikinci argüman ile sadece başarılı çıktıyı alabiliriz. Hata mesajı değil.

Teşekkürler.

cevap

32

İkinci argüman $output yalnızca yürütülebilir STDOUT yakalar. kolayca bir hata günlüğü veya benzeri yazılabilir böylece hata mesajları genellikle STDERR gönderilir, ama bu exec çağırdığınızda onları görmek anlamına gelir.

Eğer bu bir linux sistemiyse, STDERR'u STDOUT'a yeniden yönlendirmek için komutunuza 2>&1 ekleyebilirsin. Bunu denemedim ama bu senin $ çıkış değişkenine hata iletileri yönlendirmek gerekir.

Düzenleme:

Ben www.php.net/exec üzerinde o kadar okumak ettik ve bu işe yarar gibi görünüyor.

exec($file.' 2>&1', $outputAndErrors, $return_value); 

Ayrıca hataları geçici bir dosyaya yeniden yönlendirmek ve bunları ayrı ayrı okumak da mümkündür.

exec($file.' 2> '.$tmpFile, $outputOnly, $return_value); 

Düzenleme 2

Ayrıca pencereler görünüyor sözdizimi yönlendirme bu Bourne tarzı çıkışı kullanır, böylece örnekler de pencereler için çalışmalıdır. Eğer stderr'yi tutmak gerekir ve ayrı stdout'a Eğer

More on input and output streams

0

$return_value yeterince anlamlı olmalıdır programı tarafından döndürülen hata kodu olacak, ben daha iyi olabilir sanmıyorum.