diff --git a/.gitignore b/.gitignore index e33b94d..a0deea2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .codex-temp/ +php-server-error.log diff --git a/scripts/import/import_tcrb.php b/scripts/import/import_tcrb.php index 28fd9e0..0fd3a69 100644 --- a/scripts/import/import_tcrb.php +++ b/scripts/import/import_tcrb.php @@ -40,7 +40,7 @@ foreach (['host', 'dbname', 'user', 'pass'] as $requiredKey) { } } -$options = parseCliArguments($argv); +$options = parseCliArguments(getCliArguments()); if (($options['help'] ?? false) === true) { writeUsage(); @@ -341,6 +341,19 @@ function parseCliArguments(array $argv): array return $options; } +function getCliArguments(): array +{ + if (isset($GLOBALS['argv']) && is_array($GLOBALS['argv'])) { + return $GLOBALS['argv']; + } + + if (isset($_SERVER['argv']) && is_array($_SERVER['argv'])) { + return $_SERVER['argv']; + } + + return []; +} + function writeUsage(): void { $usageLines = [ @@ -516,12 +529,10 @@ PS $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}"); @@ -699,6 +710,31 @@ function jdToUtcString(float $jd): string function writeMessage(string $message, bool $isError = false): void { $prefix = '[' . date('Y-m-d H:i:s') . '] '; - $stream = $isError ? STDERR : STDOUT; + $stream = openOutputStream($isError); fwrite($stream, $prefix . $message . PHP_EOL); } + +/** + * `STDOUT` und `STDERR` sind in manchen CGI-/Web-Kontexten nicht definiert. + * Daher greifen wir auf die entsprechenden php:// Streams zurueck. + * + * @return resource + */ +function openOutputStream(bool $isError) +{ + if ($isError && defined('STDERR')) { + return STDERR; + } + + if (!$isError && defined('STDOUT')) { + return STDOUT; + } + + $stream = fopen($isError ? 'php://stderr' : 'php://stdout', 'wb'); + + if ($stream === false) { + throw new RuntimeException('Ausgabestream konnte nicht geoeffnet werden.'); + } + + return $stream; +}