Readline write history: примеры (PHP)

Использование readline_write_history для работы с историей в PHP
Раздел: Ввод данных
readline_write_history(string $filename = ?): bool

Функция readline_write_history в PHP

Общее описание

Функция readline_write_history() сохраняет историю введенных команд в файл. Она применяется в CLI-приложениях, где используется интерактивная строка ввода, для сохранения истории между сеансами.

Аргументы функции

Функция принимает один необязательный параметр:

  • filename (string) - путь к файлу для сохранения истории. Если параметр не указан, используется значение из readline_list_history() или файл по умолчанию.

Краткие примеры использования

Сохранение в файл по умолчанию
readline_add_history('ls -la');
readline_add_history('php -v');
readline_write_history();
Явное указание файла
readline_write_history('/home/user/.php_cli_history');
Проверка результата операции
if (readline_write_history()) {
    echo 'История сохранена';
} else {
    echo 'Ошибка сохранения';
}

Похожие функции в PHP

Загружает историю из файла. Используется вместе с readline_write_history() для работы с постоянным хранилищем.

Добавляет строку в историю текущей сессии. Работает в памяти до вызова функции сохранения.

Очищает историю в текущей сессии. Не затрагивает сохраненные файлы.

Аналоги в других языках

Readline write history в Python

import readline
readline.write_history_file('history.txt')
JavaScript (Node.js)
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({input: process.stdin});
let history = [];
rl.on('line', (line) => {
  history.push(line);
  fs.writeFileSync('history.txt', history.join('\n'));
});
Bash
history -w ~/.bash_history

Типичные ошибки

Отсутствие расширения readline
if (!function_exists('readline_write_history')) {
    die('Расширение readline не установлено');
}
Проблемы с правами доступа к файлу
readline_write_history('/root/history.txt');
// Результат: false при отсутствии прав
Ошибка сохранения
Некорректный путь к файлу
readline_write_history('/несуществующая/директория/file.txt');

Изменения в версиях PHP

В PHP 8.0.0 функция была изменена для возврата типа bool. В предыдущих версиях возвращаемое значение не было строго типизировано.

Поведение в PHP 7.x

Возвращала true при успехе, но могла возвращать различные значения при ошибках.

Поведение в PHP 8.x

Всегда возвращает bool (true при успешном сохранении, false при ошибке).

Расширенные примеры использования

Автосохранение истории с лимитом записей
Пример php
function saveHistoryWithLimit($filename, $limit = 100) {
    $history = readline_list_history();
    if (count($history) > $limit) {
        $history = array_slice($history, -$limit);
        readline_clear_history();
        foreach ($history as $item) {
            readline_add_history($item);
        }
    }
    return readline_write_history($filename);
}
saveHistoryWithLimit('history.log', 50);
Интеграция с пользовательской оболочкой
Пример php
class CliShell {
    private $historyFile;

    public function __construct($historyFile) {
        $this->historyFile = $historyFile;
        if (file_exists($historyFile)) {
            readline_read_history($historyFile);
        }
    }

    public function run() {
        while (true) {
            $line = readline('CMD> ');
            if ($line === 'exit') break;
            readline_add_history($line);
            readline_write_history($this->historyFile);
            echo 'Выполнено: ' . $line . PHP_EOL;
        }
    }
}
$shell = new CliShell('my_cli.log');
$shell->run();
Фильтрация конфиденциальных данных
Пример php
function saveFilteredHistory($filename) {
    $history = readline_list_history();
    $filtered = array_filter($history, function($item) {
        return !str_contains($item, 'password') && !str_contains($item, 'secret');
    });
    readline_clear_history();
    foreach ($filtered as $item) {
        readline_add_history($item);
    }
    return readline_write_history($filename);
}

PHP readline_write_history function comments

En
Readline write history Writes the history