TCRB und Datenbank umgebaut für Imort Runs
This commit is contained in:
@@ -205,3 +205,285 @@ Stack trace:
|
||||
[Sat Apr 4 19:33:39 2026] 127.0.0.1:51368 Accepted
|
||||
[Sat Apr 4 19:33:40 2026] 127.0.0.1:51368 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:33:40 2026] 127.0.0.1:51368 Closing
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 Accepted
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 [302]: GET /settings.php
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 Closing
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 Accepted
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 [200]: GET /login.php
|
||||
[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 Closing
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 Accepted
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 [302]: GET /settings.php
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 Closing
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 Accepted
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 [200]: GET /login.php
|
||||
[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 Closing
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 Accepted
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 [200]: GET /my_favorites.php
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 Closing
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 Accepted
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 [200]: GET /css/style.css
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 Closing
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 Accepted
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 Accepted
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 Closing
|
||||
[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 Closing
|
||||
[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 Accepted
|
||||
[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 Closing
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 Accepted
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 [200]: GET /settings.php
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 Closing
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 Accepted
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 [200]: GET /css/style.css
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 Closing
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 Accepted
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 Accepted
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 Closing
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 Closing
|
||||
[Sat Apr 4 19:43:10 2026] 127.0.0.1:54239 Accepted
|
||||
[Sat Apr 4 19:43:11 2026] 127.0.0.1:54239 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:43:11 2026] 127.0.0.1:54239 Closing
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 Accepted
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 [200]: GET /settings.php
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 Closing
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 Accepted
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 [200]: GET /css/style.css
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 Closing
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 Accepted
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 Accepted
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 Closing
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 Closing
|
||||
[Sat Apr 4 19:48:27 2026] 127.0.0.1:64157 Accepted
|
||||
[Sat Apr 4 19:48:28 2026] 127.0.0.1:64157 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:48:28 2026] 127.0.0.1:64157 Closing
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 Accepted
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 [200]: POST /settings.php
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 Closing
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 Accepted
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 [200]: GET /css/style.css
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 Closing
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 Accepted
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 Accepted
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 Closing
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 Closing
|
||||
[Sat Apr 4 19:48:36 2026] 127.0.0.1:62820 Accepted
|
||||
[Sat Apr 4 19:48:37 2026] 127.0.0.1:62820 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:48:37 2026] 127.0.0.1:62820 Closing
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 Accepted
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 [200]: GET /telegram/connect.php
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 Closing
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 Accepted
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 [200]: GET /css/style.css
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 Closing
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 Accepted
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 Accepted
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 Closing
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 Closing
|
||||
[Sat Apr 4 19:48:45 2026] 127.0.0.1:64543 Accepted
|
||||
[Sat Apr 4 19:48:46 2026] 127.0.0.1:64543 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 19:48:46 2026] 127.0.0.1:64543 Closing
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 Accepted
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 [302]: GET /telegram/connect.php
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 Closing
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 Accepted
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 [200]: GET /login.php
|
||||
[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 Closing
|
||||
[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 Accepted
|
||||
[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 [302]: GET /telegram/connect.php
|
||||
[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 Closing
|
||||
[Sat Apr 4 19:56:56 2026] 127.0.0.1:49501 Accepted
|
||||
[Sat Apr 4 19:56:57 2026] 127.0.0.1:49501 [200]: GET /login.php
|
||||
[Sat Apr 4 19:56:57 2026] 127.0.0.1:49501 Closing
|
||||
[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 Accepted
|
||||
[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 [302]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 Closing
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 Accepted
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 [200]: GET /admin_users.php
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 Closing
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 Accepted
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 Closing
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 Accepted
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 Accepted
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 Closing
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 Closing
|
||||
[Sat Apr 4 20:10:45 2026] 127.0.0.1:60043 Accepted
|
||||
[Sat Apr 4 20:10:46 2026] 127.0.0.1:60043 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:10:46 2026] 127.0.0.1:60043 Closing
|
||||
[Sat Apr 4 20:10:48 2026] 127.0.0.1:49369 Accepted
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:49369 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:49369 Closing
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 Accepted
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 Closing
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 Accepted
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 Closing
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 Accepted
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 Closing
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 Accepted
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 Closing
|
||||
[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 Accepted
|
||||
[Sat Apr 4 20:10:56 2026] PHP Fatal error: Uncaught Error: Call to undefined function mb_strlen() in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php:225
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 225
|
||||
[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 [200]: POST /telegram/broadcast_test.php - Uncaught Error: Call to undefined function mb_strlen() in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php:225
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 225
|
||||
[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 Closing
|
||||
[Sat Apr 4 20:10:56 2026] 127.0.0.1:60739 Accepted
|
||||
[Sat Apr 4 20:10:57 2026] 127.0.0.1:60739 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:10:57 2026] 127.0.0.1:60739 Closing
|
||||
[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 Accepted
|
||||
[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 Closing
|
||||
[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 Accepted
|
||||
[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 Closing
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 Accepted
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 Closing
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 Accepted
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 Closing
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 Accepted
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 Accepted
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 Closing
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 Closing
|
||||
[Sat Apr 4 20:11:44 2026] 127.0.0.1:64168 Accepted
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:64168 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:64168 Closing
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 Accepted
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 [200]: POST /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 Closing
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 Accepted
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 Closing
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 Accepted
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 Accepted
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 Closing
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 Closing
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 Accepted
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 Closing
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 Accepted
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 Closing
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 Accepted
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 Closing
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 Accepted
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 Accepted
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 Closing
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 Closing
|
||||
[Sat Apr 4 20:15:27 2026] 127.0.0.1:51829 Accepted
|
||||
[Sat Apr 4 20:15:28 2026] 127.0.0.1:51829 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:15:28 2026] 127.0.0.1:51829 Closing
|
||||
[Sat Apr 4 20:15:49 2026] 127.0.0.1:63140 Accepted
|
||||
[Sat Apr 4 20:15:49 2026] PHP Warning: Undefined variable $ErrorActionPreference in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 77
|
||||
= : Die Benennung "=" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausf�hrbaren
|
||||
Programms erkannt. šberpr�fen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
|
||||
wiederholen Sie den Vorgang.
|
||||
In Zeile:1 Zeichen:2
|
||||
+ = 'Stop'
|
||||
+ ~
|
||||
+ CategoryInfo : ObjectNotFound: (=:String) [], CommandNotFoundException
|
||||
+ FullyQualifiedErrorId : CommandNotFoundException
|
||||
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:63140 [200]: POST /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:63140 Closing
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 Accepted
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 Closing
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 Accepted
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 Accepted
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 Closing
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 Closing
|
||||
[Sat Apr 4 20:15:50 2026] 127.0.0.1:55764 Accepted
|
||||
[Sat Apr 4 20:15:51 2026] 127.0.0.1:55764 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:15:51 2026] 127.0.0.1:55764 Closing
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 Accepted
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 Closing
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 Accepted
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 Closing
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 Accepted
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 Accepted
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 Closing
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 Closing
|
||||
[Sat Apr 4 20:16:40 2026] 127.0.0.1:54376 Accepted
|
||||
[Sat Apr 4 20:16:41 2026] 127.0.0.1:54376 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:16:41 2026] 127.0.0.1:54376 Closing
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 Accepted
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 [200]: POST /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 Closing
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 Accepted
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 Closing
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 Accepted
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 Accepted
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 Closing
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 Closing
|
||||
[Sat Apr 4 20:16:49 2026] 127.0.0.1:63450 Accepted
|
||||
[Sat Apr 4 20:16:50 2026] 127.0.0.1:63450 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:16:50 2026] 127.0.0.1:63450 Closing
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 Accepted
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 [200]: GET /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 Closing
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 Accepted
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 Closing
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 Accepted
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 Accepted
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 Closing
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 Closing
|
||||
[Sat Apr 4 20:18:27 2026] 127.0.0.1:65020 Accepted
|
||||
[Sat Apr 4 20:18:28 2026] 127.0.0.1:65020 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:18:28 2026] 127.0.0.1:65020 Closing
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:57969 Accepted
|
||||
#< CLIXML
|
||||
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><Obj S="progress" RefId="0"><TN RefId="0"><T>System.Management.Automation.PSCustomObject</T><T>System.Object</T></TN><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Module werden f�r erstmalige Verwendung vorbereitet.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj></Objs>[Sat Apr 4 20:18:31 2026] 127.0.0.1:57969 [200]: POST /telegram/broadcast_test.php
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:57969 Closing
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:49876 Accepted
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:49876 [200]: GET /css/style.css
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:49876 Closing
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:64150 Accepted
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:64150 [200]: GET /images/star16x16.png
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:56561 Accepted
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:56561 [200]: GET /images/star16x16_rays.png
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:64150 Closing
|
||||
[Sat Apr 4 20:18:31 2026] 127.0.0.1:56561 Closing
|
||||
[Sat Apr 4 20:18:32 2026] 127.0.0.1:60491 Accepted
|
||||
[Sat Apr 4 20:18:32 2026] 127.0.0.1:60491 [200]: GET /favicon.ico
|
||||
[Sat Apr 4 20:18:32 2026] 127.0.0.1:60491 Closing
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<br />
|
||||
<b>Warning</b>: Module "mysqli" is already loaded in <b>Unknown</b> on line <b>0</b><br />
|
||||
|
||||
+28
-4
@@ -482,10 +482,11 @@ CREATE TABLE IF NOT EXISTS `moon_craters` (
|
||||
|
||||
-- Daten-Export vom Benutzer nicht ausgewählt
|
||||
|
||||
-- Exportiere Struktur von Tabelle d0467f49.sat_import_runs
|
||||
CREATE TABLE IF NOT EXISTS `sat_import_runs` (
|
||||
-- Exportiere Struktur von Tabelle d0467f49.app_import_runs
|
||||
CREATE TABLE IF NOT EXISTS `app_import_runs` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`source` varchar(32) NOT NULL,
|
||||
`source_url` varchar(500) DEFAULT NULL,
|
||||
`started_at` datetime NOT NULL,
|
||||
`finished_at` datetime DEFAULT NULL,
|
||||
`records_received` int(11) NOT NULL DEFAULT 0,
|
||||
@@ -494,8 +495,8 @@ CREATE TABLE IF NOT EXISTS `sat_import_runs` (
|
||||
`status` varchar(32) NOT NULL,
|
||||
`message` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_sat_import_runs_source` (`source`),
|
||||
KEY `idx_sat_import_runs_started_at` (`started_at`)
|
||||
KEY `idx_app_import_runs_source` (`source`),
|
||||
KEY `idx_app_import_runs_started_at` (`started_at`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Daten-Export vom Benutzer nicht ausgewählt
|
||||
@@ -638,6 +639,29 @@ CREATE TABLE IF NOT EXISTS `star_hipparcos` (
|
||||
|
||||
-- Daten-Export vom Benutzer nicht ausgewählt
|
||||
|
||||
-- Exportiere Struktur von Tabelle d0467f49.aavso_tcrb_observations
|
||||
CREATE TABLE IF NOT EXISTS `aavso_tcrb_observations` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`source_row_key` varchar(50) DEFAULT NULL,
|
||||
`star_name` varchar(50) NOT NULL DEFAULT 'T CrB',
|
||||
`jd` decimal(16,6) NOT NULL,
|
||||
`observed_at_utc` datetime NOT NULL,
|
||||
`calendar_date_text` varchar(64) DEFAULT NULL,
|
||||
`magnitude` decimal(8,3) NOT NULL,
|
||||
`magnitude_error` decimal(8,3) DEFAULT NULL,
|
||||
`filter_code` varchar(20) DEFAULT NULL,
|
||||
`observer_code` varchar(20) DEFAULT NULL,
|
||||
`notes_raw` longtext DEFAULT NULL,
|
||||
`imported_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uq_aavso_tcrb_observation` (`jd`,`filter_code`,`observer_code`),
|
||||
KEY `idx_aavso_tcrb_observed_at_utc` (`observed_at_utc`),
|
||||
KEY `idx_aavso_tcrb_filter_code` (`filter_code`),
|
||||
KEY `idx_aavso_tcrb_observer_code` (`observer_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AAVSO WebObs CCD-Beobachtungen fuer T CrB';
|
||||
|
||||
/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
|
||||
|
||||
@@ -0,0 +1,434 @@
|
||||
[Sun Apr 5 08:41:18 2026] PHP Warning: Module "mysqli" is already loaded in Unknown on line 0
|
||||
[Sun Apr 5 08:41:18 2026] PHP 8.4.5 Development Server (http://127.0.0.1:8000) started
|
||||
[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 Accepted
|
||||
[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 [200]: GET /
|
||||
[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 Closing
|
||||
[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 Accepted
|
||||
[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 [200]: GET /
|
||||
[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 Closing
|
||||
[Sun Apr 5 09:03:20 2026] 127.0.0.1:58699 Accepted
|
||||
[Sun Apr 5 09:03:21 2026] 127.0.0.1:58699 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:03:22 2026] 127.0.0.1:58699 Closing
|
||||
[Sun Apr 5 09:04:28 2026] 127.0.0.1:57870 Accepted
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:57870 [200]: GET /
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:57870 Closing
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 Accepted
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 Closing
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 Accepted
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 Accepted
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 Closing
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 Closing
|
||||
[Sun Apr 5 09:04:29 2026] 127.0.0.1:50410 Accepted
|
||||
[Sun Apr 5 09:04:30 2026] 127.0.0.1:50410 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:04:30 2026] 127.0.0.1:50410 Closing
|
||||
[Sun Apr 5 09:04:30 2026] 127.0.0.1:58330 Accepted
|
||||
[Sun Apr 5 09:04:33 2026] 127.0.0.1:58331 Accepted
|
||||
[Sun Apr 5 09:04:33 2026] 127.0.0.1:58331 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:04:34 2026] 127.0.0.1:58331 Closing
|
||||
[Sun Apr 5 09:04:34 2026] 127.0.0.1:58330 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:04:34 2026] 127.0.0.1:58330 Closing
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 Accepted
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 Closing
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 Accepted
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 Accepted
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 Closing
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 Closing
|
||||
[Sun Apr 5 09:04:35 2026] 127.0.0.1:57032 Accepted
|
||||
[Sun Apr 5 09:04:36 2026] 127.0.0.1:57032 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:04:36 2026] 127.0.0.1:57032 Closing
|
||||
[Sun Apr 5 09:04:36 2026] 127.0.0.1:52221 Accepted
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:52221 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=I&filters%5B%5D=R&filters%5B%5D=Red-Vis.&filters%5B%5D=SG&filters%5B%5D=SI&filters%5B%5D=SR&filters%5B%5D=SU&filters%5B%5D=TB&filters%5B%5D=TG&filters%5B%5D=TR&filters%5B%5D=U&filters%5B%5D=V&filters%5B%5D=Vis.
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:52221 Closing
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 Accepted
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 Closing
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 Accepted
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 Accepted
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 Closing
|
||||
[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 Closing
|
||||
[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 Accepted
|
||||
[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 Closing
|
||||
[Sun Apr 5 09:05:01 2026] 127.0.0.1:50264 Accepted
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:50264 Closed without sending a request; it was probably just an unused speculative preconnection
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:50264 Closing
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 Accepted
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 Closing
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 Accepted
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 Closing
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 Accepted
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 Accepted
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 Closing
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 Closing
|
||||
[Sun Apr 5 09:06:22 2026] 127.0.0.1:63043 Accepted
|
||||
[Sun Apr 5 09:06:23 2026] 127.0.0.1:63043 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:06:23 2026] 127.0.0.1:63043 Closing
|
||||
[Sun Apr 5 09:06:23 2026] 127.0.0.1:56378 Accepted
|
||||
[Sun Apr 5 09:06:32 2026] 127.0.0.1:56378 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:06:32 2026] 127.0.0.1:56378 Closing
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 Accepted
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 Closing
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 Accepted
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 Accepted
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 Closing
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 Closing
|
||||
[Sun Apr 5 09:06:33 2026] 127.0.0.1:53067 Accepted
|
||||
[Sun Apr 5 09:06:34 2026] 127.0.0.1:53067 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:06:34 2026] 127.0.0.1:53067 Closing
|
||||
[Sun Apr 5 09:06:34 2026] 127.0.0.1:64617 Accepted
|
||||
[Sun Apr 5 09:06:51 2026] 127.0.0.1:64617 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:06:51 2026] 127.0.0.1:64617 Closing
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 Accepted
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 Closing
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 Accepted
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 Accepted
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 Closing
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 Closing
|
||||
[Sun Apr 5 09:06:52 2026] 127.0.0.1:50474 Accepted
|
||||
[Sun Apr 5 09:06:53 2026] 127.0.0.1:50474 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:06:53 2026] 127.0.0.1:50474 Closing
|
||||
[Sun Apr 5 09:06:53 2026] 127.0.0.1:57647 Accepted
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:57647 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:57647 Closing
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 Accepted
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 Closing
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 Accepted
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 Closing
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 Accepted
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:60051 Accepted
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 Closing
|
||||
[Sun Apr 5 09:07:16 2026] 127.0.0.1:60051 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:07:16 2026] 127.0.0.1:60051 Closing
|
||||
[Sun Apr 5 09:07:26 2026] 127.0.0.1:60054 Accepted
|
||||
[Sun Apr 5 09:07:27 2026] 127.0.0.1:60054 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:07:28 2026] 127.0.0.1:60054 Closing
|
||||
[Sun Apr 5 09:07:32 2026] 127.0.0.1:64959 Accepted
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:64959 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:64959 Closing
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 Accepted
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 Closing
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 Accepted
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 Accepted
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 Closing
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 Closing
|
||||
[Sun Apr 5 09:07:33 2026] 127.0.0.1:64706 Accepted
|
||||
[Sun Apr 5 09:07:34 2026] 127.0.0.1:64706 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:07:34 2026] 127.0.0.1:64706 Closing
|
||||
[Sun Apr 5 09:07:34 2026] 127.0.0.1:57213 Accepted
|
||||
[Sun Apr 5 09:08:22 2026] 127.0.0.1:57222 Accepted
|
||||
[Sun Apr 5 09:08:22 2026] 127.0.0.1:57222 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:08:23 2026] 127.0.0.1:57222 Closing
|
||||
[Sun Apr 5 09:08:53 2026] 127.0.0.1:57213 Closed without sending a request; it was probably just an unused speculative preconnection
|
||||
[Sun Apr 5 09:08:53 2026] 127.0.0.1:57213 Closing
|
||||
[Sun Apr 5 09:08:53 2026] 127.0.0.1:50203 Accepted
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:50203 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:50203 Closing
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 Accepted
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 Closing
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 Accepted
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 Accepted
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 Closing
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 Closing
|
||||
[Sun Apr 5 09:08:54 2026] 127.0.0.1:61750 Accepted
|
||||
[Sun Apr 5 09:08:55 2026] 127.0.0.1:61750 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:08:55 2026] 127.0.0.1:61750 Closing
|
||||
[Sun Apr 5 09:08:55 2026] 127.0.0.1:65247 Accepted
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:65247 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:65247 Closing
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 Accepted
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 Closing
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 Accepted
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 Closing
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 Accepted
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:55310 Accepted
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 Closing
|
||||
[Sun Apr 5 09:09:05 2026] 127.0.0.1:55310 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:09:05 2026] 127.0.0.1:55310 Closing
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 Accepted
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 Closing
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 Accepted
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 Closing
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 Accepted
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 Accepted
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 Closing
|
||||
[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 Closing
|
||||
[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 Accepted
|
||||
[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 Closing
|
||||
[Sun Apr 5 09:12:34 2026] 127.0.0.1:58601 Accepted
|
||||
[Sun Apr 5 09:13:55 2026] 127.0.0.1:58601 Closed without sending a request; it was probably just an unused speculative preconnection
|
||||
[Sun Apr 5 09:13:55 2026] 127.0.0.1:58601 Closing
|
||||
[Sun Apr 5 09:14:02 2026] 127.0.0.1:58126 Accepted
|
||||
[Sun Apr 5 09:14:02 2026] 127.0.0.1:58126 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:14:03 2026] 127.0.0.1:58126 Closing
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 Accepted
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 Closing
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 Accepted
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 Closing
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 Accepted
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 Accepted
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 Closing
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 Closing
|
||||
[Sun Apr 5 09:16:49 2026] 127.0.0.1:51536 Accepted
|
||||
[Sun Apr 5 09:16:50 2026] 127.0.0.1:51536 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:16:50 2026] 127.0.0.1:51536 Closing
|
||||
[Sun Apr 5 09:16:50 2026] 127.0.0.1:58994 Accepted
|
||||
[Sun Apr 5 09:17:36 2026] 127.0.0.1:58994 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:17:36 2026] 127.0.0.1:58994 Closing
|
||||
[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 Accepted
|
||||
[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 Closing
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 Accepted
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 Closing
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 Accepted
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:51304 Accepted
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 Closing
|
||||
[Sun Apr 5 09:17:38 2026] 127.0.0.1:51304 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:17:38 2026] 127.0.0.1:51304 Closing
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 Accepted
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V&filters%5B%5D=Vis.
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 Closing
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 Accepted
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 Closing
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 Accepted
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 Accepted
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 Closing
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 Closing
|
||||
[Sun Apr 5 09:18:21 2026] 127.0.0.1:59012 Accepted
|
||||
[Sun Apr 5 09:18:22 2026] 127.0.0.1:59012 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:18:22 2026] 127.0.0.1:59012 Closing
|
||||
[Sun Apr 5 09:18:22 2026] 127.0.0.1:49511 Accepted
|
||||
[Sun Apr 5 09:18:34 2026] 127.0.0.1:49511 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
|
||||
[Sun Apr 5 09:18:34 2026] 127.0.0.1:49511 Closing
|
||||
[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 Accepted
|
||||
[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 Closing
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 Accepted
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 Closing
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 Accepted
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:54204 Accepted
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 Closing
|
||||
[Sun Apr 5 09:18:36 2026] 127.0.0.1:54204 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:18:36 2026] 127.0.0.1:54204 Closing
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 Accepted
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=CV&filters%5B%5D=V
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 Closing
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 Accepted
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 Closing
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 Accepted
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 Accepted
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 Closing
|
||||
[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 Closing
|
||||
[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 Accepted
|
||||
[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 Closing
|
||||
[Sun Apr 5 09:19:10 2026] 127.0.0.1:52409 Accepted
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:52409 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=R&filters%5B%5D=V
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:52409 Closing
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 Accepted
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 Closing
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 Accepted
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 Closing
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 Accepted
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:59001 Accepted
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 Closing
|
||||
[Sun Apr 5 09:19:20 2026] 127.0.0.1:59001 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:19:20 2026] 127.0.0.1:59001 Closing
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 Accepted
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=SU&filters%5B%5D=V
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 Closing
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 Accepted
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 Closing
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 Accepted
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 Accepted
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 Closing
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 Closing
|
||||
[Sun Apr 5 09:19:28 2026] 127.0.0.1:51123 Accepted
|
||||
[Sun Apr 5 09:19:30 2026] 127.0.0.1:51123 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:19:30 2026] 127.0.0.1:51123 Closing
|
||||
[Sun Apr 5 09:19:30 2026] 127.0.0.1:58163 Accepted
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:58163 [200]: GET /tcrb_lightcurve.php?
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:58163 Closing
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 Accepted
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 Closing
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 Accepted
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 Accepted
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 Closing
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 Closing
|
||||
[Sun Apr 5 09:19:44 2026] 127.0.0.1:55189 Accepted
|
||||
[Sun Apr 5 09:19:45 2026] 127.0.0.1:55189 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:19:45 2026] 127.0.0.1:55189 Closing
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 Accepted
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 Closing
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 Accepted
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 Closing
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 Accepted
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 Accepted
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 Closing
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 Closing
|
||||
[Sun Apr 5 09:20:53 2026] 127.0.0.1:53823 Accepted
|
||||
[Sun Apr 5 09:20:54 2026] 127.0.0.1:53823 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:20:54 2026] 127.0.0.1:53823 Closing
|
||||
[Sun Apr 5 09:20:54 2026] 127.0.0.1:49851 Accepted
|
||||
[Sun Apr 5 09:21:56 2026] 127.0.0.1:49851 Closed without sending a request; it was probably just an unused speculative preconnection
|
||||
[Sun Apr 5 09:21:56 2026] 127.0.0.1:49851 Closing
|
||||
[Sun Apr 5 09:25:02 2026] 127.0.0.1:51369 Accepted
|
||||
[Sun Apr 5 09:25:03 2026] 127.0.0.1:51369 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:25:03 2026] 127.0.0.1:51369 Closing
|
||||
[Sun Apr 5 09:28:00 2026] 127.0.0.1:52013 Accepted
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:52013 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:52013 Closing
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 Accepted
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 Closing
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 Accepted
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 Accepted
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 Closing
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 Closing
|
||||
[Sun Apr 5 09:28:01 2026] 127.0.0.1:53593 Accepted
|
||||
[Sun Apr 5 09:28:04 2026] 127.0.0.1:53593 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:28:04 2026] 127.0.0.1:53593 Closing
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 Accepted
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=I&filters%5B%5D=R&filters%5B%5D=V
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 Closing
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 Accepted
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 Closing
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 Accepted
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 Accepted
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 Closing
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 Closing
|
||||
[Sun Apr 5 09:28:29 2026] 127.0.0.1:64619 Accepted
|
||||
[Sun Apr 5 09:28:30 2026] 127.0.0.1:64619 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:28:30 2026] 127.0.0.1:64619 Closing
|
||||
[Sun Apr 5 09:28:30 2026] 127.0.0.1:51060 Accepted
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:51060 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:51060 Closing
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 Accepted
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 Closing
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 Accepted
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 Closing
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 Accepted
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:60639 Accepted
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 Closing
|
||||
[Sun Apr 5 09:28:36 2026] 127.0.0.1:60639 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:28:36 2026] 127.0.0.1:60639 Closing
|
||||
[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 Accepted
|
||||
[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 Closing
|
||||
[Sun Apr 5 09:31:20 2026] 127.0.0.1:51175 Accepted
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:51175 [200]: GET /tcrb_lightcurve.php
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:51175 Closing
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 Accepted
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 Closing
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 Accepted
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 Accepted
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 Closing
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 Closing
|
||||
[Sun Apr 5 09:31:21 2026] 127.0.0.1:57822 Accepted
|
||||
[Sun Apr 5 09:31:22 2026] 127.0.0.1:57822 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:31:22 2026] 127.0.0.1:57822 Closing
|
||||
[Sun Apr 5 09:31:22 2026] 127.0.0.1:64591 Accepted
|
||||
[Sun Apr 5 09:31:37 2026] 127.0.0.1:64591 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
|
||||
[Sun Apr 5 09:31:37 2026] 127.0.0.1:64591 Closing
|
||||
[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 Accepted
|
||||
[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 Closing
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 Accepted
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 Closing
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 Accepted
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:58223 Accepted
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 Closing
|
||||
[Sun Apr 5 09:31:39 2026] 127.0.0.1:58223 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:31:39 2026] 127.0.0.1:58223 Closing
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 Accepted
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 Closing
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 Accepted
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 [200]: GET /css/style.css
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 Closing
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 Accepted
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 Accepted
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 [200]: GET /images/star16x16.png
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 [200]: GET /images/star16x16_rays.png
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 Closing
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 Closing
|
||||
[Sun Apr 5 09:31:51 2026] 127.0.0.1:58480 Accepted
|
||||
[Sun Apr 5 09:31:52 2026] 127.0.0.1:58480 [200]: GET /favicon.ico
|
||||
[Sun Apr 5 09:31:52 2026] 127.0.0.1:58480 Closing
|
||||
[Sun Apr 5 09:31:52 2026] 127.0.0.1:63903 Accepted
|
||||
[Sun Apr 5 09:32:56 2026] 127.0.0.1:63903 Closed without sending a request; it was probably just an unused speculative preconnection
|
||||
[Sun Apr 5 09:32:56 2026] 127.0.0.1:63903 Closing
|
||||
@@ -55,6 +55,7 @@ $menuGroups = [
|
||||
['href' => 'moonphase.php', 'label' => 'Mondphase'],
|
||||
['href' => 'index_py.php', 'label' => 'Sonne & Mond'],
|
||||
['href' => 'planetensichtbarkeit.php', 'label' => 'Planetensichtbarkeit'],
|
||||
['href' => 'tcrb_lightcurve.php', 'label' => 'T CrB Lichtkurve'],
|
||||
['href' => 'solarsystem.php', 'label' => 'Sonnensystem'],
|
||||
['href' => 'jupitersystem.php', 'label' => 'Jupitersystem'],
|
||||
['href' => 'tagbogen.php', 'label' => 'Tagbogen'],
|
||||
|
||||
@@ -0,0 +1,554 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
ini_set('display_errors', '1');
|
||||
error_reporting(E_ALL);
|
||||
session_start();
|
||||
|
||||
$config = require __DIR__ . '/../config/database.php';
|
||||
|
||||
$dsn = sprintf(
|
||||
'mysql:host=%s;dbname=%s;charset=%s',
|
||||
$config['host'],
|
||||
$config['dbname'],
|
||||
$config['charset'] ?? 'utf8mb4'
|
||||
);
|
||||
|
||||
$pdo = new PDO(
|
||||
$dsn,
|
||||
$config['user'],
|
||||
$config['pass'],
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]
|
||||
);
|
||||
|
||||
$loggedIn = isset($_SESSION['user_id']);
|
||||
$pageTitle = 'T CrB Lichtkurve';
|
||||
$headerIntroPre = 'Variabler Stern';
|
||||
$headerIntroTitle = 'T CrB Lichtkurve';
|
||||
$headerIntroSub = 'AAVSO-WebObs-Daten mit waehlbaren Filtern in einem gemeinsamen Plotly-Diagramm.';
|
||||
$errors = [];
|
||||
|
||||
function h(?string $value): string
|
||||
{
|
||||
return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
|
||||
$filterRows = $pdo->query("
|
||||
SELECT `filter_code`, COUNT(*) AS `entry_count`
|
||||
FROM `aavso_tcrb_observations`
|
||||
WHERE `filter_code` IS NOT NULL
|
||||
AND `filter_code` <> ''
|
||||
GROUP BY `filter_code`
|
||||
ORDER BY `filter_code` ASC
|
||||
")->fetchAll();
|
||||
|
||||
$availableFilters = [];
|
||||
foreach ($filterRows as $filterRow) {
|
||||
$filterCode = trim((string) ($filterRow['filter_code'] ?? ''));
|
||||
if ($filterCode === '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$availableFilters[] = [
|
||||
'code' => $filterCode,
|
||||
'count' => (int) ($filterRow['entry_count'] ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
$selectedFilters = array_values(array_unique(array_filter(array_map(
|
||||
static fn ($value): string => trim((string) $value),
|
||||
is_array($_GET['filters'] ?? null) ? $_GET['filters'] : []
|
||||
), static fn (string $value): bool => $value !== '')));
|
||||
|
||||
if (empty($selectedFilters)) {
|
||||
$selectedFilters = in_array('V', array_column($availableFilters, 'code'), true)
|
||||
? ['V']
|
||||
: array_column($availableFilters, 'code');
|
||||
}
|
||||
|
||||
$selectedFilters = array_values(array_intersect($selectedFilters, array_column($availableFilters, 'code')));
|
||||
|
||||
if (empty($availableFilters)) {
|
||||
$errors[] = 'In der Tabelle aavso_tcrb_observations sind noch keine T-CrB-Daten vorhanden.';
|
||||
}
|
||||
|
||||
$observations = [];
|
||||
$summary = [
|
||||
'count' => 0,
|
||||
'min_utc' => null,
|
||||
'max_utc' => null,
|
||||
'min_mag' => null,
|
||||
'max_mag' => null,
|
||||
];
|
||||
|
||||
if (empty($errors) && !empty($selectedFilters)) {
|
||||
$placeholders = implode(',', array_fill(0, count($selectedFilters), '?'));
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT
|
||||
`observed_at_utc`,
|
||||
`jd`,
|
||||
`magnitude`,
|
||||
`magnitude_error`,
|
||||
`filter_code`,
|
||||
`observer_code`,
|
||||
`notes_raw`
|
||||
FROM `aavso_tcrb_observations`
|
||||
WHERE `filter_code` IN ({$placeholders})
|
||||
ORDER BY `observed_at_utc` ASC, `jd` ASC
|
||||
");
|
||||
$stmt->execute($selectedFilters);
|
||||
$rows = $stmt->fetchAll();
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$observedAtUtc = (string) ($row['observed_at_utc'] ?? '');
|
||||
$magnitude = isset($row['magnitude']) ? (float) $row['magnitude'] : null;
|
||||
if ($observedAtUtc === '' || $magnitude === null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$observations[] = [
|
||||
'observed_at_utc' => $observedAtUtc,
|
||||
'jd' => isset($row['jd']) ? (float) $row['jd'] : null,
|
||||
'magnitude' => $magnitude,
|
||||
'magnitude_error' => $row['magnitude_error'] !== null ? (float) $row['magnitude_error'] : null,
|
||||
'filter_code' => (string) ($row['filter_code'] ?? ''),
|
||||
'observer_code' => (string) ($row['observer_code'] ?? ''),
|
||||
'notes_raw' => (string) ($row['notes_raw'] ?? ''),
|
||||
];
|
||||
|
||||
$summary['count']++;
|
||||
$summary['min_utc'] = $summary['min_utc'] === null || $observedAtUtc < $summary['min_utc'] ? $observedAtUtc : $summary['min_utc'];
|
||||
$summary['max_utc'] = $summary['max_utc'] === null || $observedAtUtc > $summary['max_utc'] ? $observedAtUtc : $summary['max_utc'];
|
||||
$summary['min_mag'] = $summary['min_mag'] === null || $magnitude < $summary['min_mag'] ? $magnitude : $summary['min_mag'];
|
||||
$summary['max_mag'] = $summary['max_mag'] === null || $magnitude > $summary['max_mag'] ? $magnitude : $summary['max_mag'];
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($errors) && empty($observations)) {
|
||||
$errors[] = 'Fuer die ausgewaehlten Filter wurden keine Daten gefunden.';
|
||||
}
|
||||
|
||||
$filterPalette = [
|
||||
'U' => '#4c6ef5',
|
||||
'B' => '#1c7ed6',
|
||||
'V' => '#2b8a3e',
|
||||
'R' => '#c92a2a',
|
||||
'I' => '#862e9c',
|
||||
'CV' => '#495057',
|
||||
'TG' => '#0b7285',
|
||||
'TB' => '#364fc7',
|
||||
'TR' => '#d9480f',
|
||||
];
|
||||
|
||||
$chartDatasets = [];
|
||||
foreach ($selectedFilters as $selectedFilter) {
|
||||
$chartDatasets[$selectedFilter] = [
|
||||
'filter' => $selectedFilter,
|
||||
'color' => $filterPalette[$selectedFilter] ?? sprintf('#%06X', crc32($selectedFilter) & 0xFFFFFF),
|
||||
'points' => [],
|
||||
];
|
||||
}
|
||||
|
||||
foreach ($observations as $observation) {
|
||||
$filterCode = $observation['filter_code'];
|
||||
if (!isset($chartDatasets[$filterCode])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$chartDatasets[$filterCode]['points'][] = $observation;
|
||||
}
|
||||
|
||||
$chartDatasets = array_values(array_filter($chartDatasets, static fn (array $dataset): bool => !empty($dataset['points'])));
|
||||
|
||||
$plotlyTraces = [];
|
||||
foreach ($chartDatasets as $dataset) {
|
||||
$xValues = [];
|
||||
$yValues = [];
|
||||
$errorValues = [];
|
||||
$customData = [];
|
||||
$hasErrors = false;
|
||||
|
||||
foreach ($dataset['points'] as $point) {
|
||||
$xValues[] = (string) $point['observed_at_utc'];
|
||||
$yValues[] = (float) $point['magnitude'];
|
||||
$errorValue = $point['magnitude_error'] !== null ? (float) $point['magnitude_error'] : 0.0;
|
||||
$errorValues[] = $errorValue;
|
||||
if ($errorValue > 0) {
|
||||
$hasErrors = true;
|
||||
}
|
||||
|
||||
$customData[] = [
|
||||
$point['jd'],
|
||||
$point['observer_code'] !== '' ? $point['observer_code'] : '—',
|
||||
$point['magnitude_error'] !== null ? number_format((float) $point['magnitude_error'], 3, '.', '') : '—',
|
||||
];
|
||||
}
|
||||
|
||||
$plotlyTraces[] = [
|
||||
'type' => 'scatter',
|
||||
'mode' => 'lines+markers',
|
||||
'name' => $dataset['filter'],
|
||||
'x' => $xValues,
|
||||
'y' => $yValues,
|
||||
'line' => [
|
||||
'color' => $dataset['color'],
|
||||
'width' => 2,
|
||||
],
|
||||
'marker' => [
|
||||
'color' => $dataset['color'],
|
||||
'size' => 7,
|
||||
'line' => [
|
||||
'color' => '#0f172a',
|
||||
'width' => 1,
|
||||
],
|
||||
],
|
||||
'error_y' => [
|
||||
'type' => 'data',
|
||||
'array' => $errorValues,
|
||||
'visible' => $hasErrors,
|
||||
'thickness' => 1.1,
|
||||
'width' => 3,
|
||||
'color' => $dataset['color'],
|
||||
],
|
||||
'customdata' => $customData,
|
||||
'hovertemplate' => 'Filter %{fullData.name}<br>'
|
||||
. 'Magnitude %{y:.3f}<br>'
|
||||
. 'Fehler %{customdata[2]}<br>'
|
||||
. 'UTC %{x}<br>'
|
||||
. 'JD %{customdata[0]}<br>'
|
||||
. 'Observer %{customdata[1]}<extra></extra>',
|
||||
];
|
||||
}
|
||||
|
||||
$meanSourcePoints = [];
|
||||
foreach ($chartDatasets as $dataset) {
|
||||
foreach ($dataset['points'] as $point) {
|
||||
$meanSourcePoints[] = $point;
|
||||
}
|
||||
}
|
||||
|
||||
usort($meanSourcePoints, static function (array $a, array $b): int {
|
||||
return strcmp((string) $a['observed_at_utc'], (string) $b['observed_at_utc']);
|
||||
});
|
||||
|
||||
if (count($meanSourcePoints) >= 3) {
|
||||
$windowSize = min(11, count($meanSourcePoints));
|
||||
if ($windowSize % 2 === 0) {
|
||||
$windowSize--;
|
||||
}
|
||||
|
||||
$halfWindow = intdiv($windowSize, 2);
|
||||
$meanX = [];
|
||||
$meanY = [];
|
||||
$meanCustomData = [];
|
||||
|
||||
foreach ($meanSourcePoints as $index => $point) {
|
||||
$start = max(0, $index - $halfWindow);
|
||||
$end = min(count($meanSourcePoints) - 1, $index + $halfWindow);
|
||||
$sum = 0.0;
|
||||
$count = 0;
|
||||
|
||||
for ($i = $start; $i <= $end; $i++) {
|
||||
$sum += (float) $meanSourcePoints[$i]['magnitude'];
|
||||
$count++;
|
||||
}
|
||||
|
||||
if ($count === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$meanValue = $sum / $count;
|
||||
$meanX[] = (string) $point['observed_at_utc'];
|
||||
$meanY[] = $meanValue;
|
||||
$meanCustomData[] = [$count];
|
||||
}
|
||||
|
||||
if (!empty($meanX)) {
|
||||
$plotlyTraces[] = [
|
||||
'type' => 'scatter',
|
||||
'mode' => 'lines',
|
||||
'name' => 'Mittelkurve',
|
||||
'x' => $meanX,
|
||||
'y' => $meanY,
|
||||
'line' => [
|
||||
'color' => '#f4d35e',
|
||||
'width' => 3,
|
||||
'dash' => 'solid',
|
||||
'shape' => 'spline',
|
||||
'smoothing' => 0.7,
|
||||
],
|
||||
'customdata' => $meanCustomData,
|
||||
'hovertemplate' => 'Mittelkurve<br>'
|
||||
. 'Magnitude %{y:.3f}<br>'
|
||||
. 'UTC %{x}<br>'
|
||||
. 'Fenster %{customdata[0]} Punkte<extra></extra>',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$plotlyPayload = [
|
||||
'traces' => $plotlyTraces,
|
||||
'summary' => $summary,
|
||||
];
|
||||
?>
|
||||
<?php require __DIR__ . '/header.php'; ?>
|
||||
<script src="https://cdn.plot.ly/plotly-3.2.0.min.js" charset="utf-8"></script>
|
||||
|
||||
<?php if (!empty($errors)): ?>
|
||||
<ul class="msg-error">
|
||||
<?php foreach ($errors as $error): ?>
|
||||
<li><?= h($error) ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
|
||||
<style>
|
||||
.tcrb-layout {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(18rem, 22rem) minmax(0, 1fr);
|
||||
gap: 1.2rem;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.tcrb-filter-list {
|
||||
display: grid;
|
||||
gap: 0.55rem;
|
||||
}
|
||||
|
||||
.tcrb-filter-option {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.8rem;
|
||||
padding: 0.55rem 0.7rem;
|
||||
border: 1px solid rgba(255,255,255,0.12);
|
||||
border-radius: 0.7rem;
|
||||
background: rgba(255,255,255,0.03);
|
||||
}
|
||||
|
||||
.tcrb-filter-option label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.55rem;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tcrb-filter-swatch {
|
||||
width: 0.9rem;
|
||||
height: 0.9rem;
|
||||
border-radius: 999px;
|
||||
border: 1px solid rgba(255,255,255,0.4);
|
||||
}
|
||||
|
||||
.tcrb-filter-count {
|
||||
color: var(--text-dim);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.tcrb-chart-card {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tcrb-chart-wrap {
|
||||
position: relative;
|
||||
min-height: 32rem;
|
||||
border-radius: 1rem;
|
||||
background:
|
||||
radial-gradient(circle at top, rgba(200, 168, 75, 0.12), transparent 45%),
|
||||
linear-gradient(180deg, rgba(17, 24, 39, 0.96), rgba(7, 10, 18, 0.98));
|
||||
border: 1px solid rgba(200, 168, 75, 0.2);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tcrb-plot {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.tcrb-chart-legend {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.7rem 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.tcrb-chart-legend-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
color: #dfe7ff;
|
||||
font-size: 0.92rem;
|
||||
}
|
||||
|
||||
.tcrb-chart-legend-item span {
|
||||
width: 0.85rem;
|
||||
height: 0.85rem;
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.tcrb-summary-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 0.8rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.tcrb-summary-box {
|
||||
padding: 0.8rem 0.9rem;
|
||||
border-radius: 0.9rem;
|
||||
background: rgba(255,255,255,0.04);
|
||||
border: 1px solid rgba(255,255,255,0.08);
|
||||
}
|
||||
|
||||
.tcrb-summary-box strong {
|
||||
display: block;
|
||||
font-size: 1.05rem;
|
||||
color: #f9fafb;
|
||||
}
|
||||
|
||||
.tcrb-summary-box span {
|
||||
display: block;
|
||||
color: var(--text-dim);
|
||||
font-size: 0.88rem;
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
|
||||
.tcrb-chart-empty {
|
||||
padding: 2rem 1.2rem;
|
||||
color: var(--text-dim);
|
||||
}
|
||||
|
||||
@media (max-width: 960px) {
|
||||
.tcrb-layout {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.tcrb-summary-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="tcrb-layout">
|
||||
<div class="card">
|
||||
<h2>Filter</h2>
|
||||
<form method="get" action="" class="form-stack">
|
||||
<div class="tcrb-filter-list">
|
||||
<?php foreach ($availableFilters as $filter): ?>
|
||||
<?php
|
||||
$filterCode = $filter['code'];
|
||||
$filterColor = $filterPalette[$filterCode] ?? sprintf('#%06X', crc32($filterCode) & 0xFFFFFF);
|
||||
?>
|
||||
<div class="tcrb-filter-option">
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
name="filters[]"
|
||||
value="<?= h($filterCode) ?>"
|
||||
<?= in_array($filterCode, $selectedFilters, true) ? 'checked' : '' ?>
|
||||
>
|
||||
<span class="tcrb-filter-swatch" style="background: <?= h($filterColor) ?>"></span>
|
||||
<span><?= h($filterCode) ?></span>
|
||||
</label>
|
||||
<span class="tcrb-filter-count"><?= (int) $filter['count'] ?></span>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Diagramm aktualisieren</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="card tcrb-chart-card">
|
||||
<h2>Lichtkurve</h2>
|
||||
|
||||
<?php if (empty($errors) && !empty($observations)): ?>
|
||||
<div class="tcrb-summary-grid">
|
||||
<div class="tcrb-summary-box">
|
||||
<strong><?= (int) $summary['count'] ?></strong>
|
||||
<span>Messpunkte</span>
|
||||
</div>
|
||||
<div class="tcrb-summary-box">
|
||||
<strong><?= h((string) $summary['min_utc']) ?></strong>
|
||||
<span>Erster UTC-Zeitpunkt</span>
|
||||
</div>
|
||||
<div class="tcrb-summary-box">
|
||||
<strong><?= h((string) $summary['max_utc']) ?></strong>
|
||||
<span>Letzter UTC-Zeitpunkt</span>
|
||||
</div>
|
||||
<div class="tcrb-summary-box">
|
||||
<strong><?= number_format((float) $summary['min_mag'], 3, '.', '') ?> bis <?= number_format((float) $summary['max_mag'], 3, '.', '') ?></strong>
|
||||
<span>Magnitudenbereich</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tcrb-chart-wrap">
|
||||
<div class="tcrb-plot" id="tcrbPlot" aria-label="T-CrB-Lichtkurve"></div>
|
||||
</div>
|
||||
|
||||
<div class="tcrb-chart-legend">
|
||||
<?php foreach ($chartDatasets as $dataset): ?>
|
||||
<div class="tcrb-chart-legend-item">
|
||||
<span style="background: <?= h($dataset['color']) ?>"></span>
|
||||
<?= h($dataset['filter']) ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="tcrb-chart-empty">Noch keine darstellbaren Daten vorhanden.</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (empty($errors) && !empty($observations)): ?>
|
||||
<script>
|
||||
(function () {
|
||||
const payload = <?= json_encode($plotlyPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
|
||||
const plotEl = document.getElementById('tcrbPlot');
|
||||
|
||||
if (!plotEl || typeof Plotly === 'undefined' || !payload || !Array.isArray(payload.traces) || payload.traces.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const layout = {
|
||||
margin: { t: 20, r: 24, b: 56, l: 72 },
|
||||
paper_bgcolor: 'rgba(0,0,0,0)',
|
||||
plot_bgcolor: 'rgba(0,0,0,0)',
|
||||
hovermode: 'closest',
|
||||
showlegend: false,
|
||||
xaxis: {
|
||||
title: { text: 'Beobachtungszeitpunkt (UTC)' },
|
||||
type: 'date',
|
||||
gridcolor: 'rgba(255,255,255,0.08)',
|
||||
linecolor: '#f8fafc',
|
||||
tickfont: { color: '#cbd5e1' },
|
||||
zeroline: false
|
||||
},
|
||||
yaxis: {
|
||||
title: { text: 'Magnitude (kleiner = heller)' },
|
||||
autorange: 'reversed',
|
||||
gridcolor: 'rgba(255,255,255,0.12)',
|
||||
linecolor: '#f8fafc',
|
||||
tickfont: { color: '#cbd5e1' },
|
||||
zeroline: false
|
||||
},
|
||||
font: {
|
||||
color: '#f8fafc'
|
||||
}
|
||||
};
|
||||
|
||||
const config = {
|
||||
responsive: true,
|
||||
displaylogo: false,
|
||||
modeBarButtonsToRemove: ['select2d', 'lasso2d']
|
||||
};
|
||||
|
||||
Plotly.newPlot(plotEl, payload.traces, layout, config);
|
||||
})();
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php require __DIR__ . '/footer.php'; ?>
|
||||
@@ -9,7 +9,7 @@ declare(strict_types=1);
|
||||
* Tabellen:
|
||||
* - sat_satellites
|
||||
* - sat_tle_current
|
||||
* - sat_import_runs
|
||||
* - app_import_runs
|
||||
*/
|
||||
|
||||
ini_set('display_errors', '1');
|
||||
@@ -182,13 +182,15 @@ $recordsUpdated = 0;
|
||||
|
||||
try {
|
||||
$stmtImportStart = $pdo->prepare("
|
||||
INSERT INTO sat_import_runs (
|
||||
INSERT INTO app_import_runs (
|
||||
source,
|
||||
source_url,
|
||||
started_at,
|
||||
status,
|
||||
message
|
||||
) VALUES (
|
||||
:source,
|
||||
:source_url,
|
||||
NOW(),
|
||||
'running',
|
||||
NULL
|
||||
@@ -196,6 +198,7 @@ try {
|
||||
");
|
||||
$stmtImportStart->execute([
|
||||
':source' => $sourceName,
|
||||
':source_url' => $sourceUrl,
|
||||
]);
|
||||
|
||||
$importRunId = (int)$pdo->lastInsertId();
|
||||
@@ -411,7 +414,7 @@ try {
|
||||
$pdo->commit();
|
||||
|
||||
$stmtImportFinish = $pdo->prepare("
|
||||
UPDATE sat_import_runs
|
||||
UPDATE app_import_runs
|
||||
SET
|
||||
finished_at = NOW(),
|
||||
records_received = :records_received,
|
||||
@@ -440,7 +443,7 @@ try {
|
||||
|
||||
if ($importRunId !== null) {
|
||||
$stmtImportError = $pdo->prepare("
|
||||
UPDATE sat_import_runs
|
||||
UPDATE app_import_runs
|
||||
SET
|
||||
finished_at = NOW(),
|
||||
records_received = :records_received,
|
||||
|
||||
@@ -0,0 +1,704 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Importiert aktuelle T-CrB-Beobachtungen aus AAVSO WebObs in die Tabelle
|
||||
* `aavso_tcrb_observations`.
|
||||
*
|
||||
* Nutzung:
|
||||
* php scripts/import/import_tcrb.php
|
||||
* php scripts/import/import_tcrb.php --pages=3
|
||||
* php scripts/import/import_tcrb.php --html=C:\pfad\webobs.html --dry-run
|
||||
* php scripts/import/import_tcrb.php --dir=C:\Users\ich\Desktop\TCrB
|
||||
*
|
||||
* Typischer Cron-Aufruf:
|
||||
* php /pfad/zum/projekt/scripts/import/import_tcrb.php --pages=2
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', '1');
|
||||
set_time_limit(0);
|
||||
|
||||
const DEFAULT_TCRB_URL = 'https://apps.aavso.org/webobs/results/?star=t+CRB&num_results=25&obs_types=ccd&page=1';
|
||||
const DEFAULT_TABLE_NAME = 'aavso_tcrb_observations';
|
||||
const DEFAULT_IMPORT_SOURCE = 'aavso-tcrb';
|
||||
|
||||
$rootDir = dirname(__DIR__, 2);
|
||||
$config = require $rootDir . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'database.php';
|
||||
|
||||
if (!is_array($config)) {
|
||||
writeMessage('config/database.php muss ein Array mit DB-Zugangsdaten zurueckgeben.', true);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$config = normalizeDbConfig($config);
|
||||
|
||||
foreach (['host', 'dbname', 'user', 'pass'] as $requiredKey) {
|
||||
if (!array_key_exists($requiredKey, $config) || $config[$requiredKey] === '') {
|
||||
writeMessage("DB-Konfiguration unvollstaendig: {$requiredKey} fehlt.", true);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
$options = parseCliArguments($argv);
|
||||
|
||||
if (($options['help'] ?? false) === true) {
|
||||
writeUsage();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
$dsn = sprintf(
|
||||
'mysql:host=%s;port=%d;dbname=%s;charset=%s',
|
||||
$config['host'],
|
||||
(int) $config['port'],
|
||||
$config['dbname'],
|
||||
$config['charset']
|
||||
);
|
||||
|
||||
$pdo = new PDO(
|
||||
$dsn,
|
||||
$config['user'],
|
||||
$config['pass'],
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]
|
||||
);
|
||||
|
||||
$tableName = DEFAULT_TABLE_NAME;
|
||||
|
||||
if (!tableExists($pdo, $tableName)) {
|
||||
writeMessage("Die Zieltabelle `{$tableName}` existiert noch nicht. Wir koennen sie im naechsten Schritt gemeinsam anlegen.", true);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ensureImportRunsTableExists($pdo);
|
||||
|
||||
$insertSql = <<<SQL
|
||||
INSERT INTO `{$tableName}` (
|
||||
`source_row_key`,
|
||||
`star_name`,
|
||||
`jd`,
|
||||
`observed_at_utc`,
|
||||
`calendar_date_text`,
|
||||
`magnitude`,
|
||||
`magnitude_error`,
|
||||
`filter_code`,
|
||||
`observer_code`,
|
||||
`notes_raw`,
|
||||
`imported_at`
|
||||
) VALUES (
|
||||
:source_row_key,
|
||||
:star_name,
|
||||
:jd,
|
||||
:observed_at_utc,
|
||||
:calendar_date_text,
|
||||
:magnitude,
|
||||
:magnitude_error,
|
||||
:filter_code,
|
||||
:observer_code,
|
||||
:notes_raw,
|
||||
NOW()
|
||||
)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`star_name` = VALUES(`star_name`),
|
||||
`observed_at_utc` = VALUES(`observed_at_utc`),
|
||||
`calendar_date_text` = VALUES(`calendar_date_text`),
|
||||
`magnitude` = VALUES(`magnitude`),
|
||||
`magnitude_error` = VALUES(`magnitude_error`),
|
||||
`filter_code` = VALUES(`filter_code`),
|
||||
`observer_code` = VALUES(`observer_code`),
|
||||
`notes_raw` = VALUES(`notes_raw`),
|
||||
`imported_at` = NOW(),
|
||||
`updated_at` = NOW()
|
||||
SQL;
|
||||
|
||||
$statement = $pdo->prepare($insertSql);
|
||||
|
||||
$pagesToImport = max(1, (int) ($options['pages'] ?? 1));
|
||||
$sourceHtmlPath = $options['html'] ?? null;
|
||||
$sourceDirectoryPath = $options['dir'] ?? null;
|
||||
$dryRun = (bool) ($options['dry-run'] ?? false);
|
||||
$baseUrl = (string) ($options['url'] ?? DEFAULT_TCRB_URL);
|
||||
$totalImported = 0;
|
||||
$totalUpserts = 0;
|
||||
$recordsInserted = 0;
|
||||
$recordsUpdated = 0;
|
||||
$importRunId = null;
|
||||
|
||||
if ($sourceHtmlPath !== null && $sourceDirectoryPath !== null) {
|
||||
writeMessage('Bitte entweder --html oder --dir verwenden, nicht beides gleichzeitig.', true);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$importSources = [];
|
||||
|
||||
if ($sourceDirectoryPath !== null) {
|
||||
foreach (findHtmlFilesInDirectory($sourceDirectoryPath) as $filePath) {
|
||||
$importSources[] = [
|
||||
'label' => basename($filePath),
|
||||
'html' => loadHtmlFromFile($filePath),
|
||||
'is_local_file' => true,
|
||||
];
|
||||
}
|
||||
|
||||
if (empty($importSources)) {
|
||||
writeMessage("Im Ordner wurden keine importierbaren HTML/TXT-Dateien gefunden: {$sourceDirectoryPath}", true);
|
||||
exit(1);
|
||||
}
|
||||
} elseif ($sourceHtmlPath !== null) {
|
||||
$importSources[] = [
|
||||
'label' => basename($sourceHtmlPath),
|
||||
'html' => loadHtmlFromFile($sourceHtmlPath),
|
||||
'is_local_file' => true,
|
||||
];
|
||||
} else {
|
||||
for ($pageNumber = 1; $pageNumber <= $pagesToImport; $pageNumber++) {
|
||||
$importSources[] = [
|
||||
'label' => 'Seite ' . $pageNumber,
|
||||
'html' => downloadUrl(buildPagedUrl($baseUrl, $pageNumber)),
|
||||
'is_local_file' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if (!$dryRun) {
|
||||
$stmtImportStart = $pdo->prepare("
|
||||
INSERT INTO app_import_runs (
|
||||
source,
|
||||
source_url,
|
||||
started_at,
|
||||
status,
|
||||
message
|
||||
) VALUES (
|
||||
:source,
|
||||
:source_url,
|
||||
NOW(),
|
||||
'running',
|
||||
NULL
|
||||
)
|
||||
");
|
||||
$stmtImportStart->execute([
|
||||
':source' => DEFAULT_IMPORT_SOURCE,
|
||||
':source_url' => $sourceDirectoryPath !== null ? $sourceDirectoryPath : ($sourceHtmlPath !== null ? $sourceHtmlPath : $baseUrl),
|
||||
]);
|
||||
$importRunId = (int) $pdo->lastInsertId();
|
||||
}
|
||||
|
||||
foreach ($importSources as $sourceIndex => $source) {
|
||||
$pageNumber = $sourceIndex + 1;
|
||||
$html = (string) $source['html'];
|
||||
|
||||
$pageData = parseWebObsPage($html);
|
||||
|
||||
if (empty($pageData['observations'])) {
|
||||
writeMessage(($source['label'] ?? ('Seite ' . $pageNumber)) . ': keine Beobachtungen gefunden.');
|
||||
if (($source['is_local_file'] ?? false) === true) {
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
writeMessage(sprintf(
|
||||
'%s: %d Beobachtungen fuer %s gefunden.',
|
||||
(string) ($source['label'] ?? ('Seite ' . $pageNumber)),
|
||||
count($pageData['observations']),
|
||||
$pageData['target_name'] !== '' ? $pageData['target_name'] : 'T CrB'
|
||||
));
|
||||
|
||||
if ($dryRun) {
|
||||
$totalImported += count($pageData['observations']);
|
||||
continue;
|
||||
}
|
||||
|
||||
$pdo->beginTransaction();
|
||||
|
||||
try {
|
||||
foreach ($pageData['observations'] as $observation) {
|
||||
$statement->execute([
|
||||
':source_row_key' => $observation['source_row_key'],
|
||||
':star_name' => $observation['star_name'],
|
||||
':jd' => $observation['jd'],
|
||||
':observed_at_utc' => $observation['observed_at_utc'],
|
||||
':calendar_date_text' => $observation['calendar_date_text'],
|
||||
':magnitude' => $observation['magnitude'],
|
||||
':magnitude_error' => $observation['magnitude_error'],
|
||||
':filter_code' => $observation['filter_code'],
|
||||
':observer_code' => $observation['observer_code'],
|
||||
':notes_raw' => $observation['notes_raw'],
|
||||
]);
|
||||
|
||||
$affectedRows = (int) $statement->rowCount();
|
||||
$totalUpserts += $affectedRows;
|
||||
if ($affectedRows === 1) {
|
||||
$recordsInserted++;
|
||||
} elseif ($affectedRows >= 2) {
|
||||
$recordsUpdated++;
|
||||
}
|
||||
$totalImported++;
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
} catch (Throwable $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
|
||||
if ($importRunId !== null) {
|
||||
$stmtImportError = $pdo->prepare("
|
||||
UPDATE app_import_runs
|
||||
SET
|
||||
finished_at = NOW(),
|
||||
records_received = :records_received,
|
||||
records_inserted = :records_inserted,
|
||||
records_updated = :records_updated,
|
||||
status = 'error',
|
||||
message = :message
|
||||
WHERE id = :id
|
||||
");
|
||||
$stmtImportError->execute([
|
||||
':records_received' => $totalImported,
|
||||
':records_inserted' => $recordsInserted,
|
||||
':records_updated' => $recordsUpdated,
|
||||
':message' => substr($e->getMessage(), 0, 65000),
|
||||
':id' => $importRunId,
|
||||
]);
|
||||
}
|
||||
|
||||
writeMessage('Import fehlgeschlagen bei ' . (string) ($source['label'] ?? ('Seite ' . $pageNumber)) . ': ' . $e->getMessage(), true);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if ($dryRun) {
|
||||
writeMessage("Dry-Run abgeschlossen. Parsbare Beobachtungen: {$totalImported}.");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if ($importRunId !== null) {
|
||||
$stmtImportFinish = $pdo->prepare("
|
||||
UPDATE app_import_runs
|
||||
SET
|
||||
finished_at = NOW(),
|
||||
records_received = :records_received,
|
||||
records_inserted = :records_inserted,
|
||||
records_updated = :records_updated,
|
||||
status = 'success',
|
||||
message = NULL
|
||||
WHERE id = :id
|
||||
");
|
||||
$stmtImportFinish->execute([
|
||||
':records_received' => $totalImported,
|
||||
':records_inserted' => $recordsInserted,
|
||||
':records_updated' => $recordsUpdated,
|
||||
':id' => $importRunId,
|
||||
]);
|
||||
}
|
||||
|
||||
writeMessage("Import abgeschlossen. Verarbeitete Beobachtungen: {$totalImported}. DB-Upserts: {$totalUpserts}.");
|
||||
exit(0);
|
||||
|
||||
function parseCliArguments(array $argv): array
|
||||
{
|
||||
$options = [
|
||||
'pages' => 1,
|
||||
'dry-run' => false,
|
||||
'help' => false,
|
||||
];
|
||||
|
||||
foreach (array_slice($argv, 1) as $argument) {
|
||||
if ($argument === '--dry-run') {
|
||||
$options['dry-run'] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($argument === '--help' || $argument === '-h') {
|
||||
$options['help'] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (str_starts_with($argument, '--pages=')) {
|
||||
$options['pages'] = (int) substr($argument, 8);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (str_starts_with($argument, '--url=')) {
|
||||
$options['url'] = (string) substr($argument, 6);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (str_starts_with($argument, '--html=')) {
|
||||
$options['html'] = (string) substr($argument, 7);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (str_starts_with($argument, '--dir=')) {
|
||||
$options['dir'] = (string) substr($argument, 6);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
function writeUsage(): void
|
||||
{
|
||||
$usageLines = [
|
||||
'Nutzung:',
|
||||
' php scripts/import/import_tcrb.php',
|
||||
' php scripts/import/import_tcrb.php --pages=3',
|
||||
' php scripts/import/import_tcrb.php --html=C:\pfad\webobs.html --dry-run',
|
||||
' php scripts/import/import_tcrb.php --dir=C:\Users\ich\Desktop\TCrB',
|
||||
'',
|
||||
'Optionen:',
|
||||
' --pages=N Anzahl der zu ladenden Ergebnisseiten, Standard: 1',
|
||||
' --url=URL Basis-URL fuer den Abruf, Standard: AAVSO T CrB CCD',
|
||||
' --html=PFAD Liest die erste Seite aus einer lokalen HTML-Datei statt aus dem Web',
|
||||
' --dir=PFAD Liest alle HTML/TXT-Dateien aus einem Ordner in Dateinamen-Reihenfolge ein',
|
||||
' --dry-run Parst nur und schreibt nichts in die DB',
|
||||
' --help Diese Hilfe anzeigen',
|
||||
];
|
||||
|
||||
foreach ($usageLines as $line) {
|
||||
writeMessage($line);
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeDbConfig(array $config): array
|
||||
{
|
||||
$config['port'] = isset($config['port']) && (int) $config['port'] > 0 ? (int) $config['port'] : 3306;
|
||||
$config['charset'] = isset($config['charset']) && $config['charset'] !== '' ? (string) $config['charset'] : 'utf8mb4';
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
function tableExists(PDO $pdo, string $tableName): bool
|
||||
{
|
||||
$stmt = $pdo->prepare('
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = :table_name
|
||||
');
|
||||
$stmt->execute([':table_name' => $tableName]);
|
||||
|
||||
return (int) $stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
function ensureImportRunsTableExists(PDO $pdo): void
|
||||
{
|
||||
$pdo->exec("
|
||||
CREATE TABLE IF NOT EXISTS `app_import_runs` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`source` varchar(32) NOT NULL,
|
||||
`source_url` varchar(500) DEFAULT NULL,
|
||||
`started_at` datetime NOT NULL,
|
||||
`finished_at` datetime DEFAULT NULL,
|
||||
`records_received` int(11) NOT NULL DEFAULT 0,
|
||||
`records_inserted` int(11) NOT NULL DEFAULT 0,
|
||||
`records_updated` int(11) NOT NULL DEFAULT 0,
|
||||
`status` varchar(32) NOT NULL,
|
||||
`message` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_app_import_runs_source` (`source`),
|
||||
KEY `idx_app_import_runs_started_at` (`started_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
}
|
||||
|
||||
function loadHtmlFromFile(string $path): string
|
||||
{
|
||||
if (!is_file($path)) {
|
||||
throw new RuntimeException("HTML-Datei nicht gefunden: {$path}");
|
||||
}
|
||||
|
||||
$html = file_get_contents($path);
|
||||
if ($html === false || trim($html) === '') {
|
||||
throw new RuntimeException("HTML-Datei konnte nicht gelesen werden: {$path}");
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
function findHtmlFilesInDirectory(string $directoryPath): array
|
||||
{
|
||||
if (!is_dir($directoryPath)) {
|
||||
throw new RuntimeException("Ordner nicht gefunden: {$directoryPath}");
|
||||
}
|
||||
|
||||
$entries = scandir($directoryPath);
|
||||
if ($entries === false) {
|
||||
throw new RuntimeException("Ordner konnte nicht gelesen werden: {$directoryPath}");
|
||||
}
|
||||
|
||||
$filePaths = [];
|
||||
foreach ($entries as $entry) {
|
||||
if ($entry === '.' || $entry === '..') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$fullPath = rtrim($directoryPath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $entry;
|
||||
if (!is_file($fullPath)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$extension = strtolower((string) pathinfo($fullPath, PATHINFO_EXTENSION));
|
||||
if (!in_array($extension, ['html', 'htm', 'txt'], true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$filePaths[] = $fullPath;
|
||||
}
|
||||
|
||||
natsort($filePaths);
|
||||
|
||||
return array_values($filePaths);
|
||||
}
|
||||
|
||||
function buildPagedUrl(string $baseUrl, int $pageNumber): string
|
||||
{
|
||||
$parts = parse_url($baseUrl);
|
||||
if ($parts === false) {
|
||||
throw new RuntimeException('Ungueltige URL: ' . $baseUrl);
|
||||
}
|
||||
|
||||
$query = [];
|
||||
parse_str((string) ($parts['query'] ?? ''), $query);
|
||||
$query['page'] = $pageNumber;
|
||||
|
||||
$scheme = $parts['scheme'] ?? 'https';
|
||||
$host = $parts['host'] ?? '';
|
||||
$path = $parts['path'] ?? '';
|
||||
$queryString = http_build_query($query);
|
||||
|
||||
return $scheme . '://' . $host . $path . ($queryString !== '' ? '?' . $queryString : '');
|
||||
}
|
||||
|
||||
function downloadUrl(string $url): string
|
||||
{
|
||||
if (DIRECTORY_SEPARATOR === '\\' && function_exists('shell_exec')) {
|
||||
$urlBase64 = base64_encode($url);
|
||||
$powerShellScript = str_replace(
|
||||
'__URL_BASE64__',
|
||||
$urlBase64,
|
||||
<<<'PS'
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$url = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('__URL_BASE64__'))
|
||||
$response = Invoke-WebRequest -Uri $url -UseBasicParsing -Headers @{ 'User-Agent' = 'SkyView-TCrB-Importer/1.0' }
|
||||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
$response.Content
|
||||
PS
|
||||
);
|
||||
|
||||
$encodedCommandBinary = function_exists('iconv')
|
||||
? iconv('UTF-8', 'UTF-16LE', $powerShellScript)
|
||||
: $powerShellScript;
|
||||
$encodedCommand = base64_encode($encodedCommandBinary === false ? $powerShellScript : $encodedCommandBinary);
|
||||
$command = 'powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ' . $encodedCommand;
|
||||
$output = shell_exec($command);
|
||||
|
||||
if ($output !== null && trim($output) !== '') {
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
if (function_exists('curl_init')) {
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_CONNECTTIMEOUT => 15,
|
||||
CURLOPT_TIMEOUT => 60,
|
||||
CURLOPT_USERAGENT => 'SkyView-TCrB-Importer/1.0',
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
if ($response === false) {
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
throw new RuntimeException('Download fehlgeschlagen: ' . $error);
|
||||
}
|
||||
|
||||
$httpCode = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($httpCode < 200 || $httpCode >= 300) {
|
||||
throw new RuntimeException("Download fehlgeschlagen. HTTP-Status: {$httpCode}");
|
||||
}
|
||||
|
||||
return (string) $response;
|
||||
}
|
||||
|
||||
$context = stream_context_create([
|
||||
'http' => [
|
||||
'method' => 'GET',
|
||||
'header' => implode("\r\n", [
|
||||
'User-Agent: SkyView-TCrB-Importer/1.0',
|
||||
]),
|
||||
'timeout' => 60,
|
||||
'ignore_errors' => true,
|
||||
],
|
||||
]);
|
||||
|
||||
$response = @file_get_contents($url, false, $context);
|
||||
if ($response === false) {
|
||||
throw new RuntimeException('Download fehlgeschlagen: keine Antwort erhalten.');
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
function parseWebObsPage(string $html): array
|
||||
{
|
||||
libxml_use_internal_errors(true);
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$loaded = $dom->loadHTML($html);
|
||||
libxml_clear_errors();
|
||||
|
||||
if ($loaded === false) {
|
||||
throw new RuntimeException('HTML konnte nicht geparst werden.');
|
||||
}
|
||||
|
||||
$xpath = new DOMXPath($dom);
|
||||
|
||||
$targetName = '';
|
||||
$obsInfoNode = $xpath->query("//p[@id='obsinfo']")->item(0);
|
||||
if ($obsInfoNode instanceof DOMNode) {
|
||||
$obsInfoText = normalizeWhitespace($obsInfoNode->textContent);
|
||||
if (preg_match('/for\s+(.+?)\s+from\s+/i', $obsInfoText, $matches) === 1) {
|
||||
$targetName = trim($matches[1]);
|
||||
}
|
||||
}
|
||||
|
||||
$observations = [];
|
||||
$rowNodes = $xpath->query("//table[contains(@class,'observations')]/tbody/tr[contains(@class,'obs')]");
|
||||
if ($rowNodes === false) {
|
||||
return [
|
||||
'target_name' => $targetName,
|
||||
'observations' => [],
|
||||
];
|
||||
}
|
||||
|
||||
foreach ($rowNodes as $rowNode) {
|
||||
if (!$rowNode instanceof DOMElement) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$rowId = trim((string) $rowNode->getAttribute('id'));
|
||||
$tdNodes = $xpath->query('./td', $rowNode);
|
||||
if ($tdNodes === false || $tdNodes->length < 8) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$starName = normalizeWhitespace($tdNodes->item(1)?->textContent ?? '');
|
||||
$jdText = normalizeWhitespace($tdNodes->item(2)?->textContent ?? '');
|
||||
$calendarDateText = normalizeWhitespace($tdNodes->item(3)?->textContent ?? '');
|
||||
$magnitudeText = normalizeWhitespace($tdNodes->item(4)?->textContent ?? '');
|
||||
$magnitudeErrorText = normalizeWhitespace($tdNodes->item(5)?->textContent ?? '');
|
||||
$filterCode = normalizeWhitespace($tdNodes->item(6)?->textContent ?? '');
|
||||
$observerCode = normalizeWhitespace($tdNodes->item(7)?->textContent ?? '');
|
||||
|
||||
if ($jdText === '' || $magnitudeText === '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$detailRow = $xpath->query("//tr[@id='{$rowId}-detail']")->item(0);
|
||||
$notesRaw = null;
|
||||
|
||||
if ($detailRow instanceof DOMElement) {
|
||||
$detailCells = $xpath->query(".//table[contains(@class,'obs-detail')]/tbody/tr/td", $detailRow);
|
||||
if ($detailCells !== false && $detailCells->length >= 6) {
|
||||
$notesRaw = normalizeWhitespace($detailCells->item(5)?->textContent ?? '');
|
||||
$notesRaw = $notesRaw !== '' && $notesRaw !== '—' ? $notesRaw : null;
|
||||
}
|
||||
}
|
||||
|
||||
$jd = (float) str_replace(',', '.', $jdText);
|
||||
$observedAtUtc = jdToUtcString($jd);
|
||||
|
||||
$observations[] = [
|
||||
'source_row_key' => $rowId !== '' ? $rowId : null,
|
||||
'star_name' => $starName !== '' ? $starName : ($targetName !== '' ? $targetName : 'T CrB'),
|
||||
'jd' => number_format($jd, 6, '.', ''),
|
||||
'observed_at_utc' => $observedAtUtc,
|
||||
'calendar_date_text' => $calendarDateText !== '' ? $calendarDateText : null,
|
||||
'magnitude' => normalizeNumeric($magnitudeText),
|
||||
'magnitude_error' => $magnitudeErrorText !== '' ? normalizeNumeric($magnitudeErrorText) : null,
|
||||
'filter_code' => $filterCode !== '' ? $filterCode : null,
|
||||
'observer_code' => $observerCode !== '' ? $observerCode : null,
|
||||
'notes_raw' => $notesRaw,
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'target_name' => $targetName,
|
||||
'observations' => $observations,
|
||||
];
|
||||
}
|
||||
|
||||
function normalizeWhitespace(string $value): string
|
||||
{
|
||||
$value = html_entity_decode($value, ENT_QUOTES | ENT_HTML5, 'UTF-8');
|
||||
$value = preg_replace('/\s+/u', ' ', trim($value));
|
||||
|
||||
return $value ?? '';
|
||||
}
|
||||
|
||||
function normalizeNumeric(string $value): string
|
||||
{
|
||||
return str_replace(',', '.', trim($value));
|
||||
}
|
||||
|
||||
function jdToUtcString(float $jd): string
|
||||
{
|
||||
$jd += 0.5;
|
||||
$z = (int) floor($jd);
|
||||
$f = $jd - $z;
|
||||
|
||||
if ($z >= 2299161) {
|
||||
$alpha = (int) floor(($z - 1867216.25) / 36524.25);
|
||||
$a = $z + 1 + $alpha - (int) floor($alpha / 4);
|
||||
} else {
|
||||
$a = $z;
|
||||
}
|
||||
|
||||
$b = $a + 1524;
|
||||
$c = (int) floor(($b - 122.1) / 365.25);
|
||||
$d = (int) floor(365.25 * $c);
|
||||
$e = (int) floor(($b - $d) / 30.6001);
|
||||
|
||||
$day = $b - $d - (int) floor(30.6001 * $e) + $f;
|
||||
$month = $e < 14 ? $e - 1 : $e - 13;
|
||||
$year = $month > 2 ? $c - 4716 : $c - 4715;
|
||||
|
||||
$dayInteger = (int) floor($day);
|
||||
$dayFraction = $day - $dayInteger;
|
||||
|
||||
$totalSeconds = (int) round($dayFraction * 86400);
|
||||
if ($totalSeconds >= 86400) {
|
||||
$totalSeconds = 86399;
|
||||
}
|
||||
|
||||
$hours = intdiv($totalSeconds, 3600);
|
||||
$minutes = intdiv($totalSeconds % 3600, 60);
|
||||
$seconds = $totalSeconds % 60;
|
||||
|
||||
return sprintf(
|
||||
'%04d-%02d-%02d %02d:%02d:%02d',
|
||||
$year,
|
||||
$month,
|
||||
$dayInteger,
|
||||
$hours,
|
||||
$minutes,
|
||||
$seconds
|
||||
);
|
||||
}
|
||||
|
||||
function writeMessage(string $message, bool $isError = false): void
|
||||
{
|
||||
$prefix = '[' . date('Y-m-d H:i:s') . '] ';
|
||||
$stream = $isError ? STDERR : STDOUT;
|
||||
fwrite($stream, $prefix . $message . PHP_EOL);
|
||||
}
|
||||
Reference in New Issue
Block a user