PHP RRD日期输入为命令

时间:2014-05-05 10:59:13

标签: php datetime rrdtool rrd

我一直试图通过PHP生成RRD图。到目前为止,除了我想要拥有最后更新日期/时间的最后一行之外,它还能正常工作。我一直在网上搜索,但我无法找到相关信息。我发现一个用Bash RRDTool GPRINT formatting with printf编写的脚本与我想要生成的脚本很接近,但解决方案无法应用于我的问题。 PHP生成日期的代码示例如下:

date_default_timezone_set('Europe/Stockholm');
$timezone = new DateTime(NULL, new DateTimeZone('Europe/Stockholm'));
$date = date('l jS \of F Y h:i:s A' , $timezone->format('U'));

echo的输出是:

Monday 5th of May 2014 12:40:14 PM

在我的图表的最后,我试图将其作为注释导入图表,代码示例:

"COMMENT: RRD last updated: ".$date."\\n",

我得到的错误:

<b>Graph error: </b>I don't understand ': Monday 5th of May 2014 12:43:17 PM\n'
in command: 'COMMENT: RRD last updated: Monday 5th of May 2014 12:43:17 PM\n'.

我尝试在字符\上应用:(反斜杠),错误按预期传输:

<b>Graph error: </b>I don't understand ':45:31 PM\n' in command: 'COMMENT: RRD
last updated\: Monday 5th of May 2014 12:45:31 PM\n'.

我尝试在日期语法上应用相同的解决方案:

$date = date('l jS \of F Y h\:i\:s A' , $timezone->format('U'));

但输出错误仍然相同:

<b>Graph error: </b>I don't understand ':47:48 PM\n' in command: 'COMMENT: RRD
last updated\: Monday 5th of May 2014 12:47:48 PM\n'.

我还尝试在COMMENT

中导入日期语法
"COMMENT: Graph last updated\: date('l jS \of F Y h\:i\:s A' ,
$timezone->format('U'))\\n"

我得到的错误:

PHP Notice:  Undefined property: DateTime::$format

此时我的想法和可能的解决方案已经用完了。我想知道是否有其他人有类似的问题或可能的想法如何解决这个问题。我在Perl中创建了一个代码示例做同样的事情,默认情况下Perl在底部打印日期。所以应该离开它。

提前感谢您花时间和精力帮助解决我的问题。

1 个答案:

答案 0 :(得分:0)

有必要逃避COMMENT指令中的所有冒号,否则就会收到错误,正如您所经历的那样。

所以,如果你想要这个评论,你需要将它们全部转义。对str_replace的调用可以处理:

$date = date('l jS \of F Y h:i:s A' , $timezone->format('U'));
$comment = "RRD last updated: ".$date;
$comment = str_replace( ":", "\\:", $comment );
$result = rrd_graph($rrdfile,  array(
.... things go in here ....
  "COMMENT:".$comment."\\n";
));

当然,您总是可以在date命令中执行此操作,记住您需要转义转义符,但在这种情况下,您需要确保不存在其他冒号:

$date = date('l jS \of F Y h\\:i\\:s A' , $timezone->format('U'));
$comment = "RRD last updated \\:".$date."\\n";