SplFileObject::seek
(PHP 5 >= 5.1.0, PHP 7)
SplFileObject::seek — Перевод файлового указателя на заданную строку
Описание
public void SplFileObject::seek
( int
$line_pos
)Переводит файловый указатель на заданную строку.
Список параметров
-
line_pos
-
Номер строки, начиная с 0, на которую требуется перейти.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Ошибки
Выбрасывает исключение LogicException, если аргумент
line_pos
принимает отрицательное значение.
Примеры
Пример #1 Пример использования SplFileObject::seek()
Этот пример выводит третью строку скрипта, находящуюся на 2й позиции.
<?php
$file = new SplFileObject(__FILE__);
$file->seek(2);
echo $file->current();
?>
Результатом выполнения данного примера будет что-то подобное:
$file->seek(2);
Смотрите также
- SplFileObject::current() - Получение текущей строки файла
- SplFileObject::key() - Получение номера строки
- SplFileObject::next() - Читает следующую строку
- SplFileObject::rewind() - Перевод файлового указателя в начало файла
- SplFileObject::valid() - Проверяет, достигнут ли конец файла (EOF)
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Обработка файлов
- Функция SplFileObject::__construct() - Конструктор класса SplFileObject
- Функция SplFileObject::current() - Получение текущей строки файла
- Функция SplFileObject::eof() - Проверяет, достигнут ли конец файла
- Функция SplFileObject::fflush() - Сбрасывает буфер вывода в файл
- Функция SplFileObject::fgetc() - Читает символ из файла
- Функция SplFileObject::fgetcsv() - Получение строки файла и ее разбор в соответствии с CSV разметкой
- Функция SplFileObject::fgets() - Читает строку из файла
- Функция SplFileObject::fgetss() - Получение строки из файла с очисткой от HTML тэгов
- Функция SplFileObject::flock() - Портируемая блокировка файла
- Функция SplFileObject::fpassthru() - Выводит все оставшееся содержимое файла в выходной поток
- Функция SplFileObject::fputcsv() - Выводит поля массива в виде строки CSV
- SplFileObject::fread
- Функция SplFileObject::fscanf() - Разбор строки файла в соответствии с заданным форматом
- Функция SplFileObject::fseek() - Перевод файлового указателя на заданную позицию
- Функция SplFileObject::fstat() - Получает информацию о файле
- Функция SplFileObject::ftell() - Определение текущей позиции файлового указателя
- Функция SplFileObject::ftruncate() - Обрезает файл до заданной длины
- Функция SplFileObject::fwrite() - Запись в файл
- Функция SplFileObject::getChildren() - Метод-заглушка
- Функция SplFileObject::getCsvControl() - Получает символы разделителя и ограничителя для CSV
- Функция SplFileObject::getCurrentLine() - Псевдоним метода SplFileObject::fgets
- Функция SplFileObject::getFlags() - Получает флаги настройки объекта SplFileObject
- Функция SplFileObject::getMaxLineLen() - Получает максимальную длину строки
- Функция SplFileObject::hasChildren() - Класс SplFileObject не имеет наследников
- Функция SplFileObject::key() - Получение номера строки
- Функция SplFileObject::next() - Читает следующую строку
- Функция SplFileObject::rewind() - Перевод файлового указателя в начало файла
- Функция SplFileObject::seek() - Перевод файлового указателя на заданную строку
- Функция SplFileObject::setCsvControl() - Устанавливает символы разделителя и ограничителя для CSV
- Функция SplFileObject::setFlags() - Установливает флаги для SplFileObject
- Функция SplFileObject::setMaxLineLen() - Устанавливает максимальную длину строки
- Функция SplFileObject::__toString() - Псевдоним SplFileObject::current
- Функция SplFileObject::valid() - Проверяет, достигнут ли конец файла (EOF)
Коментарии
A sleek way of counting the number of lines in a file can be like below
$file = new \SplFileObject('file.extension', 'r');
$file->seek(PHP_INT_MAX);
echo $file->key() + 1;
there is a bug using fseek on previos versions of PHP8.0.1
See:
https://bugs.php.net/bug.php?id=46569
https://3v4l.org/O89dJ
I solved it with a function:
<?php
/**
* SEEK an Spl object
* There is a bug in php for seeking files
* seems solved php_version > PHP8.0.1
* See https://bugs.php.net/bug.php?id=46569
* & https://3v4l.org/O89dJ
*
* $Spl->seek() Works ok in all versions with offset 0 (first row)
* On PHP_VERSION < 8.0.1:
* - Offset 1: seek() cannot seek at row 1. It will be done manually, rewind file and reading first row
* - Rest of Offsets: The cursor remains at next row of $Offset
*
* @param SplObject $Spl
* @param int $Offset
*/
function seek_spl($Spl, $Offset){
if (version_compare(PHP_VERSION, '8.0.1', '>=') || $Offset == 0) {
$Spl->seek($Offset);
} else {
if( $Offset == 1 ){
$Spl->rewind(); // Ensure to go at first row before exit
$Spl->fgets(); // Read line 0. Cursor remains now at line 1
} else {
$Spl->seek($Offset-1);
}
}
}?>