質問するログイン新規登録

回答編集履歴

5

調整

2025/07/31 00:29

投稿

yambejp
yambejp

スコア118037

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  header("Content-Type: text/event-stream");
9
9
  date_default_timezone_set("Asia/Tokyo");
10
10
 
11
- $logFile = '・・・;
11
+ $logFile = 'post.log'; // apacheのCustomLogを指定
12
12
  $command= 'tail -f -1 ' .$logFile;
13
13
 
14
14
  // winならpowershell

4

chousei

2025/07/30 09:01

投稿

yambejp
yambejp

スコア118037

answer CHANGED
@@ -37,4 +37,13 @@
37
37
  console.log(event.data );
38
38
  };
39
39
  </script>
40
- ```
40
+ ```
41
+
42
+ # httpd.confの設定
43
+
44
+ 「IfModule log_config_module」に以下追記してください
45
+ ```
46
+ SetEnvIf Request_Method POST post_request
47
+ CustomLog "logs/post.log" combined env=post_request
48
+ ```
49
+ 上記post.logをsse.phpで指定してやればpostされるたびにSSEでデータが飛んできます

3

調整

2025/07/30 08:30

投稿

yambejp
yambejp

スコア118037

answer CHANGED
@@ -9,10 +9,10 @@
9
9
  date_default_timezone_set("Asia/Tokyo");
10
10
 
11
11
  $logFile = '・・・;
12
- $command= 'tail -f ' .$logFile;
12
+ $command= 'tail -f -1 ' .$logFile;
13
13
 
14
14
  // winならpowershell
15
- //$command= 'powershell -Command "Get-Content ' .$logFile .' -wait"';
15
+ //$command= 'powershell -Command "Get-Content ' .$logFile .' -wait -Tail 1"';
16
16
 
17
17
  $handle = popen($command, 'r');
18
18
  if ($handle) {

2

ついき

2025/07/30 04:43

投稿

yambejp
yambejp

スコア118037

answer CHANGED
@@ -1,2 +1,40 @@
1
1
  httpd側でpostを受ける用のカスタムログファイルを作っておき
2
2
  「tail -f」で監視続ければよいのでは?
3
+
4
+ sse.php
5
+ ```php
6
+ <?PHP
7
+ header("Cache-Control: no-store");
8
+ header("Content-Type: text/event-stream");
9
+ date_default_timezone_set("Asia/Tokyo");
10
+
11
+ $logFile = '・・・;
12
+ $command= 'tail -f ' .$logFile;
13
+
14
+ // winならpowershell
15
+ //$command= 'powershell -Command "Get-Content ' .$logFile .' -wait"';
16
+
17
+ $handle = popen($command, 'r');
18
+ if ($handle) {
19
+ while (!feof($handle)) {
20
+ $buffer = fgets($handle);
21
+ if ($buffer === false) break;
22
+ $t=date("Y-m-d H:i:s");
23
+ print "data:".json_encode(["message"=>htmlspecialchars($buffer, ENT_QUOTES, 'UTF-8'),"time"=>$t]).PHP_EOL.PHP_EOL;
24
+ if ( connection_aborted() ) break;
25
+ ob_flush();
26
+ flush();
27
+ }
28
+ pclose($handle);
29
+ }
30
+ ```
31
+
32
+ ブラウザ側の処理
33
+ ```javascript
34
+ <script>
35
+ const evtSource = new EventSource("sse.php");
36
+ evtSource.onmessage = function (event) {
37
+ console.log(event.data );
38
+ };
39
+ </script>
40
+ ```

1

typo

2025/07/30 04:17

投稿

yambejp
yambejp

スコア118037

answer CHANGED
@@ -1,2 +1,2 @@
1
- httpd側でpostを受けたとき用のカスタムログファイルを作っておき
1
+ httpd側でpostを受け用のカスタムログファイルを作っておき
2
- 「tail -f」で関し続ければよいのでは?
2
+ 「tail -f」で監視続ければよいのでは?