Обратное .txt Содержимое файла, сгенерированное с помощью PHP и Form. (Я проверил ранее заданные вопросы, которые были похожи) [duplicate]

Вам лучше запустить команду в консоли, чтобы лучше понять, что не так с настройками. В моем случае, когда я запустил gradlew check, он на самом деле говорит мне, какой ссылочный проект отсутствует.

* What went wrong:
Could not determine the dependencies of task ':test'.
Could not resolve all task dependencies for configuration ':testRuntimeClasspath'.
Could not resolve project :lib-blah.
 Required by:
     project :
  > Unable to find a matching configuration of project :lib-blah: None of the consumable configurations have attributes.

Досадно было, что при сбое импорта он не обнаружил бы значимого сообщения об ошибке. И если я прокомментировал все ссылки на проект, уверен, что он позволяет мне импортировать его, но как только я раскомментирую его, он напечатает только это неоднозначное сообщение и не скажет вам, что не так.

30
задан Brian Tompsett - 汤莱恩 7 November 2015 в 11:15
поделиться

9 ответов

Невозможно записать в начало файла, как вы думаете. Это, я думаю, объясняется тем, как ОС и HDD видят файл. У этого есть фиксированный старт и расширяющийся конец. Если вы хотите что-то добавить в середине или начать, это требует некоторого скольжения. Если это небольшой файл, просто прочитайте все и выполните свои манипуляции и напишите. Но если нет, и если вы всегда добавляете в начало только обратный порядок строк, рассмотрите конец как начало ...

1
ответ дан erdogany 22 August 2018 в 02:21
поделиться

Если вы не хотите загружать все содержимое файла в переменную, вы можете использовать функцию PHP Streams :

function prepend($string, $orig_filename) {
  $context = stream_context_create();
  $orig_file = fopen($orig_filename, 'r', 1, $context);

  $temp_filename = tempnam(sys_get_temp_dir(), 'php_prepend_');
  file_put_contents($temp_filename, $string);
  file_put_contents($temp_filename, $orig_file, FILE_APPEND);

  fclose($orig_file);
  unlink($orig_filename);
  rename($temp_filename, $orig_filename);
}

Что это делает, это запись строку, которую вы хотите добавить к временному файлу, затем она записывает содержимое исходного файла в конец временного файла (используя потоки вместо копирования всего файла в переменную), а затем удаляет исходный файл и переименовывает временный файл для его замены.

Примечание. Этот код изначально был основан на не существующей блоге блога Чао Сю. Код с тех пор расходится, но исходный пост можно просмотреть в Wayback Machine .

33
ответ дан Jordan Running 22 August 2018 в 02:21
поделиться

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

$file = file_get_contents($filename);
$content = 'Your Content' . $file;
file_put_contents($content);  
3
ответ дан Kailash Badu 22 August 2018 в 02:21
поделиться
  • 1
    Привет, спасибо из будущего! Это решило мою проблему для меня. Я ценю это... – Keven 15 September 2013 в 05:18
1
ответ дан Kamil Szot 22 August 2018 в 02:21
поделиться

Вы можете использовать fseek , чтобы изменить указатель в примечании.

Следует отметить, что если вы используете fwrite, он удалит текущий контент. Поэтому в основном вы должны прочитать весь файл, использовать fseek, написать свой новый контент, записать старые данные файла.

$file_data = file_get_contents('database.txt')
$fp = fopen('database.txt', 'a');
fseek($fp,0);
fwrite($fp, 'new content');
fwrite($fp, $file_data);
fclose($fp);

Если ваш файл действительно огромный, и вы не хотите чтобы использовать слишком много памяти, вы можете захотеть иметь два подхода к файлу, например

$fp_source = fopen('database.txt', 'r');
$fp_dest = fopen('database_temp.txt', 'w'); // better to generate a real temp filename
fwrite($fp_dest, 'new content');
while (!feof($fp_source)) {
    $contents .= fread($fp_source, 8192);
    fwrite($fp_dest, $contents);
}
fclose($fp_source);
fclose($fp_dest);
unlink('database.txt');
rename('database_temp.txt','database.txt');

. Решение Ben кажется более простым в моем честном мнении.

Последний пункт: Я не знаю, что у вас есть в database.txt, но вы можете сделать то же самое проще с помощью сервера базы данных.

1
ответ дан Peter Mortensen 22 August 2018 в 02:21
поделиться

file_get_contents() и file_put_contents() используют больше памяти, чем использование функций fopen(), fwrite() и fclose():

$fh = fopen($filename, 'a') or die("can't open file");
fwrite($fh, $fileNewContent);
fclose($fh);
0
ответ дан Rasclatt 22 August 2018 в 02:21
поделиться
  • 1
    Это ничего не говорит о "предваряющем" функциональность, о которой спрашивал ОП. – Erenor Paz 16 July 2016 в 19:20
  1. Открыть файл в режиме w + не в режиме +.
  2. Получить длину добавляемого текста ($ chunkLength)
  3. установить курсор в начале файл при необходимости
  4. читать $ chunkLength байты из файла
  5. вернуть курсор в $ chunkLength * $ i;
  6. записать $ prepend
  7. set $ добавить значение с шага 4
  8. выполнить эти шаги, тогда как EOF
    $handler = fopen('1.txt', 'w+');//1
    rewind($handler);//3
    $prepend = "I would like to add this text to the beginning of this file";
    $chunkLength = strlen($prepend);//2
    $i = 0;
    do{
        $readData = fread($handler, $chunkLength);//4
        fseek($handler, $i * $chunkLength);//5
        fwrite($handler, $prepend);//6
    
        $prepend = $readData;//7
        $i++;
    }while ($readData);//8
    
    fclose($handler);
    
2
ответ дан Sergey Samoilenko 22 August 2018 в 02:21
поделиться

Вы можете использовать следующий код для добавления текста в начале и конце файла.

$myFile = "test.csv";<br>
$context = stream_context_create();<br>
  $fp = fopen($myFile, 'r', 1, $context);<br>
  $tmpname = md5("kumar");<br>

//this will append text at the beginning of the file<br><br>
  file_put_contents($tmpname, "kumar");<br>
  file_put_contents($tmpname, $fp, FILE_APPEND);<br>
  fclose($fp);<br>
  unlink($myFile);<br>
  rename($tmpname, $myFile);<br><br>
  //this will append text at the end of the file<br>
  file_put_contents($myFile, "ajay", FILE_APPEND);
3
ответ дан Sujeet Kumar 22 August 2018 в 02:21
поделиться

Быстрая и грязная:

<?php
$file_data = "Stuff you want to add\n";
$file_data .= file_get_contents('database.txt');
file_put_contents('database.txt', $file_data);
?>
49
ответ дан ths1104 22 August 2018 в 02:21
поделиться
  • 1
    Я думаю, что нет лучшего способа вставить данные в начале файла. Вы все равно должны переместить все данные, содержащиеся в файле. Для больших файлов вам может потребоваться прочитать часть файла по частям, чтобы поместить его в память. – Kamil Szot 19 November 2009 в 03:43
  • 2
    Как насчет использования "c" режим fopen? Не записывается ли это в начало файла? – SSH This 2 May 2012 в 01:37
  • 3
    @SSHЭто да, но это также переписывает что-нибудь в пути :) – jave.web 10 April 2014 в 17:23
Другие вопросы по тегам:

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