Как добавить файл к началу?

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

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

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

Есть идеи?

Решение 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++; } ?> 
 $prepend = 'prepend me please'; $file = '/path/to/file'; $fileContents = file_get_contents($file); file_put_contents($file, $prepend . $fileContents); 
 $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); 

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

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

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

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

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

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

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

  $file = fopen('filepath.txt', 'r+') or die('Error'); $txt = "/n".$string; fwrite($file, $txt); fclose($file); 

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

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