Как мне добавить файл в начало? - PullRequest
14 голосов
/ 26 июля 2010

В PHP, если вы записываете в файл, он записывает конец этого существующего файла.

Как нам добавить файл для записи в начале этого файла?

Я пробовал функцию rewind($handle), но кажется, что перезаписывается, если текущий контент больше существующего.* Есть идеи?

Ответы [ 6 ]

23 голосов
/ 26 июля 2010
$prepend = 'prepend me please';

$file = '/path/to/file';

$fileContents = file_get_contents($file);

file_put_contents($file, $prepend . $fileContents);
14 голосов
/ 26 июля 2010

Решение file_get_contents неэффективно для больших файлов.Это решение может занять больше времени, в зависимости от объема данных, которые необходимо добавить (чем больше, тем лучше), но оно не потребляет память.

<?php

$cache_new = "Prepend this"; // this gets prepended
$file = "file.dat"; // the file to which $cache_new gets prepended

$handle = fopen($file, "r+");
$len = strlen($cache_new);
$final_len = filesize($file) + $len;
$cache_old = fread($handle, $len);
rewind($handle);
$i = 1;
while (ftell($handle) < $final_len) {
  fwrite($handle, $cache_new);
  $cache_new = $cache_old;
  $cache_old = fread($handle, $len);
  fseek($handle, $i * $len);
  $i++;
}
?>
4 голосов
/ 20 апреля 2011
$filename  = "log.txt";
$file_to_read = @fopen($filename, "r");
$old_text = @fread($file_to_read, 1024); // max 1024
@fclose(file_to_read);
$file_to_write = fopen($filename, "w");
fwrite($file_to_write, "new text".$old_text);
1 голос
/ 26 июля 2010

Другое (грубое) предложение:

$tempFile = tempnam('/tmp/dir');
$fhandle = fopen($tempFile, 'w');
fwrite($fhandle, 'string to prepend');

$oldFhandle = fopen('/path/to/file', 'r');
while (($buffer = fread($oldFhandle, 10000)) !== false) {
    fwrite($fhandle, $buffer);
}

fclose($fhandle);
fclose($oldFhandle);

rename($tempFile, '/path/to/file');

Недостатком является использование временного файла, но в остальном он довольно эффективен.

0 голосов
/ 15 января 2016
            $file = fopen('filepath.txt', 'r+') or die('Error');
            $txt = "/n".$string;
            fwrite($file, $txt);
            fclose($file);

Это добавит пустую строку в текстовый файл, поэтому при следующей записи в него вы замените пустую строку.с пустой строкой и вашей строкой.

Это единственный и лучший трюк.

0 голосов
/ 26 июля 2010

При использовании fopen () вы можете установить режим установки указателя (т. Е. Начало или конец.

$afile = fopen("file.txt", "r+");

'r' Открыть только для чтения; поместите указатель файла вначало файла.

'r +' Открыть для чтения и записи; поместить указатель файла в начало файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...