0

PHPでRRDグラフを作成しようとしています。これまでのところ、最終更新日時を取得したい最後の行を除いて正常に動作します。オンラインで検索しましたが、問題に関連する情報が見つかりません。Bash RRDTool GPRINT 形式で記述された、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'));

エコーを使用した出力は次のとおりです。

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 は下部に日付を出力します。だから、それを行うには離れている必要があります。

私の問題を解決するために時間と労力を割いていただき、ありがとうございます。

4

1 に答える 1

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";
于 2014-05-06T05:54:54.063 に答える