出现错误时关闭PHP CLI控制台


PHP CLI console closing on error

我正在运行一个循环,该循环在循环结束后使用proc_open执行相同的应用程序,如下所示:

$description = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "proc_open_errors", "a+")
);
$command = "start /min php $operador_php";
$process = proc_open($command, $description, $pipe);
if (is_resource($process)) {
    print_r($process);
    sleep(5);
    fclose($pipe[0]);
    fclose($pipe[1]);
    $process_response = proc_close($process);
    echo $process_response;
}

我面临的问题是,运行几个小时后,其中一个执行可能会在中间失败,从而打破整个循环。它关闭了自己(在Windows上),所以我看不出问题是什么

有什么方法可以防止PHP CLI在出现问题时自行关闭吗?还是应该使用"if/else"序列来检查执行过程中是否存在任何问题?还有其他想法吗?

您有选择,但这取决于您执行它的方式。

一个选项是在php脚本中配置错误处理。至少您可以捕获一般异常并在失败之前将其记录下来。更好的是,在许多情况下,您可能能够从错误中恢复。不管怎样,http://php.net/manual/en/language.exceptions.php可能是一本有趣的读物。

一个更简单的方法,也许也是一个很好的起点,是将脚本的输出重定向到另一个文件中。将Windows cmd stdout和stderr重定向到单个文件显示了一个简单的调用-在unix中也是如此。这样,窗口仍然会消失,但您可以单独查看日志。在任何操作系统中执行无人参与脚本时,这绝对是一种最佳做法。只要确保合理地处理输出文件大小(如果php脚本将永远运行,则必须采取更巧妙的措施来防止日志填满硬盘驱动器)。

最后,如果您从命令行手动调用php脚本,我不认为脚本退出时命令行会退出,但我想如果它退出了,我不会感到震惊(而不是让windows自动神奇地启动进程的shell,然后在完成后自动神奇地关闭它)。

这是我在SO上找到的另一个解决方案:

ini_set("log_errors", 1);
ini_set("error_log", "/php_error.log");
error_log( "Hello, errors!" );

我建议将代码放在PHP文件的开头。我想澄清一下,如果你正在与其他服务器交互,并且响应不总是一样,这是特别有用的,所以这样,如果凌晨3点出现任何异常,它将保存在第2行定义的文件中。