使用passthru(),system()或exec()冒泡的异常

时间:2012-08-03 16:58:16

标签: php exception exec try-catch

在我自己的测试中,我无法使用类似系统的命令冒泡异常。只是好奇是否有办法让这种情况发生?

test1.php:

<?php

   try {

      // None of these (which throw an exception)
      // allow exception to be caught here
      passthru("php -f test2.php");
      system("php -f test2.php");
      exec("php -f test2.php");

   } catch (Exception $e) {
      echo( "Caught exception: " . $e->getMessage() );
   }
?>

test2.php:

<?php

   // Throw an exception
   throw new Exception();       

?>

我知道它可以通过include来捕获,但对于my purposes,我不能使用它。有没有办法在执行脚本时捕获或“冒泡”异常?

2 个答案:

答案 0 :(得分:2)

就像@minitech说的那样,你必须听STDERR

当您通过system()访问命令调用PHP脚本时,它会将它们作为一个单独的进程运行,您的调用脚本无法访问它。

如果您想这样做,您可以查看POSIX扩展程序。

如果没有,您必须测试system()来电的响应,而不是试图抓住Exception

答案 1 :(得分:1)

不,你能做的最好就是阅读STDERR。 php只能输出文字。