無題 名前: Lavie [2021/07/25,18:49:25] No.737
takaqさん、はじめまして。
Windowsで稼動時間を表示したく、彷徨っておりましたらたどり着きました。
唐突ですが、質問させてください。
uptime.exeのサンプルでは、「稼動時間 : 0日 0時間 2分 5秒」というふうにちゃんと表示されるのですが、
net statistics server コマンド、net statistics workstation コマンドでは、「稼動時間 : 18833 日, 9 時間, 47 分, 9 秒」と表示されてしまいます。
OSは、Windows Server2016 Standardです。この前一度だけWindowsUPDATEを行っています。
修正箇所等ございましたら、教えていただけたら幸いです。よろしくお願いいたします。
>> 外しているかもしれませんが・・・ 名前: takaq [2021/07/25,21:06:25] No.738
Lavieさん、訪問と投稿ありがとうございます。
とてもうれしく思います。
質問の件ですが、Windows Server からかなり遠ざかってしまっているので、実環境が無く的確な回答でないことご容赦ください。
外しているかもしれませんが、以下記載いたします。

・まずは、コマンドプロンプトで「net statistics server」または「net statistics workstation」を実行します。
そして、"統計情報の開始日時"が正しい時間表示されているかを確認します。
この値が不正ですと稼働時間はとれません。
・"統計情報の開始日時"が正しい時間表示である場合、今度は稼動時間を表示する PHPスクリプトで値が取得できているかを確認します。

$winstats = shell_exec("net statistics server");
の次あたりに echo $winstats; としてスクリプト実行してみます。

前記が希望どおり取得できている時は、取得値から稼働時間を各変数に入れ表示内容を生成する部分の値を echo でスクリプト実行し確認します。

例えば

preg_match("(\d{4}/\d{1,2}/\d{1,2}\s+\d{1,2}\:\d{2})", $winstats, $matches);
の後ろあたりに echo $matches;

if (days > 0) {
uptimeString += days;
uptimeString += ((days == 1) ? " 日" : " 日");
}
if (hours > 0) {
uptimeString += ((days > 0) ? ", " : "") + hours;
uptimeString += ((hours == 1) ? " 時間" : " 時間");
}
if (mins > 0) {
uptimeString += ((days > 0 || hours > 0) ? ", " : "") + mins;
uptimeString += ((mins == 1) ? " 分" : " 分");
}
if (secs > 0) {
uptimeString += ((days > 0 || hours > 0 || mins > 0) ? ", " : "") + secs;
uptimeString += ((secs == 1) ? " 秒" : " 秒");
}
の後ろあたりに echo $uptimeString;

等々一つずつ見ていきます。

  こんな感じで修正箇所を自身で見つけていくしかないと思います。
>> 無題 名前: Lavie [2021/07/26,20:45:55] No.739
akaqさん、早速のご回答ありがとうございます。
まさか、こんなに早く連絡があるとは...大変うれしい限りです。^^

統計情報の開始日時ですが、「net statistics workstation」を実行すると、
「統計情報の開始日時 2021/07/26 19:49:14」と表示されましたので、正常でした。

$winstats = shell_exec("net statistics server");
の次あたりに echo $winstats; としてスクリプト実行してみます。ですが、何も表示されません。
preg_match("(\d{4}/\d{1,2}/\d{1,2}\s+\d{1,2}\:\d{2})", $winstats, $matches);
の後ろあたりに echo $matches;ですが、Arrayと表示されます。
当然ながら、「echo $uptimeString;」も何も表示されません。

どうやら、「shell_exec」がちゃんと動作していないと思いますので、設定を再度確認してみます。
また、ご報告させていただきます。
ありがとうございました。
>> うまく解決できることを祈念しております。 名前: takaq [2021/07/26,23:31:07] No.740
Lavieさん、さっそくのご連絡ありがとうございます。

ネット検索してみますと「shell_exec」について色々ヒットしますね。
サーバーOSや実装しているWebサーバーソフト、php 等々の設定、サーバー機上の実行権限とか色々あって大変ですが頑張ってみてください。
Webサーバーソフトのログやphpをデバックモードにしてエラー表示させたりとかも参考になると思います。
うまく解決できることを祈念しております。
>> 少しだけ、エラー?! 名前: Lavie [2022/02/14,20:49:04] No.749
takaqさん、ご無沙汰しております。

何とか合間をぬって、色々と設定を見直しておりました。
やっとこさ、稼動時間が表示されるようになりましたが、

Notice: Undefined variable: uptimeString in D:\htdocs\uptime.php on line 15
稼動時間 : 2 時間, 9 分, 50 秒

と表示されます。もちろん時間はカウントアップしています。

またまた、手助けしていただけたら幸いです。よろしくお願いいたします。
>> 「Undefined variable」は変数に値がないですよというエラーのようです。 名前: takaq [2022/02/14,23:20:00] No.750
Lavieさん 投稿ありがとうございます。

「Undefined variable」は変数に値がないですよというエラーのようです。
uptime.phpの15行目にヒント有です。

Googleで「undefined variable php」とかで検索すると色々ヒットします。
これらを参考に一つずつ対処していかれることをお勧めします。

実行に影響がなければPHPのエラーを表示しないようにすることも手ですね。
検索したページの受け売りです♪
>> 無題 名前: Lavie [2022/02/15,19:58:00] No.752
akaqさん、またまた、早速のご回答ありがとうございます。

了解です。ググって対応策を考えてみます。
>> これで正解なのか?! 名前: Lavie [2022/02/15,22:29:44] No.753
takaqさん、こんばんわ。
下記の行を追記したら、一応ちゃんと表示され始めました。
この方法が正解なのかどうか、分かりませんが、どうでしょうか?

error_reporting(E_ALL & ~E_NOTICE);
>> 素晴らしい 名前: takaq [2022/02/15,22:49:02] No.754
Lavieさん、投稿ありがとうございます。

エラー表示レベルの設定で「E_NOTICE(注意メッセージ)以外の全てのエラーを表示する。」ですね。
エラー表示レベルの表記は条件色々あるみたいですが、うまく動作しているのであればこれで良いと思います。
さすがです。よかったです。
>> 無題 名前: Lavie [2022/02/16,23:39:18] No.755
takaqさん、こんばんわ。

早速の答え、ありがとうございます
これからも頑張ります。


[返信しないで戻る]