Readline clear history: примеры (PHP)
readline_clear_history: boolФункция readline_clear_history
Функция readline_clear_history() полностью очищает историю введенных команд в интерактивной оболочке readline. Это встроенная функция PHP, предназначенная для работы в CLI (Command Line Interface) режиме.
Использование актуально в CLI-скриптах, которые интерактивно взаимодействуют с пользователем через консоль и используют расширение readline для улучшения ввода. Например, в пользовательских интерактивных оболочках, консольных утилитах с историей команд или скриптах, требующих сброса истории по определенному условию.
Функция не принимает никаких аргументов.
Возвращаемое значение: Функция возвращает true в случае успешного выполнения или false в случае возникновения ошибки, например, если расширение readline не доступно.
Примеры использования
Пример показывает, как добавить несколько элементов в историю и затем очистить ее.
<?php
readline_add_history('Команда 1');
readline_add_history('Команда 2');
// Вывод истории до очистки
var_dump(readline_list_history());
// Очистка истории
$result = readline_clear_history();
// Вывод результата очистки и истории после
var_dump($result);
var_dump(readline_list_history());
?>array(2) {
[0]=>
string(16) "Команда 1"
[1]=>
string(16) "Команда 2"
}
bool(true)
array(0) {
}Перед использованием стоит убедиться, что функция существует.
<?php
if (function_exists('readline_clear_history')) {
if (readline_clear_history()) {
echo "История readline очищена.\n";
} else {
echo "Не удалось очистить историю.\n";
}
} else {
echo "Функция readline_clear_history недоступна.\n";
}
?>История readline очищена.
Похожие функции в PHP
Прямых аналогов для очистки истории в стандартной библиотеке PHP нет, так как эта функция специфична для расширения readline. Однако существуют другие функции этого расширения для управления историей:
- readline_add_history(string $prompt): bool – Добавляет строку в историю.
- readline_list_history(): array – Возвращает массив всей истории.
- readline_read_history(?string $filename = null): bool – Читает историю из файла.
- readline_write_history(?string $filename = null): bool – Сохраняет историю в файл.
Когда что использовать: readline_clear_history() используется именно для полного сброса истории в памяти. Для работы с постоянным хранилищем истории (файлами) применяются readline_read_history и readline_write_history. Для проверки содержимого истории подходит readline_list_history.
Альтернативы в других языках
Readline clear history в Python
В стандартном модуле readline существует функция clear_history().
import readline
readline.add_history("import os")
readline.add_history("print('Hello')")
print("До:", readline.get_history_item(1))
readline.clear_history()
print("После:", readline.get_history_item(1)) # Вернет NoneДо: import os После: None
В Node.js нет встроенного аналога в чистом виде. Для интерактивных приложений часто используют сторонние модули, такие как repl (Read-Eval-Print-Loop) с возможностью управления историей через внутренние методы или собственные реализации.
В bash можно очистить историю сессии командой history -c. Однако это влияет на историю сессии оболочки, а не отдельного скрипта.
Основное отличие заключается в интеграции функции в экосистему языка. В PHP функция является частью отдельного расширения, которое может быть не активировано. В Python модуль readline также часто является внешней зависимостью, особенно на Windows. Управление историей в средах сценариев оболочки (bash) обычно глобальное для сессии, а не для процесса скрипта.
Типичные ошибки
Самая частая проблема – вызов функции, когда расширение readline не установлено или не включено.
<?php
// В конфигурации PHP расширение readline отключено.
$result = readline_clear_history();
var_dump($result);
?>
Fatal error: Uncaught Error: Call to undefined function readline_clear_history()
Функция возвращает булево значение, а не саму историю (которая теперь пуста).
<?php
readline_add_history("test");
$history = readline_clear_history();
echo "Очищенная история: ";
var_dump($history); // Выведет bool(true), а не пустой массив.
?>Очищенная история: bool(true)
Вызов функции на уже пустой истории все равно возвращает true.
<?php
// История изначально пуста
$cleared = readline_clear_history();
var_dump($cleared);
?>bool(true)
Изменения в версиях PHP
Для функции readline_clear_history() не было значимых изменений в поведении или синтаксисе на протяжении последних основных версий PHP, включая PHP 8.x. Это стабильная функция, существующая с ранних версий расширения readline.
Основные изменения в расширении readline касаются других функций, например, добавления поддержки nullable-типов для параметров $filename в readline_read_history и readline_write_history.
Рекомендуется всегда проверять актуальность информации в официальной документации PHP для конкретной используемой минорной версии.
Расширенные примеры
Реализация простой оболочки, где история очищается при переключении на новый "сеанс" (например, по команде 'new').
<?php
function runShell() {
while (true) {
$line = readline("МояОболочка> ");
if ($line === 'exit') break;
if ($line === 'new') {
readline_clear_history();
echo "[История очищена]\n";
continue;
}
if (!empty(trim($line))) {
readline_add_history($line);
}
// Эмуляция выполнения команды
echo "Выполнено: $line\n";
}
}
// Для демонстрации запустите в CLI
// runShell();
?>Автоматическая очистка истории, если пользователь ввел определенное количество ошибочных команд (например, пустых строк).
<?php
$emptyCount = 0;
$maxEmpty = 3;
while (true) {
$input = readline("Введите число: ");
readline_add_history($input);
if (is_numeric($input)) {
echo "Квадрат числа: " . ($input * $input) . "\n";
$emptyCount = 0; // Сброс счетчика
} else {
if (trim($input) === '') {
$emptyCount++;
echo "Пустой ввод ($emptyCount из $maxEmpty)\n";
if ($emptyCount >= $maxEmpty) {
echo "Слишком много пустых вводов. Очищаю историю.\n";
readline_clear_history();
$emptyCount = 0;
}
} else {
echo "Это не число.\n";
}
}
}
?>Перед очисткой истории в памяти ее можно сохранить в файл для архивации.
<?php
$historyFile = '/tmp/cli_history.txt';
// Загружаем старую историю из файла
readline_read_history($historyFile);
// ... Интерактивная работа с пользователем ...
// По команде 'archive_and_clear'
if ($userCommand === 'archive_and_clear') {
$archiveFile = '/tmp/history_archive_' . date('Y-m-d_H-i-s') . '.txt';
// Сохраняем текущую историю в архивный файл
readline_write_history($archiveFile);
// Очищаем активную историю
if (readline_clear_history()) {
echo "История сохранена в $archiveFile и очищена из памяти.\n";
}
// Теперь можно начать новую сессию с чистой историей
}
?>PHP readline_clear_history function comments
- Php readline clear history - аргументы и возвращаемое значение
- Функция php readline_clear_history - описание
- readline clear history - примеры
- readline clear history - похожие методы на php
- readline_clear_history на js, python, mysql
- readline clear history изменения php
- Примеры readline_clear_history на php