Как приостановить выполнение сценария командной строки, чтобы дать пользователю возможность выйти из него с помощью Ctrl + C ?
Например, у меня есть этот сценарий для удаления идентификатора пользователя из ряда таблиц, но я бы хотел остановить сценарий перед тем, как действительно это сделать:
<?php
define('DBHOST', '/tmp');
define('DBNAME', 'XXX');
define('DBUSER', 'YYY');
define('DBPASS', 'ZZZ');
$TABLES = array('pref_game',
'pref_hand',
'pref_luck',
'pref_match',
'pref_misere',
'pref_money',
'pref_pass',
'pref_rep',
'pref_status',
'pref_users'
);
if ($argc != 2)
exit("Missing user id\n");
if (!preg_match('/^([A-Z]{2}[0-9]+)$/', $argv[1], $matches))
exit("Invalid user id\n");
$id = $matches[1];
printf("Deleting user %s Press CTRL-C to abort\n\n", $id);
# XXX stop here, but how? XXX
try {
$db = new PDO('pgsql:host=' . DBHOST . '; dbname=' . DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach ($TABLES as $table) {
$sql = sprintf('delete from %s where id=?', $table);
run_sql($db, $sql, $id);
}
} catch (Exception $e) {
exit('Database problem: ' . $e->getMessage());
}
function run_sql($db, $sql, $arg) {
$sth = $db->prepare($sql);
$sth->execute(array($arg));
printf("SQL: %s\nAffected rows: %d\n\n", $sql, $sth->rowCount());
}
?>
Использование CentOS Linux 5.5 + PHP 5.1.6 + PostgreSQL 8.4.7.