Можно ли сделать "если файл существует, то добавьте, иначе создайте новый файл" короче этого
У меня есть следующий код, но я пытаюсь сократить его до одной или двух строк, поскольку я уверен, что моя оценка if не нужна, есть ли в любом случае код ниже может быть сокращен до даже единственной строки?
if(file_exists($myFile))
{
$fh = fopen($myFile, 'a');
fwrite($fh, $message."n");
}
else
{
$fh = fopen($myFile, 'w');
fwrite($fh, $message."n");
}
11 ответов
if (file_exists($myFile)) {
$fh = fopen($myFile, 'a');
fwrite($fh, $message."\n");
} else {
$fh = fopen($myFile, 'w');
fwrite($fh, $message."\n");
}
fclose($fh);
==
if (file_exists($myFile)) {
$fh = fopen($myFile, 'a');
} else {
$fh = fopen($myFile, 'w');
}
fwrite($fh, $message."\n");
fclose($fh);
==
$fh = fopen($myFile, (file_exists($myFile)) ? 'a' : 'w');
fwrite($fh, $message."\n");
fclose($fh);
== (потому что a
проверяет, существует ли файл, и создает его, если нет)
$fh = fopen($myFile, 'a');
fwrite($fh, $message."\n");
fclose($fh);
==
file_put_contents($myFile, $message."\n", FILE_APPEND);
...конечно, file_put_contents()
только лучше, если это единственная запись, которую вы выполняете на данном дескрипторе. Если у вас есть какие-либо более поздние вызовы fwrite()
на том же дескрипторе файла вам лучше пойти с ответом @Pekka.
МММ... почему? a
уже делает то, что вам нужно из коробки.
открыть только для записи; помещает указатель файла в конец файла. Если файл не существует, попытается его создать.
$method = (file_exists($myFile)) ? 'a' : 'w';
$fh = fopen($myFile,$method);
fwrite($fh, $message."\n");
режим добавления уже делает то, что вы описываете. На странице руководства PHP для fopen
:
'a': Открыть только для записи; поместите указатель файла в конец файла. Если файл не существует, попытается его создать.
согласно руководству php этого должно быть достаточно. Вижу описание "a"
fopen($myFile, "a");
fwrite($fh, $message."\n");
Я считаю a
(добавить) режим делает это уже... добавьте, если существует, иначе создайте new
fopen($myFile, "a");
$method = (file_exists($myFile)) ? 'a' : 'w';
$fh = fopen($myFile,$method);
fwrite($fh, $message."\n");
разве $myFile не содержит абсолютный / относительный путь..?
С помощью SPL / стандартная библиотека PHP:
# addfile.php
$file = new \SplFileObject( __DIR__.'/foo.txt', 'a' );
var_dump( file_exists( $file->getFilename() ) );
$ php addfile.php
bool(true)