Можно ли сделать "если файл существует, то добавьте, иначе создайте новый файл" короче этого

У меня есть следующий код, но я пытаюсь сократить его до одной или двух строк, поскольку я уверен, что моя оценка 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");

fopen (). режим a все, что вам нужно.


$fh = file_exists($myFile) ? fopen($myFile, 'a') : fopen($myFile, 'w');
fwrite($fh, $message."\n");

$fh = (file_exists($myFile)) ? fopen($myFile,'a') : fopen($myFile,'w');
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)