Note that this class has a private (and thus, not documented) property that holds the file pointer. Combine this with the fact that there is no method to close the file handle, and you get into situations where you are not able to delete the file with unlink(), etc., because an SplFileObject still has a handle open.
To get around this issue, delete the SplFileObject like this:
---------------------------------------------------------------------
<?php
print "Declaring file object\n";
$file = new SplFileObject('example.txt');
print "Trying to delete file...\n";
unlink('example.txt');
print "Closing file object\n";
$file = null;
print "Deleting file...\n";
unlink('example.txt');
print 'File deleted!';
?>
---------------------------------------------------------------------
which will output:
---------------------------------------------------------------------
Declaring file object
Trying to delete file...
Warning: unlink(example.txt): Permission denied in file.php on line 6
Closing file object
Deleting file...
File deleted!
---------------------------------------------------------------------
PHP.mk документација
SplFileObject
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
class.splfileobject.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
class.splfileobject.php
SplFileObject
Референца за `class.splfileobject.php` со подобрена типографија и навигација.
Класата SplFileObject
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
Вовед
Класата SplFileObject нуди објектно-ориентиран интерфејс за датотека.
Синопсис на класата
/* Константи */
/* Методи */
public __construct(
string
string
bool
?resource
)
string
$filename,string
$mode = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO,bool
$useIncludePath = false,?resource
$context = null)
public fgetcsv(string
$separator = ",", string $enclosure = "\"", string $escape = "\\"): array|falsepublic fputcsv(
array
string
string
string
string
): int|false
array
$fields,string
$separator = ",",string
$enclosure = "\"",string
$escape = "\\",string
$eol Форматира линија како CSV и ја пишува во датотечен покажувач): int|false
public setCsvControl(string
$separator = ",", string $enclosure = "\"", string $escape = "\\"): void/* Наследени методи */
public SplFileInfo::openFile(string
}$mode = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO, bool $useIncludePath = false, ?resource $context = null): SplFileObjectПретходно дефинирани константи
SplFileObject::DROP_NEW_LINE-
Отфрли нови редови на крајот од редот.
SplFileObject::READ_AHEAD-
Читај при премотување/следно.
SplFileObject::SKIP_EMPTY-
Прескокнува празни редови во датотеката. Ова бара
READ_AHEADзнаменцето да биде овозможено, за да работи како што се очекува. SplFileObject::READ_CSV-
Читај редови како CSV редови.
Содржина
- SplFileObject::__construct — Конструирај нов објект од датотека
- 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::valid — Не е на крај од датотеката
Белешки од корисници 4 белешки
Lars Gyrup Brink Nielsen ¶
12 години пред
clcollie на mindspring точка com ¶
пред 11 години
If you want to skip blank lines when reading a CSV file, you need *all * the flags:
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
contact at trimal dot in ¶
пред 2 години
with php 8.3, with or without SplFileObject::DROP_NEW_LINE, you get an array with empty values at the end.
rlazarotto15+не+ми+спамирај на gmail точка ком ¶
пред 5 години
Complimenting marcus at synchromedia dot co dot uk comment, you can also do something like this:
<?php
// create a SplFileObject for reading - note that there are no flags
$file = new SplFileObject('/path/to/file', 'r');
// iterate over its contents
while (!$file->eof()) {
// get the current line
$line = $file->fgets();
// trim it, and then check if its empty
if (empty(trim($line))) {
// skips the current iteration
continue;
}
}
While this may seem like a overkill for such thing, it allows you to do some processing with the empty lines that might come (I had to do this mostly because I needed to count empty lines instead of just skipping them). Since it also trims the line before checking if it's empty, you won't get lines composed only of empty spaces (I don't know if the flags also make it trim the content before checking it).