Readline read history: примеры (PHP)
readline_read_history(string $filename = ?): boolФункция readline_read_history
Функция readline_read_history() в PHP относится к расширению Readline и предназначена для загрузки истории командной строки из файла. Она используется в интерактивных CLI-приложениях для восстановления ранее введённых пользователем команд между сессиями. Это улучшает пользовательский опыт, позволяя использовать стрелки вверх/вниз для навигации по истории.
Функция имеет один необязательный аргумент:
- ?string $filename – путь к файлу, из которого будет загружена история. Если аргумент не указан или равен null, используется файл по умолчанию (часто это ~/.history или файл, заданный readline_read_history_file()).
Примеры использования
Загрузка истории из файла по умолчанию:
<?php
if (function_exists('readline_read_history')) {
$result = readline_read_history();
var_dump($result);
}bool(true) // Если файл существует и чтение успешно
<?php
$loaded = readline_read_history('/tmp/my_cli_history.txt');
echo $loaded ? 'История загружена' : 'Ошибка загрузки';История загружена
Похожие функции в PHP
- readline_list_history() – возвращает массив всей истории команд. Полезна для программной обработки истории.
- readline_write_history() – сохраняет текущую историю в файл. Используется в паре с readline_read_history().
- readline_clear_history() – очищает внутренний массив истории. Применяется для сброса состояния.
- readline_add_history() – добавляет одну строку в историю. Основная функция для пополнения истории.
readline_read_history() предпочтительнее для начальной загрузки истории из файла, в то время как readline_list_history() используется для чтения уже загруженной истории в память.
Аналоги в других языках
import readline
readline.read_history_file('.python_history') # Загрузка
print(readline.get_history_item(1)) # Чтениеcommand_from_history
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
historySize: 1000
});
// История управляется внутри сессии, аналога для файла нет в стандартном APIhistory -r ~/.bash_history # Чтение истории# История загружена в текущую сессию
В отличие от PHP, Python предоставляет прямое управление файлом истории. В Node.js нет встроенной функции загрузки истории из файла, а в Bash управление историей встроено в оболочку.
Типичные ошибки
<?php
$result = readline_read_history();
var_dump($result);Fatal error: Uncaught Error: Call to undefined function readline_read_history()
Решение: Убедиться, что расширение Readline установлено и включено в php.ini.
<?php
$result = readline_read_history('/non_existent/history.txt');
var_dump($result);bool(false) // Функция вернёт false
Решение: Проверить существование файла и права доступа перед вызовом функции.
Изменения в версиях PHP
В PHP 8.1.0 аргумент $filename стал nullable (может принимать значение null). Это позволяет явно указывать загрузку из файла по умолчанию.
<?php
// До PHP 8.1.0
readline_read_history(); // Без аргументов
// Начиная с PHP 8.1.0 можно явно передать null
readline_read_history(null); // То же самоеРасширенные примеры
<?php
function loadHistorySafe(?string $file = null): bool {
if (!function_exists('readline_read_history')) {
throw new RuntimeException('Расширение Readline не доступно');
}
$result = readline_read_history($file);
if ($result === false) {
// Можно логировать ошибку или создавать файл
if ($file && !file_exists($file)) {
touch($file); // Создаём пустой файл истории
return true;
}
return false;
}
return true;
}
// Использование
try {
loadHistorySafe('/custom/path/history.log');
echo 'История инициализирована';
} catch (RuntimeException $e) {
echo 'Ошибка: ' . $e->getMessage();
}История инициализирована
<?php
// Загружаем основную историю
readline_read_history('/primary.hist');
// Добавляем команды из дополнительного файла
$extraHistory = file('/extra.hist', FILE_IGNORE_NEW_LINES);
foreach ($extraHistory as $line) {
readline_add_history($line);
}
// Сохраняем объединённую историю
readline_write_history('/combined.hist');<?php
// Загружаем историю при запуске скрипта
readline_read_history('/tmp/app_history.txt');
while (true) {
$input = readline('Введите команду: ');
readline_add_history($input);
if ($input === 'exit') {
// Сохраняем историю перед выходом
readline_write_history('/tmp/app_history.txt');
break;
}
echo 'Вы ввели: ' . $input . PHP_EOL;
}Введите команду: test Вы ввели: test Введите команду: exit // История сохраняется