はじめに
Macにインストール
PHP開発環境 を簡単構築(MAC版)簡単な方法でできる手順を詳しく解説
VisualStudioCode で編集
場所は/Applications/XAMPP/xamppfiles/htdocs
ファイル出力はerror_log関数
- index.php
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の設定を変える
ファイルに追加記録
- 上記ではエラーログとしてファイル記録していました
- 今回は、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
最後に
ここまでご覧いただき、ありがとうございました。もし誤りがあれば、ご指摘いただけますと幸いです