Rewind: примеры (PHP)
rewind(resource $stream): boolФункция rewind() в PHP сбрасывает указатель позиции файлового потока в начало. Она применяется для работы с файловыми дескрипторами, открытыми функциями fopen(), fsockopen() или popen().
Основная задача функции - вернуть указатель чтения или записи в начало файлового ресурса. Это полезно при необходимости повторной обработки данных без повторного открытия файла.
bool rewind ( resource $handle )
Единственный параметр $handle представляет файловый ресурс, полученный при успешном открытии файла. Функция возвращает true при успешном выполнении или false в случае ошибки.
<?
$file = fopen('test.txt', 'r');
echo fread($file, 5); // Читаем первые 5 символов
rewind($file); // Возвращаемся в начало
echo fread($file, 10); // Читаем первые 10 символов
fclose($file);
?>ПервыеПервые 10 си
<?
$file = fopen('data.txt', 'r+');
fwrite($file, 'Новые данные');
rewind($file);
echo fgets($file); // Прочитать записанные данные
fclose($file);
?>Новые данные
fseek($handle, $offset) - устанавливает указатель в конкретную позицию. Позволяет перемещаться в любое место файла, а не только в начало.
ftell($handle) - возвращает текущую позицию указателя. Используется для определения местоположения в файле.
fread($handle, $length) - читает данные из файла с текущей позиции указателя.
Функцию rewind() предпочтительнее использовать для быстрого возврата в начало файла, в то время как fseek() обеспечивает более гибкое позиционирование.
Rewind в Python
# Метод seek() с параметром 0
file = open('file.txt', 'r')
file.read(5)
file.seek(0) # Аналог rewind()
print(file.read(10))
file.close()// Использование createReadStream с повторным созданием
const fs = require('fs');
const stream = fs.createReadStream('file.txt', {start: 0});
// Для возврата в начало обычно пересоздают поток
stream.destroy();
const newStream = fs.createReadStream('file.txt');Rewind в MySQL
-- Курсоры в хранимых процедурах
DECLARE cur CURSOR FOR SELECT * FROM table;
OPEN cur;
-- FETCH cur INTO ...
-- Для повторного чтения нужно закрыть и снова открыть
CLOSE cur;
OPEN cur;<?
$file = fopen('test.txt', 'r');
fclose($file);
rewind($file); // Ошибка: ресурс уже закрыт
?>Warning: rewind(): supplied resource is not a valid stream resource
<?
$invalidResource = false;
rewind($invalidResource); // Некорректный аргумент
?>Warning: rewind() expects parameter 1 to be resource, bool given
<?
$stream = fopen('php://input', 'r');
rewind($stream); // Может не работать с некоторыми потоками
?>В PHP 8.0 была изменена обработка нересурсных аргументов. Теперь при передаче значения неправильного типа генерируется исключение TypeError вместо предупреждения.
В PHP 7.4 улучшена обработка ошибок для некорректных потоков. Функция стала более строгой при проверке допустимости операции позиционирования для конкретного типа потока.
<?
$logFile = fopen('application.log', 'r');
// Первый проход: подсчет строк
$lineCount = 0;
while (!feof($logFile)) {
fgets($logFile);
$lineCount++;
}
echo "Всего строк: $lineCount\n";
// Возврат для анализа содержимого
rewind($logFile);
// Второй проход: поиск ошибок
$errorCount = 0;
while (($line = fgets($logFile)) !== false) {
if (strpos($line, 'ERROR') !== false) {
$errorCount++;
}
}
echo "Найдено ошибок: $errorCount\n";
fclose($logFile);
?><?
$csvFile = fopen('data.csv', 'r');
// Чтение заголовков
$headers = fgetcsv($csvFile);
// Анализ данных
$data = [];
while ($row = fgetcsv($csvFile)) {
$data[] = array_combine($headers, $row);
}
// Возврат для статистики
rewind($csvFile);
fgetcsv($csvFile); // Пропустить заголовки
$rowLengths = [];
while ($row = fgetcsv($csvFile)) {
$rowLengths[] = count($row);
}
echo "Средняя длина строки: " . array_sum($rowLengths)/count($rowLengths);
fclose($csvFile);
?><?
$memoryStream = fopen('php://memory', 'w+');
fwrite($memoryStream, 'Данные в памяти');
rewind($memoryStream);
echo stream_get_contents($memoryStream); // Вывод: Данные в памяти
fclose($memoryStream);
?>