Я использую в качестве шаблона что-то вроде этого (для достаточно простых консольных скриптов):
$inputFile = null;
$outputFile = null;
try {
// Checking command-line arguments
if (1 === $argc) {
throw new Exception('Missing input file path.');
}
$inputFilePath = $argv[1];
if (!file_exists($inputFilePath) || !is_readable($inputFilePath)) {
throw new Exception('Input file does not exist or cannot be read.');
}
$inputFile = fopen($inputFilePath, 'r');
if (2 < $argc) {
$outputFilePath = $argv[2];
if (!is_writable($outputFilePath)) {
throw new Exception('Cannot write to output file.');
}
$outputFile = fopen($outputFilePath, 'w');
} else {
$outputFile = STDOUT;
}
// Do main process (reading data, processing, writing output data)
} catch (Exception $e) {
// Show usage info, output error message
fputs(STDERR, sprintf('USAGE: php %s inputFilePath [outputFilePath]', $argv[0]) . PHP_EOL);
fputs(STDERR, 'ERROR: ' . $e->getMessage() . PHP_EOL);
}
// Free resources
if ($inputFile) {
fclose($inputFile);
}
if ($outputFile) {
fclose($outputFile);
}