2013-06-03 1 views
0

Я пытаюсь создать программу, в которой я могу добавлять вещи в список, читать вещи и очищать список. У меня четкая функция работает отлично, но я не могу добавить или прочитать более 1 строки за раз. Я использую fwrite($handle, $MyString);, но это заменяет все во всем файле $MyString. Чтобы получить информацию из файла, я использую $list = fgets($handle);, а затем используя эхо, чтобы распечатать его. Это считывает только первую строку в файле. Любая помощь? Спасибо!Как добавить несколько строк в один текстовый файл и прочитать все?

код GetList:

<?php 
$myFile = "needlist.txt"; 
$fh = fopen($myFile, 'r'); 
$theData = fgets($fh); 
fclose($fh); 
echo $theData; 
?> 

Добавить в код списка:

<?php 
$neededlist = "needlist.txt"; 
$fh = fopen($neededlist, 'w'); 
$user_message = $_REQUEST['txtweb-message']; 
$needed .= $user_message; 
$needed .= "\n"; 
fwrite($fh, $needed); 
fclose($fh); 
echo "You have successfully added ", $user_message; 
?> 
+1

Не могли бы вы изменить свой вопрос и добавить весь свой код, пожалуйста? – andrewsi

+1

'fopen ($ filename, 'w +')' => 'fopen ($ filename, 'a +')'. – raina77ow

+0

как вы открываете файл ... должно быть открыто ($ filename, "a"); – Orangepill

ответ

0

При записи в файл вы открываете свой дескриптор файла с «а» вариант режима? Открытие с помощью «w» или «x» усекает его, поэтому вы начинаете с чистого файла (http://php.net/fopen)

fgets(); читается только до конца строки (http://php.net/fgets). Для того, чтобы получить весь файл, вы можете попробовать:

var $list = ""; 
var $line = ""; 
while ($line = fgets($handle)) { 
    $list = $list . "\n" . $line; 
} 
echo $list; 

Вы хотите добавить «\ п», потому что Fread не читает перевода строки IIRC. Есть также несколько функций, которые могут быть более подходящими в этой ситуации, например file_get_contents и fread.

+0

Разве это не так, как 'file_get_contents()'? – Barmar

+0

Кроме того, вы вызываете file_get_contents с именем файла, и вы вызываете fgets() с дескриптором файла - да. Вероятно, лучше использовать file_get_contents и позволить интерпретатору обрабатывать nitty-gritty. – user1958756

0

Fgets возвращает только одну строку. Вы должны использовать его в цикле так:

while (($buffer = fgets($handle, 4096)) !== false) { 
    echo $buffer; 
} 
Смежные вопросы