温湿度と大気圧をWebサーバで受信

はじめに

Macにインストール

PHP開発環境 を簡単構築(MAC版)簡単な方法でできる手順を詳しく解説

VisualStudioCode で編集

場所は/Applications/XAMPP/xamppfiles/htdocs

ファイル出力はerror_log関数

bool error_log (string $message[, int $message_type = 0[, string $destination
     [, string $extra_headers ]]] )
  • パラメーター(引数)
第一引数:$message - 記録するエラーメッセージを指定します
第二引数:$message_type - メッセージのタイプを指定します
第三引数:$destination - メッセージの送信先を指定します
第四引数:$extra_headers - 追加のヘッダ(メッセージタイプが1の場合のみ)を指定します
  • メッセージタイプの種類(第2引数)
メッセージタイプ 詳細
0 php.iniファイルの「error_log =」で指定したファイルに出力する。
1 第3引数で指定したメールアドレスにメールが送信されます。
2 ※このオプションは使用不可
3 第3引数で指定したファイル名にエラーメッセージが追加されます。また、エラーメッセージの最後に改行が追加されません。
4 エラーメッセージをSAPIログ出力ハンドラに送信します。

PHP 時刻を日本時間に合わせる

  • コードをそのまま書いて設定
   date_default_timezone_set('Asia/Tokyo'); //日本のタイムゾーンに設定
   print(date('G時 i分 s秒')); //Gは時(24時間単位)、iは分、sは秒
   > 12時 15分 3秒 //出力(日本時間になっている。)
  • php.iniの設定を変える

    • 設定ファイルphp.iniの場所は/Applications/XAMPP/xamppfiles/etc
    • php.iniファイルを開き、date.timezone = "Asia/Tokyo"を設定
    • XAMPPを再起動して設定を反映

ファイルに追加記録

  • 上記ではエラーログとしてファイル記録していました
  • 今回は、1つのファイルに追加(アペンド)していきます
     // ファイルを開く
    $csvFileName = sprintf("%s/xiao.csv", $SAVE_DIR);
    $fp_a = fopen($csvFileName, 'a+');
    if ($fp_a === FALSE) {
        throw new Exception('ファイルの書き込みに失敗しました。');
    }

    // 読み書きファイルに書き込み
     if(fwrite($fp_a, $str) === false){
            throw new Exception("書き込みに失敗しました");
        }

fopen

$変数名(ファイルポインタ) = fopen (“開きたいファイル名”, “オープンモード”);
  • 書き込み専用でファイルをオープン

    • 既存する内容に追記したい場合は、ファイルポインタが終端にある“a”や“a+”を指定しないと、上書きされてしまうので注意が必要です。

      オープンモード ファイルがない場合 ファイルポインタ 書き用 読み用
      w エラーが出る 先頭 0
      w+ 新規作成する 先頭 0 0
      x エラーが出る 先頭 0
      x+ エラーが出る 先頭 0 0
      c 新規作成する 先頭 0
      c+ 新規作成する 先頭 0 0
      a 新規作成する 末尾 0
      a+ 新規作成する 末尾 0 0
      r エラーが出る 先頭 0
      r+ エラーが出る 先頭 0 0

ソースコード

<?php
// 設定
// $SAVE_DIR = "/path/to/savedir";   // 保存先ディレクトリ(パーミッションの変更を忘れずに)
$SAVE_DIR = "/Applications/XAMPP/xamppfiles/htdocs/to/savedir";   // 保存先ディレクトリ(パーミッションの変更を忘れずに)
$PREFIX = "xiao"; // プレフィックス

// 引数を取り込み
$text = file_get_contents("php://input");
$json = json_decode($text, true);
if (!is_numeric($json['count'] ?? null) || !is_array($json['data'] ?? null)) {
    header("HTTP/1.1 400 Bad Request");
    exit;
}

// ファイルに保存
$update = 0;
if (count($json['data']) > 0) {
    foreach ($json['data'] as $dd) {
        date_default_timezone_set('Asia/Tokyo'); //日本のタイムゾーンに設定
        $time = date('Y-m-d_H:i:s', time());
        if (!is_numeric($dd['id'] ?? null)) continue;
        $seq_path = sprintf("%s/%s_%d.seq", $SAVE_DIR, $time, $PREFIX, $dd['id']);
        $csv_path = sprintf("%s/%s_%s_%d.csv", $SAVE_DIR, $time, $PREFIX, $dd['id']);
        $allcsv_path = sprintf("%s/%s_%s_all.csv",$SAVE_DIR, $time, $PREFIX);
        $last_seq = (file_exists($seq_path)) ? file_get_contents($seq_path) : -1;
        if ($dd['seq'] != $last_seq) {
            $csv = [
                date("Y-m-d H:i:s"),
                $dd['id'],
                $dd['pres'],
                $dd['volt'],
                $dd['temp'],
                $dd['humi'],
                $dd['rssi'],
                $dd['seq'],
            ];
            $str = join(",",$csv)."\n";
            // エラーログでの下記だし
            // error_log($str, 3, $csv_path);
            // error_log($str, 3, $allcsv_path);
            // file_put_contents($seq_path, $dd['seq']);
            $update ++;
        }
    }
    
    //ファイル オープン
    $csvFileName = sprintf("%s/xiao.csv", $SAVE_DIR);
    $fp_a = fopen($csvFileName, 'a+');
    if ($fp_a === FALSE) {
        throw new Exception('ファイルの書き込みに失敗しました。');
    }
    // 読み書きファイルに書き込み
     if(fwrite($fp_a, $str) === false){
        throw new Exception("書き込みに失敗しました");
    }
    // ファイルを閉じる
    fclose($fp_a);
}
// 終了
$json = [ 'update'=> $update ];
header("Content-Type: application/json; charset=utf-8");
echo json_encode($json);
exit;
?>

記録ファイル

{"data":[{"id":101,"pres":1000.1,"volt":39.4,"temp":15.2,"humi":83.8,"rssi":-65,"seq":1}],"count":1}
  • php受信フォーマット
$csv = [ date("Y-m-d H:i:s"), $dd['id'], $dd['pres'], $dd['volt'], $dd['temp'], $dd['humi'], $dd['rssi'], $dd['seq'],];
  • 保管データ
2025-04-13 10:34:38,101,1007.5,39.4,14.6,87.9,-61,1
2025-04-13 11:04:47,101,1006.9,39.4,14.9,87.7,-58,1
2025-04-13 11:34:56,101,1006,39.4,14.9,87.7,-59,1
2025-04-13 12:05:05,101,1005.7,39.4,14.7,87.8,-62,1
2025-04-13 12:35:13,101,1005.8,39.4,14.7,88.1,-62,1
2025-04-13 13:05:22,101,1004.2,39.4,14.6,87.7,-59,1
2025-04-13 13:35:31,101,1004.8,39.4,14.5,87,-62,1
2025-04-13 14:05:40,101,1002.6,39.5,14.4,87.8,-61,1
2025-04-13 14:35:49,101,1002.2,39.6,14.9,87.6,-63,1
2025-04-13 15:05:58,101,1001.4,39.5,15.4,85.5,-73,1
2025-04-13 15:36:06,101,1001.4,39.4,15.4,84.5,-58,1
2025-04-13 16:36:24,101,1001.2,39.4,15.5,84.6,-58,1
2025-04-13 17:06:33,101,1000,39.4,15.5,84.7,-69,1
2025-04-13 17:36:42,101,999.7,39.4,15.3,84.4,-69,1
2025-04-13 18:06:51,101,1000,39.4,15.2,83.9,-61,1
2025-04-13 18:37:00,101,1000.1,39.4,15.2,83.8,-65,1

最後に

ここまでご覧いただき、ありがとうございました。もし誤りがあれば、ご指摘いただけますと幸いです

プライバシーポリシー |ページトップへ

`