问题描述
如果我离开 CLI,我有一个 php 脚本,用于在页面上显示我的 php 错误日志。对于日志文件,我有主要的活动日志文件 (php_errors.log) 和 php_errors_prev.log,它每晚都会被 cron 截断,而 php_errors_prev.log 在截断活动日志文件之前每晚都会复制,以防我需要参考前一天的内容。
脚本构建了一个变量 ($exec),它根据 $_GET 变量是否存在来设置文件以运行“tail”,以指示主文件或 _prev 文件。如果我选择使用 tail 查看主文件,但如果选择查看 _prev 文件,tail 以值 1 退出并且不提供任何输出,则该脚本可以正常工作。我有脚本还输出 php exec() 调用使用的 $exec 变量,如果我只是在 CLI 中复制并粘贴计算的命令,两者都运行得很好,_prev 文件返回与主文件相同的请求行。所以我在php脚本中看不到任何错误。
tail 手册页没有列出退出代码,而且我找不到详细说明这些代码的参考,所以我不知道 exec() 调用“tail”的返回值 1 的具体含义是什么.我看过很多关于 exec() 返回 1 的帖子,但没有一个是特定于 tail 的。任何澄清表示赞赏。
正如这里建议的代码
<?php
$lines = ((!isset($_GET['l']))?100:intval($_GET['l']));
$prev = ((!isset($_GET['p']) || $_GET['p']!='1')?'':'_prev');
$logfile = "/var/log/php_errors$prev.log";
$exec = "tail -$lines $logfile";
$log = array();
exec($exec,$log,$retval);
$log = array_reverse($log,true);
//if the output of the following debugging line is copied and pasted into the CLI on the same server it runs as expected regardless of the $_GET values
echo "$exec\n(retval: $retval)\n";
?>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="format-detection" content="telephone=no" />
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<h3 class='text-center'>PHP Error<?php echo $prev; ?> Log</h3>
<div class='container'>
<ul class='list-group'>
<?php
foreach($log as $key => $val){
if($val!=""){
echo "<li class='list-group-item'>$key: $val</li>";
}
}
?>
</ul>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)