Nazikçe DOS komut Hata İşleme

2 Cevap php

Windows 2003 üzerinde PHP 5.2.13

Ben PHP popen () işlevini kullanarak bir arka plan uygulamayı başlatmak için DOS Başla / B komutu kullanıyorum:

popen("start /B {$_SERVER['HOMEPATH']}/{$app}.exe > {$_SERVER['HOMEPATH']}/bg_output.log 2>&1 & echo $!", 'r');

Popen () fonksiyonu belirtilen komutu çalıştırır bir cmd.exe süreci başlattı; komutu başarısız olursa, ancak (örneğin {$ app}. exe yok veya yukarıdaki örnekte kilitli), cmd.exe süreç asla döndürür, ve PHP bir sonucu olarak süresiz kapatır.

Doğrudan OK butonuna tıklayarak gerektiren bir hata isteminde Komut İstemi sonuçlarını kullanarak başarısız DOS komut çağırıyor.

Ben bu hata onay gereksinimi (Apache 2.2 w / Apache 2.0 işleyicisi kullanarak) (CGI hem de CLI kullanarak) Komut İstemi ve web hem PHP dönen cmd.exe sürecini engelleyen ne olduğunu varsayalım.

DOS komut yazmak ya da daha doğrusu onay için bekleyen daha kaynak çağrı DOS hata dönmek için sunucu veya cmd.exe uygulamasını kendisini yapılandırmak için bir yolu var mı?

2 Cevap

Manuel: http://php.net/manual/en/function.popen.php

If the command to be executed could not be found, a valid resource is returned. This may seem odd, but makes sense; it allows you to access any error message returned by the shell:

error_reporting(E_ALL);

/* Add redirection so we can get stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);

Eğer cmd.exe /c ... yerine denedim start /b?