Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php passthru()、system()或exec()冒泡的异常_Php_Exception_Exec_Try Catch - Fatal编程技术网

Php passthru()、system()或exec()冒泡的异常

Php passthru()、system()或exec()冒泡的异常,php,exception,exec,try-catch,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("ph

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

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() );
   }
?>
<?php

   // Throw an exception
   throw new Exception();       

?>

test2.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() );
   }
?>
<?php

   // Throw an exception
   throw new Exception();       

?>


我知道它可以包含在内,但对于我来说,我不能使用它。以这种方式执行脚本时,是否有方法捕获或“冒泡”异常

不,你能做的最好的事情就是阅读标准
php
只能输出文本。

就像@minitech所说的,你必须在
STDERR
上收听

当您通过
system()
access命令调用PHP脚本时,它将作为单独的进程运行,而您的调用脚本无权访问该进程

如果您想这样做,您可以查看扩展


如果没有,则必须测试来自
system()
调用的响应,而不是试图捕获
异常。我得调查一下。我觉得我应该能够在自己的内存范围内执行脚本并捕获任何异常,然后在任何其他处理之前执行结束/内存清理。有些事告诉我,我把事情弄得比实际情况更复杂了。记住上下文。运行
shell\u exec
system()
等时。。当您发出命令时,它将退出PHP上下文。为什么不仅仅是
包含
/
需要
并从您的脚本执行,而不是进行系统调用?因为我正在为我正在创建的文件迭代文件,它可能包括100个甚至1000个文件,这些文件会占用内存,直到崩溃。正在寻找替代方案来执行脚本并捕获其异常,然后从内存中清除它。但是如何在STDERR上侦听呢?