diff --git a/.codex-temp/php-server.err.log b/.codex-temp/php-server.err.log index b939a54..bd0859b 100644 --- a/.codex-temp/php-server.err.log +++ b/.codex-temp/php-server.err.log @@ -1,748 +1,56 @@ -[Fri Apr 3 18:33:28 2026] PHP 8.5.4 Development Server (http://localhost:8080) started -[Fri Apr 3 18:33:42 2026] [::1]:55995 Accepted -[Fri Apr 3 18:33:42 2026] [::1]:55995 [200]: GET /index.php -[Fri Apr 3 18:33:42 2026] [::1]:55995 Closing -[Fri Apr 3 18:34:04 2026] [::1]:51412 Accepted -[Fri Apr 3 18:34:04 2026] [::1]:51412 [200]: GET / -[Fri Apr 3 18:34:04 2026] [::1]:51412 Closing -[Fri Apr 3 18:34:04 2026] [::1]:55204 Accepted -[Fri Apr 3 18:34:04 2026] [::1]:55204 [200]: GET /css/style.css -[Fri Apr 3 18:34:04 2026] [::1]:55204 Closing -[Fri Apr 3 18:34:04 2026] [::1]:56847 Accepted -[Fri Apr 3 18:34:04 2026] [::1]:56847 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:04 2026] [::1]:57752 Accepted -[Fri Apr 3 18:34:04 2026] [::1]:57752 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:04 2026] [::1]:56847 Closing -[Fri Apr 3 18:34:04 2026] [::1]:57752 Closing -[Fri Apr 3 18:34:04 2026] [::1]:56820 Accepted -[Fri Apr 3 18:34:04 2026] [::1]:56820 [200]: GET /favicon.ico -[Fri Apr 3 18:34:04 2026] [::1]:56820 Closing -[Fri Apr 3 18:34:05 2026] [::1]:59637 Accepted -[Fri Apr 3 18:34:05 2026] [::1]:59637 [200]: GET /login.php -[Fri Apr 3 18:34:05 2026] [::1]:59637 Closing -[Fri Apr 3 18:34:05 2026] [::1]:57151 Accepted -[Fri Apr 3 18:34:05 2026] [::1]:57151 [200]: GET /css/style.css -[Fri Apr 3 18:34:05 2026] [::1]:57151 Closing -[Fri Apr 3 18:34:05 2026] [::1]:58714 Accepted -[Fri Apr 3 18:34:05 2026] [::1]:58714 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:05 2026] [::1]:63186 Accepted -[Fri Apr 3 18:34:05 2026] [::1]:63186 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:05 2026] [::1]:58714 Closing -[Fri Apr 3 18:34:05 2026] [::1]:63186 Closing -[Fri Apr 3 18:34:05 2026] [::1]:56527 Accepted -[Fri Apr 3 18:34:05 2026] [::1]:56527 [200]: GET /favicon.ico -[Fri Apr 3 18:34:05 2026] [::1]:56527 Closing -[Fri Apr 3 18:34:12 2026] [::1]:53299 Accepted -[Fri Apr 3 18:34:13 2026] [::1]:53299 [302]: POST /login.php -[Fri Apr 3 18:34:13 2026] [::1]:53299 Closing -[Fri Apr 3 18:34:13 2026] [::1]:65390 Accepted -[Fri Apr 3 18:34:14 2026] [::1]:65390 [200]: GET /index.php -[Fri Apr 3 18:34:14 2026] [::1]:65390 Closing -[Fri Apr 3 18:34:14 2026] [::1]:50278 Accepted -[Fri Apr 3 18:34:14 2026] [::1]:50278 [200]: GET /css/style.css -[Fri Apr 3 18:34:14 2026] [::1]:50278 Closing -[Fri Apr 3 18:34:14 2026] [::1]:62705 Accepted -[Fri Apr 3 18:34:14 2026] [::1]:58779 Accepted -[Fri Apr 3 18:34:14 2026] [::1]:62705 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:14 2026] [::1]:58779 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:14 2026] [::1]:62705 Closing -[Fri Apr 3 18:34:14 2026] [::1]:58779 Closing -[Fri Apr 3 18:34:14 2026] [::1]:49876 Accepted -[Fri Apr 3 18:34:15 2026] [::1]:49876 [200]: GET /favicon.ico -[Fri Apr 3 18:34:15 2026] [::1]:49876 Closing -[Fri Apr 3 18:34:19 2026] [::1]:59602 Accepted -[Fri Apr 3 18:34:19 2026] [::1]:59602 [200]: GET /monatsvorhersage.php -[Fri Apr 3 18:34:19 2026] [::1]:59602 Closing -[Fri Apr 3 18:34:19 2026] [::1]:53156 Accepted -[Fri Apr 3 18:34:19 2026] [::1]:53156 [200]: GET /css/style.css -[Fri Apr 3 18:34:19 2026] [::1]:53156 Closing -[Fri Apr 3 18:34:19 2026] [::1]:54777 Accepted -[Fri Apr 3 18:34:19 2026] [::1]:54777 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:19 2026] [::1]:61368 Accepted -[Fri Apr 3 18:34:19 2026] [::1]:61368 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:19 2026] [::1]:54777 Closing -[Fri Apr 3 18:34:19 2026] [::1]:61368 Closing -[Fri Apr 3 18:34:19 2026] [::1]:64711 Accepted -[Fri Apr 3 18:34:20 2026] [::1]:64711 [200]: GET /favicon.ico -[Fri Apr 3 18:34:20 2026] [::1]:64711 Closing -[Fri Apr 3 18:34:23 2026] [::1]:54145 Accepted -[Fri Apr 3 18:34:29 2026] [::1]:54145 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 18:34:29 2026] [::1]:54145 Closing -[Fri Apr 3 18:34:29 2026] [::1]:53932 Accepted -[Fri Apr 3 18:34:29 2026] [::1]:53780 Accepted -[Fri Apr 3 18:34:29 2026] [::1]:53932 [200]: GET /css/style.css -[Fri Apr 3 18:34:29 2026] [::1]:53780 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 18:34:29 2026] [::1]:53932 Closing -[Fri Apr 3 18:34:29 2026] [::1]:53780 Closing -[Fri Apr 3 18:34:29 2026] [::1]:53169 Accepted -[Fri Apr 3 18:34:29 2026] [::1]:53169 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:29 2026] [::1]:56155 Accepted -[Fri Apr 3 18:34:29 2026] [::1]:56155 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:29 2026] [::1]:53169 Closing -[Fri Apr 3 18:34:29 2026] [::1]:56155 Closing -[Fri Apr 3 18:34:29 2026] [::1]:57124 Accepted -[Fri Apr 3 18:34:30 2026] [::1]:57124 [200]: GET /favicon.ico -[Fri Apr 3 18:34:30 2026] [::1]:57124 Closing -[Fri Apr 3 18:34:31 2026] [::1]:53551 Accepted -[Fri Apr 3 18:34:32 2026] [::1]:53551 [200]: GET / -[Fri Apr 3 18:34:32 2026] [::1]:53551 Closing -[Fri Apr 3 18:34:32 2026] [::1]:62736 Accepted -[Fri Apr 3 18:34:32 2026] [::1]:62736 [200]: GET /css/style.css -[Fri Apr 3 18:34:32 2026] [::1]:62736 Closing -[Fri Apr 3 18:34:32 2026] [::1]:60726 Accepted -[Fri Apr 3 18:34:32 2026] [::1]:60615 Accepted -[Fri Apr 3 18:34:32 2026] [::1]:60726 [200]: GET /images/star16x16.png -[Fri Apr 3 18:34:32 2026] [::1]:60615 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:34:32 2026] [::1]:60726 Closing -[Fri Apr 3 18:34:32 2026] [::1]:60615 Closing -[Fri Apr 3 18:34:32 2026] [::1]:60560 Accepted -[Fri Apr 3 18:34:33 2026] [::1]:60560 [200]: GET /favicon.ico -[Fri Apr 3 18:34:33 2026] [::1]:60560 Closing -[Fri Apr 3 18:34:38 2026] [::1]:58778 Accepted -[Fri Apr 3 18:34:38 2026] [::1]:58778 [200]: GET /scripts/import/import_meteorshowers.php -[Fri Apr 3 18:34:38 2026] [::1]:58778 Closing -[Fri Apr 3 18:34:38 2026] [::1]:56370 Accepted -[Fri Apr 3 18:34:39 2026] [::1]:56370 [200]: GET /scripts/import/css/style.css -[Fri Apr 3 18:34:39 2026] [::1]:56370 Closing -[Fri Apr 3 18:34:39 2026] [::1]:54268 Accepted -[Fri Apr 3 18:34:40 2026] [::1]:54268 [200]: GET /scripts/import/images/star16x16.png -[Fri Apr 3 18:34:40 2026] [::1]:54268 Closing -[Fri Apr 3 18:34:40 2026] [::1]:55565 Accepted -[Fri Apr 3 18:34:41 2026] [::1]:55565 [200]: GET /scripts/import/images/star16x16_rays.png -[Fri Apr 3 18:34:41 2026] [::1]:55565 Closing -[Fri Apr 3 18:34:41 2026] [::1]:56183 Accepted -[Fri Apr 3 18:34:42 2026] [::1]:56183 [200]: GET /favicon.ico -[Fri Apr 3 18:34:42 2026] [::1]:56183 Closing -[Fri Apr 3 18:35:20 2026] [::1]:52336 Accepted -[Fri Apr 3 18:35:21 2026] [::1]:52336 [200]: GET /scripts/import/import_meteorshowers.php -[Fri Apr 3 18:35:21 2026] [::1]:52336 Closing -[Fri Apr 3 18:35:21 2026] [::1]:61157 Accepted -[Fri Apr 3 18:35:22 2026] [::1]:61157 [200]: GET /favicon.ico -[Fri Apr 3 18:35:22 2026] [::1]:61157 Closing -[Fri Apr 3 18:36:46 2026] [::1]:53175 Accepted -[Fri Apr 3 18:36:46 2026] [::1]:53175 [200]: GET /scripts/import/import_meteorshowers.php -[Fri Apr 3 18:36:46 2026] [::1]:53175 Closing -[Fri Apr 3 18:36:46 2026] [::1]:60828 Accepted -[Fri Apr 3 18:36:47 2026] [::1]:60828 [200]: GET /scripts/import/css/style.css -[Fri Apr 3 18:36:47 2026] [::1]:60828 Closing -[Fri Apr 3 18:36:47 2026] [::1]:62224 Accepted -[Fri Apr 3 18:36:47 2026] [::1]:50357 Accepted -[Fri Apr 3 18:36:48 2026] [::1]:62224 [200]: GET /scripts/import/images/star16x16.png -[Fri Apr 3 18:36:48 2026] [::1]:62224 Closing -[Fri Apr 3 18:36:49 2026] [::1]:50357 [200]: GET /scripts/import/images/star16x16_rays.png -[Fri Apr 3 18:36:49 2026] [::1]:50357 Closing -[Fri Apr 3 18:36:49 2026] [::1]:53631 Accepted -[Fri Apr 3 18:36:49 2026] [::1]:53631 [200]: GET /favicon.ico -[Fri Apr 3 18:36:49 2026] [::1]:53631 Closing -[Fri Apr 3 18:44:31 2026] [::1]:59929 Accepted -[Fri Apr 3 18:44:36 2026] [::1]:59929 [200]: GET /monatsvorhersage_old.php?year=2026&month=8 -[Fri Apr 3 18:44:36 2026] [::1]:59929 Closing -[Fri Apr 3 18:45:03 2026] [::1]:63306 Accepted -[Fri Apr 3 18:45:09 2026] [::1]:63306 [200]: GET /monatsvorhersage_old.php?year=2026&month=8 -[Fri Apr 3 18:45:09 2026] [::1]:63306 Closing -[Fri Apr 3 18:48:05 2026] [::1]:62679 Accepted -[Fri Apr 3 18:48:10 2026] [::1]:62679 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 18:48:10 2026] [::1]:62679 Closing -[Fri Apr 3 18:48:10 2026] [::1]:49184 Accepted -[Fri Apr 3 18:48:10 2026] [::1]:49184 [200]: GET /css/style.css -[Fri Apr 3 18:48:10 2026] [::1]:49184 Closing -[Fri Apr 3 18:48:10 2026] [::1]:52798 Accepted -[Fri Apr 3 18:48:10 2026] [::1]:52798 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 18:48:10 2026] [::1]:52798 Closing -[Fri Apr 3 18:48:10 2026] [::1]:55547 Accepted -[Fri Apr 3 18:48:10 2026] [::1]:55547 [200]: GET /images/star16x16.png -[Fri Apr 3 18:48:10 2026] [::1]:55238 Accepted -[Fri Apr 3 18:48:10 2026] [::1]:55238 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:48:10 2026] [::1]:55547 Closing -[Fri Apr 3 18:48:10 2026] [::1]:55238 Closing -[Fri Apr 3 18:48:10 2026] [::1]:56364 Accepted -[Fri Apr 3 18:48:11 2026] [::1]:56364 [200]: GET /favicon.ico -[Fri Apr 3 18:48:11 2026] [::1]:56364 Closing -[Fri Apr 3 18:49:14 2026] [::1]:56788 Accepted -[Fri Apr 3 18:49:19 2026] [::1]:56788 [200]: GET /monatsvorhersage_old.php?year=2026&month=8 -[Fri Apr 3 18:49:19 2026] [::1]:56788 Closing -[Fri Apr 3 18:49:19 2026] [::1]:50541 Accepted -[Fri Apr 3 18:49:19 2026] [::1]:50541 [200]: GET /css/style.css -[Fri Apr 3 18:49:19 2026] [::1]:64984 Accepted -[Fri Apr 3 18:49:19 2026] [::1]:50541 Closing -[Fri Apr 3 18:49:19 2026] [::1]:64984 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 18:49:19 2026] [::1]:64984 Closing -[Fri Apr 3 18:49:19 2026] [::1]:59992 Accepted -[Fri Apr 3 18:49:19 2026] [::1]:59556 Accepted -[Fri Apr 3 18:49:19 2026] [::1]:59992 [200]: GET /images/star16x16.png -[Fri Apr 3 18:49:19 2026] [::1]:59556 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:49:19 2026] [::1]:59992 Closing -[Fri Apr 3 18:49:19 2026] [::1]:59556 Closing -[Fri Apr 3 18:49:19 2026] [::1]:50294 Accepted -[Fri Apr 3 18:49:20 2026] [::1]:50294 [200]: GET /favicon.ico -[Fri Apr 3 18:49:20 2026] [::1]:50294 Closing -[Fri Apr 3 18:51:40 2026] [::1]:63754 Accepted -[Fri Apr 3 18:51:46 2026] [::1]:63754 [200]: GET /monatsvorhersage_old.php?year=2026&month=8 -[Fri Apr 3 18:51:46 2026] [::1]:63754 Closing -[Fri Apr 3 18:53:18 2026] [::1]:57294 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:57294 [200]: GET /monatsvorhersage_old.php?year=2026&month=8 -[Fri Apr 3 18:53:24 2026] [::1]:57294 Closing -[Fri Apr 3 18:53:24 2026] [::1]:55563 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:55563 [200]: GET /css/style.css -[Fri Apr 3 18:53:24 2026] [::1]:58259 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:55563 Closing -[Fri Apr 3 18:53:24 2026] [::1]:58259 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 18:53:24 2026] [::1]:58259 Closing -[Fri Apr 3 18:53:24 2026] [::1]:59141 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:59141 [200]: GET /images/star16x16.png -[Fri Apr 3 18:53:24 2026] [::1]:56253 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:56253 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:53:24 2026] [::1]:59141 Closing -[Fri Apr 3 18:53:24 2026] [::1]:56253 Closing -[Fri Apr 3 18:53:24 2026] [::1]:53603 Accepted -[Fri Apr 3 18:53:24 2026] [::1]:53603 [200]: GET /favicon.ico -[Fri Apr 3 18:53:24 2026] [::1]:53603 Closing -[Fri Apr 3 18:57:24 2026] [::1]:60801 Accepted -[Fri Apr 3 18:57:25 2026] [::1]:60801 [200]: GET /meteorshowers.php -[Fri Apr 3 18:57:25 2026] [::1]:60801 Closing -[Fri Apr 3 18:57:48 2026] [::1]:58482 Accepted -[Fri Apr 3 18:57:49 2026] [::1]:58482 [200]: GET /index.php -[Fri Apr 3 18:57:49 2026] [::1]:58482 Closing -[Fri Apr 3 18:57:49 2026] [::1]:53042 Accepted -[Fri Apr 3 18:57:49 2026] [::1]:53042 [200]: GET /css/style.css -[Fri Apr 3 18:57:49 2026] [::1]:53042 Closing -[Fri Apr 3 18:57:49 2026] [::1]:61066 Accepted -[Fri Apr 3 18:57:49 2026] [::1]:58923 Accepted -[Fri Apr 3 18:57:49 2026] [::1]:61066 [200]: GET /images/star16x16.png -[Fri Apr 3 18:57:49 2026] [::1]:58923 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:57:49 2026] [::1]:61066 Closing -[Fri Apr 3 18:57:49 2026] [::1]:58923 Closing -[Fri Apr 3 18:57:49 2026] [::1]:59332 Accepted -[Fri Apr 3 18:57:50 2026] [::1]:59332 [200]: GET /favicon.ico -[Fri Apr 3 18:57:50 2026] [::1]:59332 Closing -[Fri Apr 3 18:57:51 2026] [::1]:63265 Accepted -[Fri Apr 3 18:57:52 2026] [::1]:63265 [200]: GET /meteorshowers.php -[Fri Apr 3 18:57:52 2026] [::1]:63265 Closing -[Fri Apr 3 18:57:52 2026] [::1]:63533 Accepted -[Fri Apr 3 18:57:52 2026] [::1]:63533 [200]: GET /css/style.css -[Fri Apr 3 18:57:52 2026] [::1]:63533 Closing -[Fri Apr 3 18:57:52 2026] [::1]:50081 Accepted -[Fri Apr 3 18:57:52 2026] [::1]:54913 Accepted -[Fri Apr 3 18:57:52 2026] [::1]:50081 [200]: GET /images/star16x16.png -[Fri Apr 3 18:57:52 2026] [::1]:54913 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:57:52 2026] [::1]:50081 Closing -[Fri Apr 3 18:57:52 2026] [::1]:54913 Closing -[Fri Apr 3 18:57:52 2026] [::1]:59072 Accepted -[Fri Apr 3 18:57:52 2026] [::1]:59072 [200]: GET /favicon.ico -[Fri Apr 3 18:57:52 2026] [::1]:59072 Closing -[Fri Apr 3 18:58:19 2026] [::1]:64090 Accepted -[Fri Apr 3 18:58:19 2026] [::1]:64090 [200]: GET /settings.php -[Fri Apr 3 18:58:19 2026] [::1]:64090 Closing -[Fri Apr 3 18:58:19 2026] [::1]:54419 Accepted -[Fri Apr 3 18:58:19 2026] [::1]:54419 [200]: GET /css/style.css -[Fri Apr 3 18:58:19 2026] [::1]:54419 Closing -[Fri Apr 3 18:58:19 2026] [::1]:60884 Accepted -[Fri Apr 3 18:58:19 2026] [::1]:49294 Accepted -[Fri Apr 3 18:58:19 2026] [::1]:60884 [200]: GET /images/star16x16.png -[Fri Apr 3 18:58:19 2026] [::1]:49294 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:58:19 2026] [::1]:60884 Closing -[Fri Apr 3 18:58:19 2026] [::1]:49294 Closing -[Fri Apr 3 18:58:20 2026] [::1]:58993 Accepted -[Fri Apr 3 18:58:20 2026] [::1]:58993 [200]: GET /favicon.ico -[Fri Apr 3 18:58:20 2026] [::1]:58993 Closing -[Fri Apr 3 18:58:24 2026] [::1]:56108 Accepted -[Fri Apr 3 18:58:25 2026] [::1]:56108 [200]: POST /settings.php -[Fri Apr 3 18:58:25 2026] [::1]:56108 Closing -[Fri Apr 3 18:58:25 2026] [::1]:49436 Accepted -[Fri Apr 3 18:58:25 2026] [::1]:49436 [200]: GET /css/style.css -[Fri Apr 3 18:58:25 2026] [::1]:49436 Closing -[Fri Apr 3 18:58:25 2026] [::1]:50060 Accepted -[Fri Apr 3 18:58:25 2026] [::1]:52218 Accepted -[Fri Apr 3 18:58:25 2026] [::1]:50060 [200]: GET /images/star16x16.png -[Fri Apr 3 18:58:25 2026] [::1]:52218 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:58:25 2026] [::1]:50060 Closing -[Fri Apr 3 18:58:25 2026] [::1]:52218 Closing -[Fri Apr 3 18:58:25 2026] [::1]:54880 Accepted -[Fri Apr 3 18:58:26 2026] [::1]:54880 [200]: GET /favicon.ico -[Fri Apr 3 18:58:26 2026] [::1]:54880 Closing -[Fri Apr 3 18:58:28 2026] [::1]:50962 Accepted -[Fri Apr 3 18:58:28 2026] [::1]:50962 [200]: GET /meteorshowers.php -[Fri Apr 3 18:58:28 2026] [::1]:50962 Closing -[Fri Apr 3 18:58:28 2026] [::1]:49723 Accepted -[Fri Apr 3 18:58:28 2026] [::1]:49723 [200]: GET /css/style.css -[Fri Apr 3 18:58:28 2026] [::1]:49723 Closing -[Fri Apr 3 18:58:28 2026] [::1]:58984 Accepted -[Fri Apr 3 18:58:28 2026] [::1]:56485 Accepted -[Fri Apr 3 18:58:28 2026] [::1]:58984 [200]: GET /images/star16x16.png -[Fri Apr 3 18:58:28 2026] [::1]:56485 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 18:58:28 2026] [::1]:58984 Closing -[Fri Apr 3 18:58:28 2026] [::1]:56485 Closing -[Fri Apr 3 18:58:28 2026] [::1]:50844 Accepted -[Fri Apr 3 18:58:29 2026] [::1]:50844 [200]: GET /favicon.ico -[Fri Apr 3 18:58:29 2026] [::1]:50844 Closing -[Fri Apr 3 19:08:05 2026] [::1]:63421 Accepted -[Fri Apr 3 19:08:11 2026] [::1]:63421 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:08:11 2026] [::1]:63421 Closing -[Fri Apr 3 19:08:20 2026] [::1]:61797 Accepted -[Fri Apr 3 19:08:20 2026] [::1]:61797 [200]: GET /monatsvorhersage.php -[Fri Apr 3 19:08:20 2026] [::1]:61797 Closing -[Fri Apr 3 19:08:20 2026] [::1]:54301 Accepted -[Fri Apr 3 19:08:20 2026] [::1]:54301 [200]: GET /css/style.css -[Fri Apr 3 19:08:20 2026] [::1]:54301 Closing -[Fri Apr 3 19:08:20 2026] [::1]:53037 Accepted -[Fri Apr 3 19:08:20 2026] [::1]:49480 Accepted -[Fri Apr 3 19:08:20 2026] [::1]:53037 [200]: GET /images/star16x16.png -[Fri Apr 3 19:08:20 2026] [::1]:49480 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:08:20 2026] [::1]:53037 Closing -[Fri Apr 3 19:08:20 2026] [::1]:49480 Closing -[Fri Apr 3 19:08:20 2026] [::1]:63715 Accepted -[Fri Apr 3 19:08:21 2026] [::1]:63715 [200]: GET /favicon.ico -[Fri Apr 3 19:08:21 2026] [::1]:63715 Closing -[Fri Apr 3 19:08:24 2026] [::1]:61477 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:61477 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:08:29 2026] [::1]:61477 Closing -[Fri Apr 3 19:08:29 2026] [::1]:57646 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:52815 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:57646 [200]: GET /css/style.css -[Fri Apr 3 19:08:29 2026] [::1]:52815 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:08:29 2026] [::1]:57646 Closing -[Fri Apr 3 19:08:29 2026] [::1]:52815 Closing -[Fri Apr 3 19:08:29 2026] [::1]:63573 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:63053 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:63573 [200]: GET /images/star16x16.png -[Fri Apr 3 19:08:29 2026] [::1]:63053 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:08:29 2026] [::1]:63573 Closing -[Fri Apr 3 19:08:29 2026] [::1]:63053 Closing -[Fri Apr 3 19:08:29 2026] [::1]:54963 Accepted -[Fri Apr 3 19:08:29 2026] [::1]:54963 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:08:29 2026] [::1]:54963 Closing -[Fri Apr 3 19:08:29 2026] [::1]:60128 Accepted -[Fri Apr 3 19:08:30 2026] [::1]:60128 [200]: GET /favicon.ico -[Fri Apr 3 19:08:30 2026] [::1]:60128 Closing -[Fri Apr 3 19:08:35 2026] [::1]:60130 Accepted -[Fri Apr 3 19:08:40 2026] [::1]:60130 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:08:40 2026] [::1]:60130 Closing -[Fri Apr 3 19:10:18 2026] [::1]:51297 Accepted -[Fri Apr 3 19:10:24 2026] [::1]:51297 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:10:24 2026] [::1]:51297 Closing -[Fri Apr 3 19:10:25 2026] [::1]:52467 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:52467 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:10:30 2026] [::1]:52467 Closing -[Fri Apr 3 19:10:30 2026] [::1]:57852 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:57852 [200]: GET /css/style.css -[Fri Apr 3 19:10:30 2026] [::1]:62622 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:57852 Closing -[Fri Apr 3 19:10:30 2026] [::1]:62622 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:10:30 2026] [::1]:62622 Closing -[Fri Apr 3 19:10:30 2026] [::1]:57496 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:57496 [200]: GET /images/star16x16.png -[Fri Apr 3 19:10:30 2026] [::1]:57496 Closing -[Fri Apr 3 19:10:30 2026] [::1]:51178 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:51178 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:10:30 2026] [::1]:51178 Closing -[Fri Apr 3 19:10:30 2026] [::1]:56561 Accepted -[Fri Apr 3 19:10:30 2026] [::1]:56561 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:10:30 2026] [::1]:56561 Closing -[Fri Apr 3 19:10:31 2026] [::1]:49294 Accepted -[Fri Apr 3 19:10:31 2026] [::1]:49294 [200]: GET /favicon.ico -[Fri Apr 3 19:10:31 2026] [::1]:49294 Closing -[Fri Apr 3 19:13:50 2026] [::1]:63772 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:63772 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:13:55 2026] [::1]:63772 Closing -[Fri Apr 3 19:13:55 2026] [::1]:64089 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:57514 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:64089 [200]: GET /css/style.css -[Fri Apr 3 19:13:55 2026] [::1]:57514 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:13:55 2026] [::1]:64089 Closing -[Fri Apr 3 19:13:55 2026] [::1]:57514 Closing -[Fri Apr 3 19:13:55 2026] [::1]:52083 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:52083 [200]: GET /images/star16x16.png -[Fri Apr 3 19:13:55 2026] [::1]:57803 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:57803 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:13:55 2026] [::1]:52083 Closing -[Fri Apr 3 19:13:55 2026] [::1]:57803 Closing -[Fri Apr 3 19:13:55 2026] [::1]:59010 Accepted -[Fri Apr 3 19:13:55 2026] [::1]:59010 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:13:55 2026] [::1]:59010 Closing -[Fri Apr 3 19:13:56 2026] [::1]:64375 Accepted -[Fri Apr 3 19:13:56 2026] [::1]:64375 [200]: GET /favicon.ico -[Fri Apr 3 19:13:56 2026] [::1]:64375 Closing -[Fri Apr 3 19:15:31 2026] [::1]:54019 Accepted -[Fri Apr 3 19:15:36 2026] [::1]:54019 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:15:36 2026] [::1]:54019 Closing -[Fri Apr 3 19:16:08 2026] [::1]:64974 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:64974 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:16:13 2026] [::1]:64974 Closing -[Fri Apr 3 19:16:13 2026] [::1]:49441 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:51970 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:49441 [200]: GET /css/style.css -[Fri Apr 3 19:16:13 2026] [::1]:51970 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:16:13 2026] [::1]:49441 Closing -[Fri Apr 3 19:16:13 2026] [::1]:51970 Closing -[Fri Apr 3 19:16:13 2026] [::1]:59287 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:51598 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:59287 [200]: GET /images/star16x16.png -[Fri Apr 3 19:16:13 2026] [::1]:51598 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:16:13 2026] [::1]:59287 Closing -[Fri Apr 3 19:16:13 2026] [::1]:51598 Closing -[Fri Apr 3 19:16:13 2026] [::1]:49606 Accepted -[Fri Apr 3 19:16:13 2026] [::1]:49606 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:16:13 2026] [::1]:49606 Closing -[Fri Apr 3 19:16:13 2026] [::1]:50983 Accepted -[Fri Apr 3 19:16:14 2026] [::1]:50983 [200]: GET /favicon.ico -[Fri Apr 3 19:16:14 2026] [::1]:50983 Closing -[Fri Apr 3 19:16:33 2026] [::1]:49455 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:49455 [200]: GET /monatsvorhersage_old.php?year=2026&month=12 -[Fri Apr 3 19:16:39 2026] [::1]:49455 Closing -[Fri Apr 3 19:16:39 2026] [::1]:52661 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:63304 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:52661 [200]: GET /css/style.css -[Fri Apr 3 19:16:39 2026] [::1]:63304 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:16:39 2026] [::1]:52661 Closing -[Fri Apr 3 19:16:39 2026] [::1]:63304 Closing -[Fri Apr 3 19:16:39 2026] [::1]:56487 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:59433 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:56487 [200]: GET /images/star16x16.png -[Fri Apr 3 19:16:39 2026] [::1]:59433 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:16:39 2026] [::1]:56487 Closing -[Fri Apr 3 19:16:39 2026] [::1]:59433 Closing -[Fri Apr 3 19:16:39 2026] [::1]:57362 Accepted -[Fri Apr 3 19:16:39 2026] [::1]:57362 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:16:39 2026] [::1]:57362 Closing -[Fri Apr 3 19:16:39 2026] [::1]:61331 Accepted -[Fri Apr 3 19:16:40 2026] [::1]:61331 [200]: GET /favicon.ico -[Fri Apr 3 19:16:40 2026] [::1]:61331 Closing -[Fri Apr 3 19:27:34 2026] [::1]:53963 Accepted -[Fri Apr 3 19:27:34 2026] [::1]:53963 [200]: GET /meteorshowers.php -[Fri Apr 3 19:27:34 2026] [::1]:53963 Closing -[Fri Apr 3 19:27:34 2026] [::1]:60622 Accepted -[Fri Apr 3 19:27:34 2026] [::1]:60622 [200]: GET /css/style.css -[Fri Apr 3 19:27:34 2026] [::1]:60622 Closing -[Fri Apr 3 19:27:34 2026] [::1]:64705 Accepted -[Fri Apr 3 19:27:34 2026] [::1]:49187 Accepted -[Fri Apr 3 19:27:34 2026] [::1]:64705 [200]: GET /images/star16x16.png -[Fri Apr 3 19:27:34 2026] [::1]:49187 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:27:34 2026] [::1]:64705 Closing -[Fri Apr 3 19:27:34 2026] [::1]:49187 Closing -[Fri Apr 3 19:27:34 2026] [::1]:57972 Accepted -[Fri Apr 3 19:27:35 2026] [::1]:57972 [200]: GET /favicon.ico -[Fri Apr 3 19:27:35 2026] [::1]:57972 Closing -[Fri Apr 3 19:27:47 2026] [::1]:63915 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:63915 [200]: GET /monatsvorhersage.php -[Fri Apr 3 19:27:52 2026] [::1]:63915 Closing -[Fri Apr 3 19:27:52 2026] [::1]:52819 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:52819 [200]: GET /css/style.css -[Fri Apr 3 19:27:52 2026] [::1]:57847 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:52819 Closing -[Fri Apr 3 19:27:52 2026] [::1]:57847 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:27:52 2026] [::1]:57847 Closing -[Fri Apr 3 19:27:52 2026] [::1]:52228 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:53187 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:52228 [200]: GET /images/star16x16.png -[Fri Apr 3 19:27:52 2026] [::1]:53187 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:27:52 2026] [::1]:52228 Closing -[Fri Apr 3 19:27:52 2026] [::1]:53187 Closing -[Fri Apr 3 19:27:52 2026] [::1]:51302 Accepted -[Fri Apr 3 19:27:52 2026] [::1]:51302 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:27:52 2026] [::1]:51302 Closing -[Fri Apr 3 19:27:52 2026] [::1]:55608 Accepted -[Fri Apr 3 19:27:53 2026] [::1]:55608 [200]: GET /favicon.ico -[Fri Apr 3 19:27:53 2026] [::1]:55608 Closing -[Fri Apr 3 19:34:18 2026] [::1]:59427 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:59427 [200]: GET /jupitersystem.php -[Fri Apr 3 19:34:18 2026] [::1]:59427 Closing -[Fri Apr 3 19:34:18 2026] [::1]:51539 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:53971 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:51539 [200]: GET /css/style.css -[Fri Apr 3 19:34:18 2026] [::1]:53971 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:34:18 2026] [::1]:51539 Closing -[Fri Apr 3 19:34:18 2026] [::1]:53971 Closing -[Fri Apr 3 19:34:18 2026] [::1]:53017 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:53017 [200]: GET /images/star16x16.png -[Fri Apr 3 19:34:18 2026] [::1]:56923 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:56923 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:34:18 2026] [::1]:53017 Closing -[Fri Apr 3 19:34:18 2026] [::1]:56923 Closing -[Fri Apr 3 19:34:18 2026] [::1]:63438 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:63438 [200]: GET /js/three.module.js -[Fri Apr 3 19:34:18 2026] [::1]:63438 Closing -[Fri Apr 3 19:34:18 2026] [::1]:60150 Accepted -[Fri Apr 3 19:34:18 2026] [::1]:60150 [200]: GET /js/three.core.js -[Fri Apr 3 19:34:18 2026] [::1]:62413 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:62413 [200]: GET /favicon.ico -[Fri Apr 3 19:34:19 2026] [::1]:62413 Closing -[Fri Apr 3 19:34:19 2026] [::1]:60150 Closing -[Fri Apr 3 19:34:19 2026] [::1]:49660 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:49660 [200]: GET /jupitersystem.php?grs_api -[Fri Apr 3 19:34:19 2026] [::1]:49660 Closing -[Fri Apr 3 19:34:19 2026] [::1]:56296 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:56296 [200]: GET /images/planets/jupiter_2048.jpg -[Fri Apr 3 19:34:19 2026] [::1]:49733 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:64045 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:57444 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:49733 [200]: GET /images/moons/io.jpg -[Fri Apr 3 19:34:19 2026] [::1]:64045 [200]: GET /images/moons/europa.jpg -[Fri Apr 3 19:34:19 2026] [::1]:54549 Accepted -[Fri Apr 3 19:34:19 2026] [::1]:57444 [200]: GET /images/moons/ganymede.jpg -[Fri Apr 3 19:34:19 2026] [::1]:54549 [200]: GET /images/moons/callisto.jpg -[Fri Apr 3 19:34:19 2026] [::1]:56296 Closing -[Fri Apr 3 19:34:19 2026] [::1]:49733 Closing -[Fri Apr 3 19:34:19 2026] [::1]:57444 Closing -[Fri Apr 3 19:34:19 2026] [::1]:64045 Closing -[Fri Apr 3 19:34:19 2026] [::1]:54549 Closing -[Fri Apr 3 19:34:26 2026] [::1]:60747 Accepted -[Fri Apr 3 19:34:26 2026] [::1]:60747 [200]: GET /images/logoAM.png -[Fri Apr 3 19:34:26 2026] [::1]:60747 Closing -[Fri Apr 3 19:38:39 2026] [::1]:56708 Accepted -[Fri Apr 3 19:38:44 2026] [::1]:56708 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:38:44 2026] [::1]:56708 Closing -[Fri Apr 3 19:38:50 2026] [::1]:56710 Accepted -[Fri Apr 3 19:38:56 2026] [::1]:56710 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:38:56 2026] [::1]:56710 Closing -[Fri Apr 3 19:40:57 2026] [::1]:59669 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:59669 [200]: GET /monatsvorhersage.php -[Fri Apr 3 19:41:03 2026] [::1]:59669 Closing -[Fri Apr 3 19:41:03 2026] [::1]:50751 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:64367 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:50751 [200]: GET /css/style.css -[Fri Apr 3 19:41:03 2026] [::1]:64367 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:41:03 2026] [::1]:50751 Closing -[Fri Apr 3 19:41:03 2026] [::1]:64367 Closing -[Fri Apr 3 19:41:03 2026] [::1]:54669 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:54669 [200]: GET /images/star16x16.png -[Fri Apr 3 19:41:03 2026] [::1]:63084 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:63084 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:41:03 2026] [::1]:54669 Closing -[Fri Apr 3 19:41:03 2026] [::1]:63084 Closing -[Fri Apr 3 19:41:03 2026] [::1]:57496 Accepted -[Fri Apr 3 19:41:03 2026] [::1]:57496 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:41:03 2026] [::1]:57496 Closing -[Fri Apr 3 19:41:03 2026] [::1]:49327 Accepted -[Fri Apr 3 19:41:04 2026] [::1]:49327 [200]: GET /favicon.ico -[Fri Apr 3 19:41:04 2026] [::1]:49327 Closing -[Fri Apr 3 19:41:05 2026] [::1]:59324 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:59324 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 19:41:11 2026] [::1]:59324 Closing -[Fri Apr 3 19:41:11 2026] [::1]:52808 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:63422 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:52808 [200]: GET /css/style.css -[Fri Apr 3 19:41:11 2026] [::1]:63422 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:41:11 2026] [::1]:52808 Closing -[Fri Apr 3 19:41:11 2026] [::1]:63422 Closing -[Fri Apr 3 19:41:11 2026] [::1]:53705 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:53705 [200]: GET /images/star16x16.png -[Fri Apr 3 19:41:11 2026] [::1]:61313 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:61313 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:41:11 2026] [::1]:53705 Closing -[Fri Apr 3 19:41:11 2026] [::1]:61313 Closing -[Fri Apr 3 19:41:11 2026] [::1]:61457 Accepted -[Fri Apr 3 19:41:11 2026] [::1]:61457 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:41:11 2026] [::1]:61457 Closing -[Fri Apr 3 19:41:11 2026] [::1]:61144 Accepted -[Fri Apr 3 19:41:12 2026] [::1]:61144 [200]: GET /favicon.ico -[Fri Apr 3 19:41:12 2026] [::1]:61144 Closing -[Fri Apr 3 19:42:30 2026] [::1]:55014 Accepted -[Fri Apr 3 19:42:36 2026] [::1]:55014 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:42:36 2026] [::1]:55014 Closing -[Fri Apr 3 19:44:26 2026] [::1]:55985 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:55985 [200]: GET /jupitersystem.php -[Fri Apr 3 19:44:26 2026] [::1]:55985 Closing -[Fri Apr 3 19:44:26 2026] [::1]:55563 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:52283 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:55563 [200]: GET /css/style.css -[Fri Apr 3 19:44:26 2026] [::1]:52283 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:44:26 2026] [::1]:55563 Closing -[Fri Apr 3 19:44:26 2026] [::1]:52283 Closing -[Fri Apr 3 19:44:26 2026] [::1]:54539 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:61207 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:54539 [200]: GET /images/star16x16.png -[Fri Apr 3 19:44:26 2026] [::1]:61207 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:44:26 2026] [::1]:54539 Closing -[Fri Apr 3 19:44:26 2026] [::1]:61207 Closing -[Fri Apr 3 19:44:26 2026] [::1]:51376 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:51376 [200]: GET /js/three.module.js -[Fri Apr 3 19:44:26 2026] [::1]:51376 Closing -[Fri Apr 3 19:44:26 2026] [::1]:58649 Accepted -[Fri Apr 3 19:44:26 2026] [::1]:58649 [200]: GET /js/three.core.js -[Fri Apr 3 19:44:26 2026] [::1]:58038 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:58038 [200]: GET /favicon.ico -[Fri Apr 3 19:44:27 2026] [::1]:58038 Closing -[Fri Apr 3 19:44:27 2026] [::1]:58649 Closing -[Fri Apr 3 19:44:27 2026] [::1]:59586 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:59586 [200]: GET /jupitersystem.php?grs_api -[Fri Apr 3 19:44:27 2026] [::1]:59586 Closing -[Fri Apr 3 19:44:27 2026] [::1]:59600 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:59600 [200]: GET /images/planets/jupiter_2048.jpg -[Fri Apr 3 19:44:27 2026] [::1]:49805 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:49805 [200]: GET /images/moons/io.jpg -[Fri Apr 3 19:44:27 2026] [::1]:63920 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:50291 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:49805 Closing -[Fri Apr 3 19:44:27 2026] [::1]:51653 Accepted -[Fri Apr 3 19:44:27 2026] [::1]:63920 [200]: GET /images/moons/europa.jpg -[Fri Apr 3 19:44:27 2026] [::1]:50291 [200]: GET /images/moons/ganymede.jpg -[Fri Apr 3 19:44:27 2026] [::1]:51653 [200]: GET /images/moons/callisto.jpg -[Fri Apr 3 19:44:27 2026] [::1]:50291 Closing -[Fri Apr 3 19:44:27 2026] [::1]:59600 Closing -[Fri Apr 3 19:44:27 2026] [::1]:51653 Closing -[Fri Apr 3 19:44:27 2026] [::1]:63920 Closing -[Fri Apr 3 19:46:27 2026] [::1]:54531 Accepted -[Fri Apr 3 19:46:27 2026] [::1]:54531 [200]: GET /images/logoAM.png -[Fri Apr 3 19:46:27 2026] [::1]:54531 Closing -[Fri Apr 3 19:46:42 2026] [::1]:54533 Accepted -[Fri Apr 3 19:46:48 2026] [::1]:54533 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:46:48 2026] [::1]:54533 Closing -[Fri Apr 3 19:47:05 2026] [::1]:51453 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:51453 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 19:47:12 2026] [::1]:51453 Closing -[Fri Apr 3 19:47:12 2026] [::1]:63972 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:64765 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:63972 [200]: GET /css/style.css -[Fri Apr 3 19:47:12 2026] [::1]:64765 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:47:12 2026] [::1]:63972 Closing -[Fri Apr 3 19:47:12 2026] [::1]:64765 Closing -[Fri Apr 3 19:47:12 2026] [::1]:64051 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:49245 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:64051 [200]: GET /images/star16x16.png -[Fri Apr 3 19:47:12 2026] [::1]:49245 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:47:12 2026] [::1]:64051 Closing -[Fri Apr 3 19:47:12 2026] [::1]:49245 Closing -[Fri Apr 3 19:47:12 2026] [::1]:51600 Accepted -[Fri Apr 3 19:47:12 2026] [::1]:51600 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:47:12 2026] [::1]:51600 Closing -[Fri Apr 3 19:47:12 2026] [::1]:64846 Accepted -[Fri Apr 3 19:47:13 2026] [::1]:64846 [200]: GET /favicon.ico -[Fri Apr 3 19:47:13 2026] [::1]:64846 Closing -[Fri Apr 3 19:54:01 2026] [::1]:52168 Accepted -[Fri Apr 3 19:54:08 2026] [::1]:52168 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:54:08 2026] [::1]:52168 Closing -[Fri Apr 3 19:54:29 2026] [::1]:63821 Accepted -[Fri Apr 3 19:54:35 2026] [::1]:63821 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 19:54:35 2026] [::1]:63821 Closing -[Fri Apr 3 19:55:02 2026] [::1]:64657 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:64657 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 19:55:07 2026] [::1]:64657 Closing -[Fri Apr 3 19:55:07 2026] [::1]:62611 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:57039 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:62611 [200]: GET /css/style.css -[Fri Apr 3 19:55:07 2026] [::1]:57039 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:55:07 2026] [::1]:62611 Closing -[Fri Apr 3 19:55:07 2026] [::1]:57039 Closing -[Fri Apr 3 19:55:07 2026] [::1]:55565 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:49810 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:55565 [200]: GET /images/star16x16.png -[Fri Apr 3 19:55:07 2026] [::1]:49810 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:55:07 2026] [::1]:55565 Closing -[Fri Apr 3 19:55:07 2026] [::1]:49810 Closing -[Fri Apr 3 19:55:07 2026] [::1]:51843 Accepted -[Fri Apr 3 19:55:07 2026] [::1]:51843 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:55:07 2026] [::1]:51843 Closing -[Fri Apr 3 19:55:08 2026] [::1]:64708 Accepted -[Fri Apr 3 19:55:08 2026] [::1]:64708 [200]: GET /favicon.ico -[Fri Apr 3 19:55:08 2026] [::1]:64708 Closing -[Fri Apr 3 19:56:42 2026] [::1]:60236 Accepted -[Fri Apr 3 19:56:47 2026] [::1]:60236 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 19:56:47 2026] [::1]:60236 Closing -[Fri Apr 3 19:56:47 2026] [::1]:65013 Accepted -[Fri Apr 3 19:56:47 2026] [::1]:65013 [200]: GET /css/style.css -[Fri Apr 3 19:56:47 2026] [::1]:53017 Accepted -[Fri Apr 3 19:56:47 2026] [::1]:65013 Closing -[Fri Apr 3 19:56:47 2026] [::1]:53017 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 19:56:47 2026] [::1]:53017 Closing -[Fri Apr 3 19:56:47 2026] [::1]:59924 Accepted -[Fri Apr 3 19:56:47 2026] [::1]:59924 [200]: GET /images/star16x16.png -[Fri Apr 3 19:56:47 2026] [::1]:56687 Accepted -[Fri Apr 3 19:56:47 2026] [::1]:59924 Closing -[Fri Apr 3 19:56:47 2026] [::1]:56687 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 19:56:47 2026] [::1]:56687 Closing -[Fri Apr 3 19:56:48 2026] [::1]:61438 Accepted -[Fri Apr 3 19:56:48 2026] [::1]:61438 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 19:56:48 2026] [::1]:61438 Closing -[Fri Apr 3 19:56:48 2026] [::1]:60578 Accepted -[Fri Apr 3 19:56:48 2026] [::1]:60578 [200]: GET /favicon.ico -[Fri Apr 3 19:56:48 2026] [::1]:60578 Closing -[Fri Apr 3 20:02:39 2026] [::1]:62230 Accepted -[Fri Apr 3 20:02:45 2026] [::1]:62230 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 20:02:45 2026] [::1]:62230 Closing -[Fri Apr 3 20:02:50 2026] [::1]:63167 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:63167 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 20:02:57 2026] [::1]:63167 Closing -[Fri Apr 3 20:02:57 2026] [::1]:64749 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:64749 [200]: GET /css/style.css -[Fri Apr 3 20:02:57 2026] [::1]:53760 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:64749 Closing -[Fri Apr 3 20:02:57 2026] [::1]:53760 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 20:02:57 2026] [::1]:53760 Closing -[Fri Apr 3 20:02:57 2026] [::1]:50625 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:56453 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:50625 [200]: GET /images/star16x16.png -[Fri Apr 3 20:02:57 2026] [::1]:56453 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 20:02:57 2026] [::1]:50625 Closing -[Fri Apr 3 20:02:57 2026] [::1]:56453 Closing -[Fri Apr 3 20:02:57 2026] [::1]:50074 Accepted -[Fri Apr 3 20:02:57 2026] [::1]:50074 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 20:02:57 2026] [::1]:50074 Closing -[Fri Apr 3 20:02:57 2026] [::1]:59868 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:59868 [200]: GET /favicon.ico -[Fri Apr 3 20:02:58 2026] [::1]:59868 Closing -[Fri Apr 3 20:02:58 2026] [::1]:52829 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:52829 [200]: GET /jupitersystem.php -[Fri Apr 3 20:02:58 2026] [::1]:52829 Closing -[Fri Apr 3 20:02:58 2026] [::1]:62831 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:62831 [200]: GET /css/style.css -[Fri Apr 3 20:02:58 2026] [::1]:56907 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:56907 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 20:02:58 2026] [::1]:62831 Closing -[Fri Apr 3 20:02:58 2026] [::1]:56907 Closing -[Fri Apr 3 20:02:58 2026] [::1]:50191 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:58317 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:50191 [200]: GET /images/star16x16.png -[Fri Apr 3 20:02:58 2026] [::1]:58317 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 20:02:58 2026] [::1]:50191 Closing -[Fri Apr 3 20:02:58 2026] [::1]:58317 Closing -[Fri Apr 3 20:02:58 2026] [::1]:49612 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:49612 [200]: GET /js/three.module.js -[Fri Apr 3 20:02:58 2026] [::1]:49612 Closing -[Fri Apr 3 20:02:58 2026] [::1]:57626 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:51326 Accepted -[Fri Apr 3 20:02:58 2026] [::1]:51326 [200]: GET /js/three.core.js -[Fri Apr 3 20:02:59 2026] [::1]:57626 [200]: GET /favicon.ico -[Fri Apr 3 20:02:59 2026] [::1]:57626 Closing -[Fri Apr 3 20:02:59 2026] [::1]:51326 Closing -[Fri Apr 3 20:02:59 2026] [::1]:60870 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:60870 [200]: GET /jupitersystem.php?grs_api -[Fri Apr 3 20:02:59 2026] [::1]:60870 Closing -[Fri Apr 3 20:02:59 2026] [::1]:51387 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:50529 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:62844 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:51387 [200]: GET /images/planets/jupiter_2048.jpg -[Fri Apr 3 20:02:59 2026] [::1]:52071 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:50529 [200]: GET /images/moons/io.jpg -[Fri Apr 3 20:02:59 2026] [::1]:62844 [200]: GET /images/moons/europa.jpg -[Fri Apr 3 20:02:59 2026] [::1]:52881 Accepted -[Fri Apr 3 20:02:59 2026] [::1]:52071 [200]: GET /images/moons/ganymede.jpg -[Fri Apr 3 20:02:59 2026] [::1]:52881 [200]: GET /images/moons/callisto.jpg -[Fri Apr 3 20:02:59 2026] [::1]:50529 Closing -[Fri Apr 3 20:02:59 2026] [::1]:52071 Closing -[Fri Apr 3 20:02:59 2026] [::1]:51387 Closing -[Fri Apr 3 20:03:00 2026] [::1]:62844 Closing -[Fri Apr 3 20:03:00 2026] [::1]:52881 Closing -[Fri Apr 3 20:08:07 2026] [::1]:53517 Accepted -[Fri Apr 3 20:08:13 2026] [::1]:53517 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 -[Fri Apr 3 20:08:13 2026] [::1]:53517 Closing -[Fri Apr 3 20:08:45 2026] [::1]:57076 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:57076 [200]: GET /monatsvorhersage_old.php -[Fri Apr 3 20:08:51 2026] [::1]:57076 Closing -[Fri Apr 3 20:08:51 2026] [::1]:49850 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:49850 [200]: GET /css/style.css -[Fri Apr 3 20:08:51 2026] [::1]:49850 Closing -[Fri Apr 3 20:08:51 2026] [::1]:58903 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:58903 [200]: GET /js/astronomy.browser.min.js -[Fri Apr 3 20:08:51 2026] [::1]:58903 Closing -[Fri Apr 3 20:08:51 2026] [::1]:63669 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:62908 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:63669 [200]: GET /images/star16x16.png -[Fri Apr 3 20:08:51 2026] [::1]:62908 [200]: GET /images/star16x16_rays.png -[Fri Apr 3 20:08:51 2026] [::1]:63669 Closing -[Fri Apr 3 20:08:51 2026] [::1]:62908 Closing -[Fri Apr 3 20:08:51 2026] [::1]:63413 Accepted -[Fri Apr 3 20:08:51 2026] [::1]:63413 [200]: GET /images/moons/moon4geocron.png -[Fri Apr 3 20:08:51 2026] [::1]:63413 Closing -[Fri Apr 3 20:08:51 2026] [::1]:62755 Accepted -[Fri Apr 3 20:08:52 2026] [::1]:62755 [200]: GET /favicon.ico -[Fri Apr 3 20:08:52 2026] [::1]:62755 Closing +[Sat Apr 4 18:16:50 2026] PHP Warning: Module "mysqli" is already loaded in Unknown on line 0 +[Sat Apr 4 18:16:50 2026] PHP 8.4.5 Development Server (http://127.0.0.1:8000) started +[Sat Apr 4 18:16:52 2026] 127.0.0.1:65522 Accepted +[Sat Apr 4 18:16:52 2026] 127.0.0.1:65522 Closed without sending a request; it was probably just an unused speculative preconnection +[Sat Apr 4 18:16:52 2026] 127.0.0.1:65522 Closing +[Sat Apr 4 18:16:58 2026] 127.0.0.1:57361 Accepted +[Sat Apr 4 18:16:58 2026] 127.0.0.1:57361 [200]: GET / +[Sat Apr 4 18:16:58 2026] 127.0.0.1:57361 Closing +[Sat Apr 4 18:17:02 2026] 127.0.0.1:63920 Accepted +[Sat Apr 4 18:17:03 2026] 127.0.0.1:63920 [200]: GET / +[Sat Apr 4 18:17:03 2026] 127.0.0.1:63920 Closing +[Sat Apr 4 18:17:03 2026] 127.0.0.1:61046 Accepted +[Sat Apr 4 18:17:03 2026] 127.0.0.1:61046 [200]: GET /css/style.css +[Sat Apr 4 18:17:03 2026] 127.0.0.1:61046 Closing +[Sat Apr 4 18:17:03 2026] 127.0.0.1:56092 Accepted +[Sat Apr 4 18:17:03 2026] 127.0.0.1:52992 Accepted +[Sat Apr 4 18:17:03 2026] 127.0.0.1:56092 [200]: GET /images/star16x16.png +[Sat Apr 4 18:17:03 2026] 127.0.0.1:52992 [200]: GET /images/star16x16_rays.png +[Sat Apr 4 18:17:03 2026] 127.0.0.1:56092 Closing +[Sat Apr 4 18:17:03 2026] 127.0.0.1:52992 Closing +[Sat Apr 4 18:17:03 2026] 127.0.0.1:58215 Accepted +[Sat Apr 4 18:17:04 2026] 127.0.0.1:58215 [200]: GET /favicon.ico +[Sat Apr 4 18:17:04 2026] 127.0.0.1:58215 Closing +[Sat Apr 4 18:17:04 2026] 127.0.0.1:61445 Accepted +[Sat Apr 4 18:17:23 2026] 127.0.0.1:50543 Accepted +[Sat Apr 4 18:17:23 2026] 127.0.0.1:50543 [200]: GET / +[Sat Apr 4 18:17:23 2026] 127.0.0.1:50543 Closing +[Sat Apr 4 18:17:24 2026] 127.0.0.1:50544 Accepted +[Sat Apr 4 18:17:24 2026] 127.0.0.1:50544 Closed without sending a request; it was probably just an unused speculative preconnection +[Sat Apr 4 18:17:24 2026] 127.0.0.1:50544 Closing +[Sat Apr 4 18:19:23 2026] 127.0.0.1:61445 Closed without sending a request; it was probably just an unused speculative preconnection +[Sat Apr 4 18:19:23 2026] 127.0.0.1:61445 Closing +[Sat Apr 4 18:24:36 2026] 127.0.0.1:59494 Accepted +[Sat Apr 4 18:24:42 2026] 127.0.0.1:59494 [200]: GET /monatsvorhersage.php +[Sat Apr 4 18:24:42 2026] 127.0.0.1:59494 Closing +[Sat Apr 4 18:24:42 2026] 127.0.0.1:57151 Accepted +[Sat Apr 4 18:24:42 2026] 127.0.0.1:57151 [200]: GET /css/style.css +[Sat Apr 4 18:24:42 2026] 127.0.0.1:57151 Closing +[Sat Apr 4 18:24:43 2026] 127.0.0.1:63199 Accepted +[Sat Apr 4 18:24:43 2026] 127.0.0.1:55942 Accepted +[Sat Apr 4 18:24:43 2026] 127.0.0.1:63199 [200]: GET /js/astronomy.browser.min.js +[Sat Apr 4 18:24:43 2026] 127.0.0.1:56767 Accepted +[Sat Apr 4 18:24:43 2026] 127.0.0.1:55942 [200]: GET /images/star16x16.png +[Sat Apr 4 18:24:43 2026] 127.0.0.1:56767 [200]: GET /images/star16x16_rays.png +[Sat Apr 4 18:24:43 2026] 127.0.0.1:63199 Closing +[Sat Apr 4 18:24:43 2026] 127.0.0.1:55942 Closing +[Sat Apr 4 18:24:43 2026] 127.0.0.1:56767 Closing +[Sat Apr 4 18:24:43 2026] 127.0.0.1:65156 Accepted +[Sat Apr 4 18:24:43 2026] 127.0.0.1:65156 [200]: GET /images/moons/moon4geocron.png +[Sat Apr 4 18:24:43 2026] 127.0.0.1:65156 Closing +[Sat Apr 4 18:24:43 2026] 127.0.0.1:56288 Accepted +[Sat Apr 4 18:24:44 2026] 127.0.0.1:56288 [200]: GET /favicon.ico +[Sat Apr 4 18:24:44 2026] 127.0.0.1:56288 Closing +[Sat Apr 4 18:24:44 2026] 127.0.0.1:56614 Accepted +[Sat Apr 4 18:25:51 2026] 127.0.0.1:56614 Closed without sending a request; it was probably just an unused speculative preconnection +[Sat Apr 4 18:25:51 2026] 127.0.0.1:56614 Closing diff --git a/README_LOCAL_WEBSERVER.md b/README_LOCAL_WEBSERVER.md index 7f26df6..92fd67b 100644 --- a/README_LOCAL_WEBSERVER.md +++ b/README_LOCAL_WEBSERVER.md @@ -1,22 +1,22 @@ -# Lokaler PHP-Webserver auf diesem Rechner +# Lokaler PHP-Webserver -Diese Anleitung gilt fuer den Rechner `ARBEITSPLATZTM`. +Diese Anleitung enthaelt die lokalen Startbefehle fuer mehrere Rechner. -## PHP-Pfad +## ARBEITSPLATZTM + +### PHP-Pfad `E:\php\php.exe` -## Projektverzeichnis +### Projektverzeichnis `C:\Users\HP\source\repos\skyview.astronomiemuseum.de` -## Document-Root +### Document-Root `C:\Users\HP\source\repos\skyview.astronomiemuseum.de\public` -## Server starten - -Im Projektordner: +### Server starten ```powershell Set-Location C:\Users\HP\source\repos\skyview.astronomiemuseum.de @@ -27,7 +27,7 @@ Dann ist das Projekt unter folgender URL erreichbar: `http://127.0.0.1:8000/` -## Optional: anderer Port +### Optional: anderer Port Wenn Port `8000` bereits belegt ist: @@ -36,6 +36,40 @@ Set-Location C:\Users\HP\source\repos\skyview.astronomiemuseum.de & 'E:\php\php.exe' -S 127.0.0.1:8001 -t public ``` +## THOMASDESKTOP + +### PHP-Pfad + +`C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe` + +### Projektverzeichnis + +`C:\Users\ich\source\repos\skyview.astronomiemuseum.de` + +### Document-Root + +`C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public` + +### Server starten + +```powershell +Set-Location C:\Users\ich\source\repos\skyview.astronomiemuseum.de +& 'C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe' -S 127.0.0.1:8000 -t public +``` + +Dann ist das Projekt unter folgender URL erreichbar: + +`http://127.0.0.1:8000/` + +### Optional: anderer Port + +Wenn Port `8000` bereits belegt ist: + +```powershell +Set-Location C:\Users\ich\source\repos\skyview.astronomiemuseum.de +& 'C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe' -S 127.0.0.1:8001 -t public +``` + ## Server beenden Im laufenden Terminal: diff --git a/public/monatsvorhersage.php b/public/monatsvorhersage.php index b82d2f6..ab14485 100644 --- a/public/monatsvorhersage.php +++ b/public/monatsvorhersage.php @@ -11,20 +11,130 @@ $publicBasePath = './'; $currentYear = (int) date('Y'); $selectedYear = isset($_GET['year']) ? (int) $_GET['year'] : $currentYear; $selectedMonth = isset($_GET['month']) ? max(1, min(12, (int) $_GET['month'])) : (int) date('n'); +// ------------------------------------------------------------------------- +// Grenzwerte fuer Sternkarte und Objektanzeige +// ------------------------------------------------------------------------- +// Maximale Helligkeit (Magnitude) der Sterne, die aus der Datenbank geladen +// werden. Hoehere Werte laden mehr, aber auch schwaechere Sterne. $starDatabaseMagnitudeLimit = 6.0; + +// Maximale Helligkeit der Sterne, die auf der Monats-Sternkarte sichtbar +// gezeichnet werden sollen. $starDisplayMagnitudeLimit = 4.4; + +// Sterne bis zu dieser Helligkeit erhalten auf der Sternkarte einen Namen. $starLabelMagnitudeLimit = 2.0; -$messierDatabaseMagnitudeLimit = 4.0; + +// Maximale Helligkeit der Messier-Objekte, die aus der Datenbank geladen +// werden. +$messierDatabaseMagnitudeLimit = 2.0; + +// Messier-Objekte bis zu dieser Helligkeit werden auf der Monatskarte +// eingeblendet. $messierDisplayMagnitudeLimit = 1.0; + +// ------------------------------------------------------------------------- +// Grenzwerte fuer Monatsereignisse +// ------------------------------------------------------------------------- +// Maximaler Winkelabstand fuer Begegnungen zwischen Mond und Planeten. $moonPlanetMaxSeparationDeg = 1.5; + +// Maximaler Winkelabstand fuer Begegnungen zwischen Mond und ausgewaehlten +// Sternhaufen wie Plejaden oder Praesepe. +$moonDeepSkyMaxSeparationDeg = 1.0; + +// Maximaler Winkelabstand fuer Begegnungen zwischen hellen Planeten und +// ausgewaehlten hellen Sternen wie Regulus oder Spica. +$planetBrightStarMaxSeparationDeg = 1.0; + +// Maximaler Winkelabstand fuer Planet-Planet-Konjunktionen. $planetConjunctionMaxSeparationDeg = 1.0; + +// Nur Sterne bis zu dieser Helligkeit werden fuer Mondbedeckungen +// beruecksichtigt. $moonOccultationMaxMag = 2.0; +// ------------------------------------------------------------------------- +// Schwellen fuer "Gute Satelliten-Ueberfluege" +// ------------------------------------------------------------------------- +// Es wird nur der Favoriten-Satellit des angemeldeten Users geprueft. +// +// Ein Ueberflug zaehlt als guter Beobachtungstermin nur dann, wenn er am +// Hoehepunkt mindestens diese Hoehe ueber dem Horizont erreicht. +$favoriteSatelliteBestPassMinAltitudeDeg = 80.0; + +// Gleichzeitig muss die Sonne zum Maximum des Ueberflugs mindestens so weit +// unter dem Horizont stehen. -12 Grad entspricht dem Beginn/Ende der +// nautischen Daemmerung und sorgt fuer ausreichend dunklen Himmel. +$favoriteSatelliteBestPassMaxSunAltitudeDeg = -14.0; + +// Optional koennen wir die Liste auf die erste Nachthaelfte begrenzen. +// "Erste Nachthaelfte" ist hier bewusst pragmatisch als lokaler Abend vor +// Mitternacht definiert. Ueberfluege nach 00:00 Ortszeit werden damit +// ausgefiltert. +$favoriteSatelliteBestPassOnlyFirstNightHalf = true; + +// Optional koennen wir nur besonders helle Ueberfluege anzeigen. +// Bei Magnituden gilt: kleinere Werte sind heller. 0.0 mag bedeutet also, +// dass nur Ueberfluege mit Peak-Helligkeit von 0 mag oder heller bleiben. +$favoriteSatelliteBestPassMaxPeakMagnitude = 0.0; + +// ------------------------------------------------------------------------- +// Schwellen fuer "Gute Merkur-Sichtbarkeit" +// ------------------------------------------------------------------------- +// Gute Merkur-Sichtbarkeit wird nicht nur ueber Elongation definiert, sondern +// ueber echte Beobachtbarkeit in der Daemmerung. +// Geprueft wird pro Tag: +// morgens eine feste Zahl Minuten VOR Sonnenaufgang, +// abends eine feste Zahl Minuten NACH Sonnenuntergang. +$mercuryGoodVisibilitySampleOffsetMinutes = 45; + +// Merkur muss zum Pruefzeitpunkt mindestens diese Hoehe ueber dem Horizont +// erreichen, damit der Tag als gut sichtbar gilt. +$mercuryGoodVisibilityMinAltitudeDeg = 7.0; + +// Gleichzeitig muss die Sonne ausreichend tief unter dem Horizont stehen. +// So vermeiden wir Treffer, bei denen Merkur zwar formal sichtbar waere, aber +// noch zu stark in der hellen Daemmerung untergeht. +$mercuryGoodVisibilityMaxSunAltitudeDeg = -3.0; + +// Erst ab dieser Anzahl aufeinanderfolgender guter Tage erzeugen wir ein +// Monatsereignis. Einzelne Ausreisser-Tage werden dadurch herausgefiltert. +$mercuryGoodVisibilityMinConsecutiveDays = 3; + +// ------------------------------------------------------------------------- +// Schwellen fuer "Planetenparade" +// ------------------------------------------------------------------------- +// Geprueft wird morgens eine feste Zahl Minuten VOR Sonnenaufgang und abends +// eine feste Zahl Minuten NACH Sonnenuntergang. +$planetParadeSampleOffsetMinutes = 45; + +// Ein Planet zaehlt fuer die Parade nur dann mit, wenn er zum Pruefzeitpunkt +// mindestens diese Hoehe ueber dem Horizont erreicht. +$planetParadeMinAltitudeDeg = 7.0; + +// Gleichzeitig muss die Sonne bereits tief genug unter dem Horizont stehen, +// damit die Parade nicht nur rechnerisch, sondern auch praktisch sichtbar ist. +$planetParadeMaxSunAltitudeDeg = -4.0; + +// Die beteiligten Planeten muessen innerhalb dieses Azimutbogens liegen. +// So vermeiden wir Treffer, bei denen die Planeten zu weit ueber den Himmel +// verteilt sind und nicht mehr als zusammenhaengende Parade wirken. +$planetParadeMaxAzimuthSpanDeg = 120.0; + +// Mindestens so viele helle Planeten muessen gleichzeitig sichtbar sein, +// damit wir von einer Planetenparade sprechen. +$planetParadeMinPlanetCount = 4; + +// Erst ab dieser Anzahl aufeinanderfolgender Tage erzeugen wir ein Ereignis. +// Das filtert kurzlebige Ein-Tages-Treffer heraus. +$planetParadeMinConsecutiveDays = 2; + $years = range($currentYear - 2, $currentYear + 5); $months = [ 1 => 'Januar', 2 => 'Februar', - 3 => 'Maerz', + 3 => 'März', 4 => 'April', 5 => 'Mai', 6 => 'Juni', @@ -59,6 +169,11 @@ $moonData = null; $moonPhaseEvents = []; $goldenHandleEvents = []; $moonPlanetApproaches = []; +$moonDeepSkyApproaches = []; +$planetBrightStarApproaches = []; +$mercuryGoodVisibilityEvents = []; +$planetParadeEvents = []; +$planetConstellationChangeEvents = []; $planetConjunctions = []; $eclipseEvents = []; $moonApsisEvents = []; @@ -67,8 +182,12 @@ $innerPlanetElongationEvents = []; $venusPeakMagnitudeEvents = []; $outerPlanetEvents = []; $outerPlanetStationEvents = []; +$jupiterMoonSideEvents = []; $moonOccultations = []; $meteorShowerPeaks = []; +$favoriteSatellitePasses = []; +$favoriteSatelliteName = null; +$favoriteSatellitePayload = []; $seasonChanges = []; $timeChanges = []; $monthEventList = []; @@ -139,6 +258,133 @@ if (!function_exists('monthForecastRadiantIsVisible')) { } } +if (!function_exists('monthForecastTleChecksum')) { + function monthForecastTleChecksum(string $line): int + { + $sum = 0; + for ($i = 0; $i < 68; $i++) { + $c = $line[$i] ?? ' '; + if (ctype_digit($c)) { + $sum += (int) $c; + } elseif ($c === '-') { + $sum += 1; + } + } + + return $sum % 10; + } +} + +if (!function_exists('monthForecastTleExp')) { + function monthForecastTleExp(float $value): string + { + if (abs($value) < 1e-99) { + return ' 00000-0'; + } + + $sign = $value >= 0 ? '+' : '-'; + $abs = abs($value); + $exp = (int) floor(log10($abs)) + 1; + $mantissa = (int) round($abs / pow(10, $exp) * 1e5); + if ($mantissa >= 100000) { + $mantissa = 10000; + $exp++; + } + + $expSign = $exp >= 0 ? '+' : '-'; + return sprintf('%s%05d%s%d', $sign, $mantissa, $expSign, abs($exp)); + } +} + +if (!function_exists('monthForecastTleMmDot')) { + function monthForecastTleMmDot(float $value): string + { + $sign = $value >= 0 ? ' ' : '-'; + return sprintf('%s.%08d', $sign, (int) round(abs($value) * 1e8)); + } +} + +if (!function_exists('monthForecastTleEpoch')) { + function monthForecastTleEpoch(string $epochStr): string + { + $dt = new DateTimeImmutable($epochStr, new DateTimeZone('UTC')); + $yy = (int) $dt->format('Y') % 100; + $jan1 = new DateTimeImmutable($dt->format('Y') . '-01-01 00:00:00', new DateTimeZone('UTC')); + $secs = (float) $dt->format('U') - (float) $jan1->format('U'); + $day = $secs / 86400.0 + 1.0; + + return sprintf('%02d%012.8f', $yy, $day); + } +} + +if (!function_exists('monthForecastTleIntlDesig')) { + function monthForecastTleIntlDesig(?string $objectId): string + { + if (!$objectId) { + return str_repeat(' ', 8); + } + + if (preg_match('/^(\d{4})-(\d+)([A-Z]*)$/i', trim($objectId), $match)) { + $yy = substr($match[1], 2, 2); + $launch = str_pad($match[2], 3, '0', STR_PAD_LEFT); + $piece = str_pad(strtoupper($match[3]), 3, ' ', STR_PAD_RIGHT); + return substr(str_pad($yy . $launch . $piece, 8, ' '), 0, 8); + } + + return str_pad(substr($objectId, 0, 8), 8); + } +} + +if (!function_exists('monthForecastBuildTleLine1')) { + function monthForecastBuildTleLine1(array $sat, array $tle): string + { + $norad = (int) ($sat['norad_cat_id'] ?? 0); + $class = in_array($sat['classification_type'] ?? '', ['U', 'C', 'S'], true) + ? (string) $sat['classification_type'] + : 'U'; + + $line = sprintf( + '1 %05d%1s %-8s %14s %10s %8s %8s %1d %4d', + $norad, + $class, + monthForecastTleIntlDesig($sat['object_id'] ?? null), + monthForecastTleEpoch((string) ($tle['epoch'] ?? '')), + monthForecastTleMmDot((float) ($tle['mean_motion_dot'] ?? 0)), + monthForecastTleExp((float) ($tle['mean_motion_ddot'] ?? 0)), + monthForecastTleExp((float) ($tle['bstar'] ?? 0)), + (int) ($tle['ephemeris_type'] ?? 0), + (int) ($tle['element_set_no'] ?? 0) + ); + $line = str_pad($line, 68); + + return $line . monthForecastTleChecksum($line); + } +} + +if (!function_exists('monthForecastBuildTleLine2')) { + function monthForecastBuildTleLine2(array $sat, array $tle): string + { + $norad = (int) ($sat['norad_cat_id'] ?? 0); + $ecc = (float) ($tle['eccentricity'] ?? 0); + $eccStr = substr(sprintf('%.7f', $ecc), 2); + + $line = sprintf( + '2 %05d %8.4f %8.4f %7s %8.4f %8.4f %11.8f%5d', + $norad, + (float) ($tle['inclination'] ?? 0), + (float) ($tle['ra_of_asc_node'] ?? 0), + $eccStr, + (float) ($tle['arg_of_pericenter'] ?? 0), + (float) ($tle['mean_anomaly'] ?? 0), + (float) ($tle['mean_motion'] ?? 0), + (int) ($tle['rev_at_epoch'] ?? 0) + ); + $line = str_pad($line, 68); + + return $line . monthForecastTleChecksum($line); + } +} + if (!function_exists('findMonthForecastSolarLongitudeCrossing')) { function findMonthForecastSolarLongitudeCrossing( DateTimeImmutable $rangeStartLocal, @@ -178,6 +424,270 @@ if (!function_exists('findMonthForecastSolarLongitudeCrossing')) { } } +if (!function_exists('buildObservationTipInsertSql')) { + function buildObservationTipInsertSql(array $events, DateTimeZone $timezone): string + { + $rows = []; + + foreach ($events as $event) { + if (!is_array($event)) { + continue; + } + + $tip = trim((string) ($event['event'] ?? '')); + if ($tip === '') { + continue; + } + + $moment = null; + $localIso = trim((string) ($event['local_iso'] ?? '')); + if ($localIso !== '') { + try { + $moment = new DateTimeImmutable($localIso); + } catch (Throwable $e) { + $moment = null; + } + } + + if (!$moment instanceof DateTimeImmutable) { + $date = trim((string) ($event['date'] ?? '')); + $time = trim((string) ($event['time'] ?? '')); + if ($date !== '' && $time !== '') { + $moment = DateTimeImmutable::createFromFormat('d.m.Y H:i', $date . ' ' . $time, $timezone) ?: null; + } + } + + if (!$moment instanceof DateTimeImmutable) { + continue; + } + + $rows[] = sprintf( + "('%s', '%s')", + $moment->setTimezone($timezone)->format('Y-m-d H:i:s'), + str_replace("'", "''", $tip) + ); + } + + if ($rows === []) { + return ''; + } + + return "INSERT INTO `astro_sonobs_observationtips` (`moment`, `tip`)\nVALUES\n " + . implode(",\n ", $rows) + . ";\n"; + } +} + +if (!function_exists('escapeIcalText')) { + function escapeIcalText(string $value): string + { + return str_replace( + ["\\", ";", ",", "\r\n", "\n", "\r"], + ["\\\\", "\\;", "\\,", "\\n", "\\n", "\\n"], + $value + ); + } +} + +if (!function_exists('foldIcalLine')) { + function foldIcalLine(string $line): string + { + $chunks = preg_split('/(.{1,73})/u', $line, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + if ($chunks === false || $chunks === []) { + return $line; + } + + $firstChunk = array_shift($chunks); + return $firstChunk . ($chunks ? "\r\n " . implode("\r\n ", $chunks) : ''); + } +} + +if (!function_exists('buildObservationTipCalendarIcs')) { + function buildObservationTipCalendarIcs(array $events, DateTimeZone $timezone): string + { + $lines = [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//AstroTools//Monatsvorhersage//DE', + 'CALSCALE:GREGORIAN', + 'METHOD:PUBLISH', + 'X-WR-CALNAME:AstroTools Monatsereignisse', + ]; + + $createdUtc = (new DateTimeImmutable('now', new DateTimeZone('UTC')))->format('Ymd\THis\Z'); + + foreach ($events as $index => $event) { + if (!is_array($event)) { + continue; + } + + $summary = trim((string) ($event['event'] ?? '')); + if ($summary === '') { + continue; + } + + $moment = null; + $localIso = trim((string) ($event['local_iso'] ?? '')); + if ($localIso !== '') { + try { + $moment = new DateTimeImmutable($localIso); + } catch (Throwable $e) { + $moment = null; + } + } + + if (!$moment instanceof DateTimeImmutable) { + $date = trim((string) ($event['date'] ?? '')); + $time = trim((string) ($event['time'] ?? '')); + if ($date !== '' && $time !== '') { + $moment = DateTimeImmutable::createFromFormat('d.m.Y H:i', $date . ' ' . $time, $timezone) ?: null; + } + } + + if (!$moment instanceof DateTimeImmutable) { + continue; + } + + $startUtc = $moment->setTimezone(new DateTimeZone('UTC')); + $endMoment = null; + $endLocalIso = trim((string) ($event['end_local_iso'] ?? '')); + if ($endLocalIso !== '') { + try { + $endMoment = new DateTimeImmutable($endLocalIso); + } catch (Throwable $e) { + $endMoment = null; + } + } + + if (!$endMoment instanceof DateTimeImmutable) { + $durationMinutes = isset($event['duration_minutes']) ? max(1, (int) $event['duration_minutes']) : 15; + $endMoment = $moment->modify('+' . $durationMinutes . ' minutes'); + } + + $endUtc = $endMoment->setTimezone(new DateTimeZone('UTC')); + $uidBase = sha1($startUtc->format(DateTimeInterface::ATOM) . '|' . $summary . '|' . (string) $index); + + $eventLines = [ + 'BEGIN:VEVENT', + 'UID:' . $uidBase . '@astrotools.local', + 'DTSTAMP:' . $createdUtc, + 'DTSTART:' . $startUtc->format('Ymd\THis\Z'), + 'DTEND:' . $endUtc->format('Ymd\THis\Z'), + 'SUMMARY:' . escapeIcalText($summary), + 'DESCRIPTION:' . escapeIcalText($summary), + 'END:VEVENT', + ]; + + foreach ($eventLines as $eventLine) { + $lines[] = foldIcalLine($eventLine); + } + } + + $lines[] = 'END:VCALENDAR'; + + return implode("\r\n", $lines) . "\r\n"; + } +} + +if (!function_exists('monthForecastBuildNarrativeText')) { + function monthForecastBuildNarrativeText(array $monthEventList, int $monthNumber, string $monthName, int $year): string + { + $filteredEvents = array_values(array_filter( + $monthEventList, + static fn (array $item): bool => (string) ($item['type'] ?? '') !== 'favorite_satellite_pass' + )); + + $skyIntroByMonth = [ + 1 => 'Der Sternenhimmel im Januar wird noch von den klassischen Wintersternbildern beherrscht. Orion, Stier, Fuhrmann, Zwillinge und der Grosse Hund praegen den Abendhimmel, waehrend im Osten bereits erste Fruehlingsboten hoeher steigen.', + 2 => 'Der Februar zeigt den Winterhimmel in seiner vielleicht schoensten Form. Orion, Stier, Zwillinge, Fuhrmann und Grosser Hund stehen abends eindrucksvoll ueber dem Horizont, spaeter in der Nacht ruesten sich bereits Loewe und andere Fruehlingssternbilder fuer ihren Auftritt.', + 3 => 'Der Sternenhimmel im Maerz bildet den Uebergang von den Winter- zu den Fruehlingssternbildern. Abends stehen Orion, Zwillinge, Fuhrmann und Stier noch markant am Himmel, waehrend gegen Mitternacht Loewe, Jungfrau und Bootes immer mehr Aufmerksamkeit auf sich ziehen.', + 4 => 'Im April dominiert der Fruehlingshimmel den Abend. Loewe, Jungfrau und Bootes stehen guenstig, waehrend die Wintersternbilder nun rasch in den Westen abwandern und am spaeteren Abend bereits Platz fuer den kommenden Sommerhimmel machen.', + 5 => 'Der Mai zeigt den Fruehlingshimmel in voller Pracht. Loewe, Jungfrau, Bootes und die ausgedehnte Wasserschlange praegen die Nacht, waehrend sich im Osten schon die ersten Sternbilder des Sommers bemerkbar machen.', + 6 => 'Im Juni werden die Naechte kurz, doch gerade in der spaeteren Dunkelheit treten bereits die Sommersternbilder hervor. Schwan, Leier und Adler gewinnen an Hoehe, waehrend der Fruehlingshimmel langsam nach Westen rueckt.', + 7 => 'Der Juli gehoert dem Sommerhimmel. Das Sommerdreieck aus Wega, Deneb und Atair dominiert den Blick nach oben, daneben laden Schuetze, Skorpion und die reichen Sternfelder der Milchstrasse zu ausgedehnten Beobachtungen ein.', + 8 => 'Im August zeigt sich der Sommerhimmel von seiner eindrucksvollsten Seite. Das Sommerdreieck steht hoch, die Milchstrasse zieht sich markant ueber den Himmel, und in der zweiten Nachthaelfte machen sich bereits erste Herbststernbilder bemerkbar.', + 9 => 'Der September vermittelt zwischen Sommer- und Herbsthimmel. Das Sommerdreieck bleibt ein Blickfang, doch Pegasus, Andromeda und die herbstlichen Sternbilder steigen nun immer besser am Abendhimmel auf.', + 10 => 'Im Oktober uebernimmt der Herbsthimmel die Hauptrolle. Pegasus, Andromeda, Perseus und Dreieck stehen guenstig, waehrend sich gegen Morgen schon die ersten Vorboten des Winterhimmels zeigen.', + 11 => 'Der November bringt lange dunkle Naechte und einen Himmel zwischen Herbst und Winter. Pegasus und Andromeda stehen noch gut, waehrend Stier, Fuhrmann und Orion im Laufe der Nacht immer eindrucksvoller werden.', + 12 => 'Im Dezember kehrt der Winterhimmel eindrucksvoll zurueck. Orion, Stier, Zwillinge, Fuhrmann und der Grosse Hund dominieren den Abend und machen den Monat zu einer besonders attraktiven Zeit fuer Sternbeobachtungen.', + ]; + + $paragraphs = []; + $paragraphs[] = $skyIntroByMonth[$monthNumber] ?? ($monthName . ' ' . $year . ' bietet einen abwechslungsreichen Himmel zwischen den jahreszeitlichen Sternbildern.'); + + $findEvents = static function (array $events, callable $filter, int $limit = 3): array { + $matches = []; + foreach ($events as $event) { + if ($filter($event)) { + $matches[] = $event; + if (count($matches) >= $limit) { + break; + } + } + } + return $matches; + }; + + $describeEvents = static function (array $events): string { + $parts = []; + foreach ($events as $event) { + $label = trim((string) ($event['event'] ?? '')); + $date = trim((string) ($event['date'] ?? '')); + if ($label === '' || $date === '') { + continue; + } + $parts[] = $label . ' am ' . $date; + } + return implode(', ', $parts); + }; + + $moonEvents = $findEvents( + $filteredEvents, + static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['moon_phase', 'golden_handle', 'moon_planet_approach', 'moon_deep_sky_approach', 'moon_occultation', 'moon_apsis'], true), + 4 + ); + if ($moonEvents !== []) { + $paragraphs[] = 'Auch der Mond liefert im Laufe des Monats einige markante Beobachtungsmomente. Besonders auffaellig sind ' . $describeEvents($moonEvents) . '.'; + } + + $planetEvents = $findEvents( + $filteredEvents, + static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['inner_planet_elongation', 'venus_peak_magnitude', 'outer_planet_event', 'outer_planet_station', 'planet_conjunction', 'planet_constellation_change', 'planet_parade', 'mercury_good_visibility'], true), + 5 + ); + if ($planetEvents !== []) { + $paragraphs[] = 'Bei den Planeten lohnt sich vor allem der Blick auf ' . $describeEvents($planetEvents) . '. Diese Termine geben dem Monat seinen charakteristischen planetaren Akzent.'; + } + + $eclipseEvents = $findEvents( + $filteredEvents, + static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['eclipse', 'lunar_eclipse', 'solar_eclipse'], true), + 3 + ); + if ($eclipseEvents !== []) { + $paragraphs[] = 'Besondere Aufmerksamkeit verdienen ausserdem die Finsternistermine. In diesem Monat stechen ' . $describeEvents($eclipseEvents) . ' hervor.'; + } + + $meteorEvents = $findEvents( + $filteredEvents, + static fn (array $event): bool => (string) ($event['type'] ?? '') === 'meteor_shower_peak', + 2 + ); + if ($meteorEvents !== []) { + $paragraphs[] = 'Freunde von Meteoren sollten zudem die Aktivitaet der Meteorstroeme im Blick behalten. Erwähnenswert sind besonders ' . $describeEvents($meteorEvents) . '.'; + } + + if (count($paragraphs) === 1 && $filteredEvents !== []) { + $highlights = array_slice($filteredEvents, 0, 4); + $paragraphs[] = 'Zu den auffaelligen Terminen des Monats gehoeren ' . $describeEvents($highlights) . '.'; + } + + $paragraphs[] = 'Die chronologische Ereignisliste darunter dient als kompakte Terminuebersicht; automatische ISS- und Favoriten-Satellitenueberfluege bleiben in diesem Beschreibungstext bewusst unberuecksichtigt.'; + + return implode("\n\n", $paragraphs); + } +} + try { $dbConfig = require __DIR__ . '/../config/database.php'; $dsn = sprintf( @@ -354,6 +864,44 @@ try { 'zhr_variable' => trim((string) ($row['zhr_variable'] ?? '')), ]; } + + if ($loggedIn && isset($_SESSION['user_id'])) { + $favoriteSatelliteStmt = $pdo->prepare( + "SELECT s.id, s.norad_cat_id, s.object_name, s.object_id, s.classification_type, + s.std_mag, s.rcs_size, s.rcs, + t.epoch, t.mean_motion, t.eccentricity, t.inclination, + t.ra_of_asc_node, t.arg_of_pericenter, t.mean_anomaly, + t.ephemeris_type, t.element_set_no, t.rev_at_epoch, + t.bstar, t.mean_motion_dot, t.mean_motion_ddot + FROM app_user_satellites us + INNER JOIN sat_satellites s ON s.id = us.satellite_id + INNER JOIN sat_tle_current t ON t.satellite_id = s.id + WHERE us.user_id = :user_id + AND us.is_favorite = 1 + AND t.epoch IS NOT NULL + AND t.mean_motion IS NOT NULL + ORDER BY s.object_name ASC + LIMIT 1" + ); + $favoriteSatelliteStmt->execute([ + ':user_id' => (int) $_SESSION['user_id'], + ]); + $favoriteSatelliteRow = $favoriteSatelliteStmt->fetch(); + if (is_array($favoriteSatelliteRow)) { + $favoriteSatelliteName = trim((string) ($favoriteSatelliteRow['object_name'] ?? '')); + $favoriteSatellitePayload = [[ + 'id' => (int) ($favoriteSatelliteRow['id'] ?? 0), + 'norad_cat_id' => (int) ($favoriteSatelliteRow['norad_cat_id'] ?? 0), + 'object_name' => $favoriteSatelliteName, + 'is_favorite' => true, + 'std_mag' => $favoriteSatelliteRow['std_mag'] !== null ? (float) $favoriteSatelliteRow['std_mag'] : null, + 'rcs_size' => $favoriteSatelliteRow['rcs_size'] !== null ? (string) $favoriteSatelliteRow['rcs_size'] : null, + 'rcs' => $favoriteSatelliteRow['rcs'] !== null && (float) $favoriteSatelliteRow['rcs'] > 0 ? (float) $favoriteSatelliteRow['rcs'] : null, + 'tle_line1' => monthForecastBuildTleLine1($favoriteSatelliteRow, $favoriteSatelliteRow), + 'tle_line2' => monthForecastBuildTleLine2($favoriteSatelliteRow, $favoriteSatelliteRow), + ]]; + } + } } catch (Throwable $e) { $starDataError = $e->getMessage(); } @@ -372,6 +920,11 @@ $chartLocalTime = new DateTimeImmutable( new DateTimeZone($chartTimezone) ); $chartUtcTime = $chartLocalTime->setTimezone(new DateTimeZone('UTC')); +$monthStartLocal = new DateTimeImmutable( + sprintf('%04d-%02d-01 00:00:00', $selectedYear, $selectedMonth), + new DateTimeZone($chartTimezone) +); +$monthEndLocal = $monthStartLocal->modify('first day of next month'); $pythonExecutable = PHP_OS_FAMILY === 'Windows' ? 'python' : '/usr/bin/python'; $pythonScriptPath = __DIR__ . '/py/api.py'; @@ -426,6 +979,34 @@ if (is_array($pythonDecoded) && ($pythonDecoded['ok'] ?? false)) { $planetErrorText = $pythonRaw; } +if (!empty($favoriteSatellitePayload)) { + $favoriteSatellitePassOutput = []; + $favoriteSatellitePassArgs = [ + $pythonScriptPath, + 'satellite_passes', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + $chartTimezone, + $monthStartLocal->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z'), + $monthEndLocal->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z'), + base64_encode((string) json_encode($favoriteSatellitePayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)), + ]; + $favoriteSatellitePassCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $favoriteSatellitePassArgs)) . ' 2>&1'; + exec($favoriteSatellitePassCommand, $favoriteSatellitePassOutput); + $favoriteSatellitePassRaw = trim(implode("\n", $favoriteSatellitePassOutput)); + $favoriteSatellitePassDecoded = json_decode($favoriteSatellitePassRaw, true); + + if (is_array($favoriteSatellitePassDecoded) && ($favoriteSatellitePassDecoded['ok'] ?? false)) { + $favoriteSatelliteResults = is_array($favoriteSatellitePassDecoded['results'] ?? null) + ? $favoriteSatellitePassDecoded['results'] + : []; + $favoriteSatellitePasses = is_array($favoriteSatelliteResults[0]['passes'] ?? null) + ? $favoriteSatelliteResults[0]['passes'] + : []; + } +} + $moonPhaseOutput = []; $moonPhaseExitCode = 0; $moonPhaseArgs = [ @@ -616,6 +1197,23 @@ if (is_array($outerPlanetStationDecoded) && ($outerPlanetStationDecoded['ok'] ?? $outerPlanetStationEvents = is_array($outerPlanetStationDecoded['events'] ?? null) ? $outerPlanetStationDecoded['events'] : []; } +$jupiterMoonSideOutput = []; +$jupiterMoonSideExitCode = 0; +$jupiterMoonSideArgs = [ + $pythonScriptPath, + 'jupiter_moons_one_side_for_month', + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, +]; +$jupiterMoonSideCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $jupiterMoonSideArgs)) . ' 2>&1'; +exec($jupiterMoonSideCommand, $jupiterMoonSideOutput, $jupiterMoonSideExitCode); +$jupiterMoonSideRaw = trim(implode("\n", $jupiterMoonSideOutput)); +$jupiterMoonSideDecoded = json_decode($jupiterMoonSideRaw, true); +if (is_array($jupiterMoonSideDecoded) && ($jupiterMoonSideDecoded['ok'] ?? false)) { + $jupiterMoonSideEvents = is_array($jupiterMoonSideDecoded['events'] ?? null) ? $jupiterMoonSideDecoded['events'] : []; +} + $moonPlanetOutput = []; $moonPlanetExitCode = 0; $moonPlanetArgs = [ @@ -637,6 +1235,48 @@ if (is_array($moonPlanetDecoded) && ($moonPlanetDecoded['ok'] ?? false)) { $moonPlanetApproaches = is_array($moonPlanetDecoded['approaches'] ?? null) ? $moonPlanetDecoded['approaches'] : []; } +$moonDeepSkyOutput = []; +$moonDeepSkyExitCode = 0; +$moonDeepSkyArgs = [ + $pythonScriptPath, + 'moon_deep_sky_approaches_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $moonDeepSkyMaxSeparationDeg, +]; +$moonDeepSkyCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $moonDeepSkyArgs)) . ' 2>&1'; +exec($moonDeepSkyCommand, $moonDeepSkyOutput, $moonDeepSkyExitCode); +$moonDeepSkyRaw = trim(implode("\n", $moonDeepSkyOutput)); +$moonDeepSkyDecoded = json_decode($moonDeepSkyRaw, true); +if (is_array($moonDeepSkyDecoded) && ($moonDeepSkyDecoded['ok'] ?? false)) { + $moonDeepSkyApproaches = is_array($moonDeepSkyDecoded['approaches'] ?? null) ? $moonDeepSkyDecoded['approaches'] : []; +} + +$planetBrightStarOutput = []; +$planetBrightStarExitCode = 0; +$planetBrightStarArgs = [ + $pythonScriptPath, + 'planet_bright_star_approaches_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $planetBrightStarMaxSeparationDeg, +]; +$planetBrightStarCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $planetBrightStarArgs)) . ' 2>&1'; +exec($planetBrightStarCommand, $planetBrightStarOutput, $planetBrightStarExitCode); +$planetBrightStarRaw = trim(implode("\n", $planetBrightStarOutput)); +$planetBrightStarDecoded = json_decode($planetBrightStarRaw, true); +if (is_array($planetBrightStarDecoded) && ($planetBrightStarDecoded['ok'] ?? false)) { + $planetBrightStarApproaches = is_array($planetBrightStarDecoded['approaches'] ?? null) ? $planetBrightStarDecoded['approaches'] : []; +} + $planetConjunctionOutput = []; $planetConjunctionExitCode = 0; $planetConjunctionArgs = [ @@ -658,6 +1298,73 @@ if (is_array($planetConjunctionDecoded) && ($planetConjunctionDecoded['ok'] ?? f $planetConjunctions = is_array($planetConjunctionDecoded['conjunctions'] ?? null) ? $planetConjunctionDecoded['conjunctions'] : []; } +$mercuryGoodVisibilityOutput = []; +$mercuryGoodVisibilityExitCode = 0; +$mercuryGoodVisibilityArgs = [ + $pythonScriptPath, + 'mercury_good_visibility_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $mercuryGoodVisibilitySampleOffsetMinutes, + (string) $mercuryGoodVisibilityMinAltitudeDeg, + (string) $mercuryGoodVisibilityMaxSunAltitudeDeg, + (string) $mercuryGoodVisibilityMinConsecutiveDays, +]; +$mercuryGoodVisibilityCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $mercuryGoodVisibilityArgs)) . ' 2>&1'; +exec($mercuryGoodVisibilityCommand, $mercuryGoodVisibilityOutput, $mercuryGoodVisibilityExitCode); +$mercuryGoodVisibilityRaw = trim(implode("\n", $mercuryGoodVisibilityOutput)); +$mercuryGoodVisibilityDecoded = json_decode($mercuryGoodVisibilityRaw, true); +if (is_array($mercuryGoodVisibilityDecoded) && ($mercuryGoodVisibilityDecoded['ok'] ?? false)) { + $mercuryGoodVisibilityEvents = is_array($mercuryGoodVisibilityDecoded['events'] ?? null) ? $mercuryGoodVisibilityDecoded['events'] : []; +} + +$planetParadeOutput = []; +$planetParadeExitCode = 0; +$planetParadeArgs = [ + $pythonScriptPath, + 'planet_parades_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $planetParadeSampleOffsetMinutes, + (string) $planetParadeMinAltitudeDeg, + (string) $planetParadeMaxSunAltitudeDeg, + (string) $planetParadeMaxAzimuthSpanDeg, + (string) $planetParadeMinPlanetCount, + (string) $planetParadeMinConsecutiveDays, +]; +$planetParadeCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $planetParadeArgs)) . ' 2>&1'; +exec($planetParadeCommand, $planetParadeOutput, $planetParadeExitCode); +$planetParadeRaw = trim(implode("\n", $planetParadeOutput)); +$planetParadeDecoded = json_decode($planetParadeRaw, true); +if (is_array($planetParadeDecoded) && ($planetParadeDecoded['ok'] ?? false)) { + $planetParadeEvents = is_array($planetParadeDecoded['events'] ?? null) ? $planetParadeDecoded['events'] : []; +} + +$planetConstellationChangeOutput = []; +$planetConstellationChangeExitCode = 0; +$planetConstellationChangeArgs = [ + $pythonScriptPath, + 'planet_constellation_changes_for_month', + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, +]; +$planetConstellationChangeCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $planetConstellationChangeArgs)) . ' 2>&1'; +exec($planetConstellationChangeCommand, $planetConstellationChangeOutput, $planetConstellationChangeExitCode); +$planetConstellationChangeRaw = trim(implode("\n", $planetConstellationChangeOutput)); +$planetConstellationChangeDecoded = json_decode($planetConstellationChangeRaw, true); +if (is_array($planetConstellationChangeDecoded) && ($planetConstellationChangeDecoded['ok'] ?? false)) { + $planetConstellationChangeEvents = is_array($planetConstellationChangeDecoded['events'] ?? null) ? $planetConstellationChangeDecoded['events'] : []; +} + $moonOccultationStars = []; try { if (isset($pdo)) { @@ -886,7 +1593,7 @@ foreach ($venusPeakMagnitudeEvents as $venusPeakMagnitudeEvent) { : ''; $monthEventList[] = [ - 'event' => trim('Venus in groesster Helligkeit' . ($magnitudeText !== '' ? ' (' . $magnitudeText . ')' : '')), + 'event' => trim('Venus in größter Helligkeit' . ($magnitudeText !== '' ? ' (' . $magnitudeText . ')' : '')), 'date' => (string) ($venusPeakMagnitudeEvent['local_date'] ?? ''), 'time' => (string) ($venusPeakMagnitudeEvent['local_time'] ?? ''), 'local_iso' => (string) ($venusPeakMagnitudeEvent['local_iso'] ?? ''), @@ -930,6 +1637,28 @@ foreach ($outerPlanetStationEvents as $outerPlanetStationEvent) { ]; } +foreach ($jupiterMoonSideEvents as $jupiterMoonSideEvent) { + if (!is_array($jupiterMoonSideEvent)) { + continue; + } + + $durationLabel = trim((string) ($jupiterMoonSideEvent['duration_label'] ?? '')); + $eventLabel = trim((string) ($jupiterMoonSideEvent['label'] ?? 'Alle 4 Jupitermonde auf einer Seite von Jupiter')); + if ($durationLabel !== '') { + $eventLabel .= ' (' . $durationLabel . ')'; + } + + $monthEventList[] = [ + 'event' => $eventLabel, + 'date' => (string) ($jupiterMoonSideEvent['local_date'] ?? ''), + 'time' => (string) ($jupiterMoonSideEvent['local_time'] ?? ''), + 'local_iso' => (string) ($jupiterMoonSideEvent['local_iso'] ?? ''), + 'end_local_iso' => (string) ($jupiterMoonSideEvent['end_local_iso'] ?? ''), + 'duration_minutes' => isset($jupiterMoonSideEvent['duration_minutes']) ? (int) $jupiterMoonSideEvent['duration_minutes'] : null, + 'type' => 'jupiter_moons_one_side', + ]; +} + foreach ($moonPlanetApproaches as $approachEvent) { if (!is_array($approachEvent)) { continue; @@ -948,6 +1677,42 @@ foreach ($moonPlanetApproaches as $approachEvent) { ]; } +foreach ($moonDeepSkyApproaches as $approachEvent) { + if (!is_array($approachEvent)) { + continue; + } + + $distanceText = isset($approachEvent['separation_deg']) + ? number_format((float) ($approachEvent['separation_deg']), 2, ',', '') . ' Grad' + : ''; + + $monthEventList[] = [ + 'event' => trim((string) ($approachEvent['label'] ?? 'Mond nahe Sternhaufen') . ($distanceText !== '' ? ' (' . $distanceText . ')' : '')), + 'date' => (string) ($approachEvent['local_date'] ?? ''), + 'time' => (string) ($approachEvent['local_time'] ?? ''), + 'local_iso' => (string) ($approachEvent['local_iso'] ?? ''), + 'type' => 'moon_deep_sky', + ]; +} + +foreach ($planetBrightStarApproaches as $approachEvent) { + if (!is_array($approachEvent)) { + continue; + } + + $distanceText = isset($approachEvent['separation_deg']) + ? number_format((float) ($approachEvent['separation_deg']), 2, ',', '') . ' Grad' + : ''; + + $monthEventList[] = [ + 'event' => trim((string) ($approachEvent['label'] ?? 'Planet nahe hellem Stern') . ($distanceText !== '' ? ' (' . $distanceText . ')' : '')), + 'date' => (string) ($approachEvent['local_date'] ?? ''), + 'time' => (string) ($approachEvent['local_time'] ?? ''), + 'local_iso' => (string) ($approachEvent['local_iso'] ?? ''), + 'type' => 'planet_bright_star', + ]; +} + foreach ($planetConjunctions as $conjunctionEvent) { if (!is_array($conjunctionEvent)) { continue; @@ -966,6 +1731,52 @@ foreach ($planetConjunctions as $conjunctionEvent) { ]; } +foreach ($mercuryGoodVisibilityEvents as $visibilityEvent) { + if (!is_array($visibilityEvent)) { + continue; + } + + $monthEventList[] = [ + 'event' => (string) ($visibilityEvent['label'] ?? 'Gute Merkur-Sichtbarkeit'), + 'date' => (string) ($visibilityEvent['local_date'] ?? ''), + 'time' => (string) ($visibilityEvent['local_time'] ?? ''), + 'local_iso' => (string) ($visibilityEvent['local_iso'] ?? ''), + 'end_local_iso' => (string) ($visibilityEvent['end_local_iso'] ?? ''), + 'duration_minutes' => isset($visibilityEvent['duration_minutes']) ? (int) $visibilityEvent['duration_minutes'] : null, + 'type' => 'mercury_good_visibility', + ]; +} + +foreach ($planetParadeEvents as $paradeEvent) { + if (!is_array($paradeEvent)) { + continue; + } + + $monthEventList[] = [ + 'event' => (string) ($paradeEvent['label'] ?? 'Planetenparade'), + 'date' => (string) ($paradeEvent['local_date'] ?? ''), + 'time' => (string) ($paradeEvent['local_time'] ?? ''), + 'local_iso' => (string) ($paradeEvent['local_iso'] ?? ''), + 'end_local_iso' => (string) ($paradeEvent['end_local_iso'] ?? ''), + 'duration_minutes' => isset($paradeEvent['duration_minutes']) ? (int) $paradeEvent['duration_minutes'] : null, + 'type' => 'planet_parade', + ]; +} + +foreach ($planetConstellationChangeEvents as $changeEvent) { + if (!is_array($changeEvent)) { + continue; + } + + $monthEventList[] = [ + 'event' => (string) ($changeEvent['label'] ?? 'Planet wechselt Sternbild'), + 'date' => (string) ($changeEvent['local_date'] ?? ''), + 'time' => (string) ($changeEvent['local_time'] ?? ''), + 'local_iso' => (string) ($changeEvent['local_iso'] ?? ''), + 'type' => 'planet_constellation_change', + ]; +} + foreach ($moonOccultations as $occultationEvent) { if (!is_array($occultationEvent)) { continue; @@ -979,21 +1790,22 @@ foreach ($moonOccultations as $occultationEvent) { $starLabel = (string) ($star['label'] ?? 'Stern'); $starMag = isset($star['mag']) ? number_format((float) $star['mag'], 1, ',', '') : ''; + $maximumLocalDate = (string) ($maximum['local_date'] ?? ''); + if ($maximumLocalDate !== '') { + $parsedMaximumDate = DateTimeImmutable::createFromFormat('Y-m-d', $maximumLocalDate); + if ($parsedMaximumDate instanceof DateTimeImmutable) { + $maximumLocalDate = $parsedMaximumDate->format('d.m.Y'); + } + } $monthEventList[] = [ 'event' => 'Mond bedeckt ' . $starLabel . ($starMag !== '' ? ' (' . $starMag . ' mag)' : ''), - 'date' => (string) ($maximum['local_date'] ?? ''), + 'date' => $maximumLocalDate, 'time' => (string) ($maximum['local_time'] ?? ''), 'local_iso' => (string) ($maximum['local_iso'] ?? ''), 'type' => 'moon_occultation', ]; } -$monthStartLocal = new DateTimeImmutable( - sprintf('%04d-%02d-01 00:00:00', $selectedYear, $selectedMonth), - new DateTimeZone($chartTimezone) -); -$monthEndLocal = $monthStartLocal->modify('first day of next month'); - foreach ($meteorShowerPeaks as $meteorShowerPeak) { if (!monthForecastRadiantIsVisible($chartLatitude, $meteorShowerPeak['radiant_delta_deg'] ?? null)) { continue; @@ -1042,6 +1854,60 @@ foreach ($meteorShowerPeaks as $meteorShowerPeak) { 'local_iso' => $peakDateTime->format(DateTimeInterface::ATOM), 'type' => 'meteor_shower_peak', ]; + +} + +foreach ($favoriteSatellitePasses as $satellitePass) { + if (!is_array($satellitePass)) { + continue; + } + + $peakUtc = trim((string) ($satellitePass['peak_utc'] ?? '')); + if ($peakUtc === '') { + continue; + } + + $peakAltitude = isset($satellitePass['peak_el']) ? (float) $satellitePass['peak_el'] : null; + $peakSunAltitude = isset($satellitePass['peak_sun_altitude_deg']) ? (float) $satellitePass['peak_sun_altitude_deg'] : null; + $peakMagnitude = isset($satellitePass['peak_mag']['mag']) ? (float) $satellitePass['peak_mag']['mag'] : null; + if ($peakAltitude === null || $peakSunAltitude === null) { + continue; + } + + if ($peakAltitude < $favoriteSatelliteBestPassMinAltitudeDeg) { + continue; + } + + if ($peakSunAltitude > $favoriteSatelliteBestPassMaxSunAltitudeDeg) { + continue; + } + + try { + $peakDateTime = (new DateTimeImmutable($peakUtc))->setTimezone(new DateTimeZone($chartTimezone)); + } catch (Throwable) { + continue; + } + + if ($favoriteSatelliteBestPassOnlyFirstNightHalf && (int) $peakDateTime->format('G') < 12) { + continue; + } + + if ($peakMagnitude === null || $peakMagnitude > $favoriteSatelliteBestPassMaxPeakMagnitude) { + continue; + } + + $peakAltitudeText = number_format($peakAltitude, 0, ',', ''); + $eventLabel = 'Guter Ueberflug ' . ($favoriteSatelliteName !== null && $favoriteSatelliteName !== '' ? $favoriteSatelliteName : 'Favoriten-Satellit'); + $peakMagnitudeText = number_format($peakMagnitude, 1, ',', ''); + $eventLabel .= ' (max. ' . $peakAltitudeText . ' Grad, ' . $peakMagnitudeText . ' mag)'; + + $monthEventList[] = [ + 'event' => $eventLabel, + 'date' => $peakDateTime->format('d.m.Y'), + 'time' => $peakDateTime->format('H:i'), + 'local_iso' => $peakDateTime->format(DateTimeInterface::ATOM), + 'type' => 'favorite_satellite_pass', + ]; } usort( @@ -1049,6 +1915,11 @@ usort( static fn (array $a, array $b): int => strcmp((string) ($a['local_iso'] ?? ''), (string) ($b['local_iso'] ?? '')) ); +$monthNarrativeText = monthForecastBuildNarrativeText($monthEventList, $selectedMonth, $months[$selectedMonth], $selectedYear); + +$observationTipInsertSql = buildObservationTipInsertSql($monthEventList, new DateTimeZone($chartTimezone)); +$observationTipCalendarIcs = buildObservationTipCalendarIcs($monthEventList, new DateTimeZone($chartTimezone)); + $chartConfig = [ 'monthName' => $months[$selectedMonth], 'year' => $selectedYear, @@ -1078,14 +1949,16 @@ $planetDataJson = json_encode($planetData, JSON_UNESCAPED_UNICODE | JSON_UNESCAP $moonDataJson = json_encode($moonData, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $moonPhaseEventsJson = json_encode($moonPhaseEvents, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $starDataErrorJson = json_encode($starDataError, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); +$observationTipCalendarIcsJson = json_encode($observationTipCalendarIcs, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); +$observationTipCalendarFilenameJson = json_encode(sprintf('astrotools-monatsereignisse-%04d-%02d.ics', $selectedYear, $selectedMonth), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); ?>
-

Zeitraum waehlen

-

Die Sternkarte wird fuer den 15. des gewaehlten Monats mit der festen Monatsuhrzeit erzeugt.

+

Zeitraum wählen

+

Die Sternkarte wird fuer den 15. des gewählten Monats mit der festen Monatsuhrzeit erzeugt.

+
+
+
+

Monat Im Ueberblick

+

+
+
+ +
+
@@ -1138,7 +2023,7 @@ $starDataErrorJson = json_encode($starDataError, JSON_UNESCAPED_UNICODE | JSON_U
-

Südhimmel

+

Südhimmel

, @@ -1147,20 +2032,16 @@ $starDataErrorJson = json_encode($starDataError, JSON_UNESCAPED_UNICODE | JSON_U

- +
-
-

Mondphasen Im

-

Eine Monatszeile vom ersten bis zum letzten Tag mit der Mondtextur aus moon4geocron.png.

-
@@ -1180,9 +2061,30 @@ $starDataErrorJson = json_encode($starDataError, JSON_UNESCAPED_UNICODE | JSON_U

Ereignisse

Chronologische Monatsliste fuer

+
+ + + + + + +