Nasıl php ve yakalama hata mesajları içinde perl çalıştırmak için?

4 Cevap php

Ben şöyle bir Perl komut dosyası çalıştırmak için çalışıyorum:

/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2'

Perl komut başarısız zaman 'kalıp' kullanarak çıkar ve bir hata mesajı yazdırır. Elle çalıştırırken ben bu hata iletisini görebilirsiniz, ama ben PHP ile onu yakalamak için başarısız duyuyorum.

Ben hiçbir başarı ile aşağıdaki çalıştı:

exec($command,$output);
echo system($command,$output);
passthru($command);

Herhangi bir fikir?

4 Cevap

Eğer deneyebilirsiniz:

$command = "/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2' > /tmp/exec.out 2>&1"
exec($command)
echo file_get_contents('/tmp/exec.out');

'> / Tmp / exec.out 2> & 1' tmp / exec.out / tüm çıktıyı yönlendirir, daha sonra PHP echo geri dosya.

PHP backticks yok mu?

$output = `$command 2> /tmp/command.err`;
if (looks_like_command_failed($output)) {
    $error_message = file_get_contents('/tmp/command.err');
}

system() fonksiyonu için belgelerinde verilen ilk örnek bu çıkışı php tarafından alınmadığı durumlarda işe yarayabilir bahseder. Örnek bir geçici dosya kullanmadan, stdout stderr ayrı alır. Sistemi () olmadığında bu yöntem başarılı olacağını neden afiş açıklamıyor. Yani kök sorunu, ama belki bir çözüm için cevap yok.

Perl script onların mesajları stderr gidiyor ölmek, böylece stdout ne olduğunu görmek için hem de stderr yakalamak gerekir.