Как я предварительно ожидаю файл к началу?

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

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

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

Какие-либо идеи?

14
задан alex 21 September 2016 в 08:08
поделиться

4 ответа

Решение 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++;
}
?>
14
ответ дан 1 December 2019 в 07:11
поделиться
$prepend = 'prepend me please';

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

$fileContents = file_get_contents($file);

file_put_contents($file, $prepend . $fileContents);
23
ответ дан 1 December 2019 в 07:11
поделиться

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

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

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

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

-1
ответ дан 1 December 2019 в 07:11
поделиться

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

$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');

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

1
ответ дан 1 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: