<?php
/**
* Loads resources from CLI arguments with retry logic.
*
* @param array $expectedArgs An array of expected command-line arguments and their types.
* @param int $maxRetries The maximum number of retry attempts.
* @return array|null An array containing the parsed arguments, or null on failure.
*/
function loadResourcesFromArgs(array $expectedArgs, int $maxRetries = 3): ?array
{
$args = getopt(":", array_keys($expectedArgs)); // Parse command-line arguments
$retries = 0;
while ($retries < $maxRetries) {
$validArgs = [];
$success = true;
foreach ($expectedArgs as $key => $type) {
if (isset($args[$key])) {
$value = $args[$key];
if (is_numeric($type)) {
$value = (int)$value; // Cast to integer if specified
} elseif (is_bool($type)) {
$value = (bool)$value; // Cast to boolean if specified
}
$validArgs[$key] = $value;
} else {
$success = false;
error_log("Missing argument: " . $key);
}
}
if ($success) {
return $validArgs; // Successfully parsed arguments
} else {
$retries++;
if ($retries < $maxRetries) {
echo "Failed to parse arguments. Retrying... (" . $retries . "/" . $maxRetries . ")\n";
// Add a delay before retrying (optional)
sleep(1);
} else {
error_log("Failed to parse arguments after multiple retries.");
return null; // Return null on failure after max retries
}
}
}
return null; // Should not reach here if retries are configured correctly.
}
// Example usage:
// Define expected arguments and their types
$expectedArgs = [
'input' => 'string',
'count' => 'int',
'debug' => 'bool',
];
$args = loadResourcesFromArgs($expectedArgs);
if ($args !== null) {
echo "Arguments loaded successfully:\n";
print_r($args);
// Use the loaded arguments
if (isset($args['input'])) {
echo "Input file: " . $args['input'] . "\n";
}
if (isset($args['count'])) {
echo "Count: " . $args['count'] . "\n";
}
if (isset($args['debug']) && $args['debug']) {
echo "Debug mode is enabled.\n";
}
} else {
echo "Failed to load arguments.\n";
}
?>
Add your comment