Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > fopen


Автор: m1kle 4.5.2008, 19:05
Вообщем хочу написать что-то в начало файла. Но почему то он обрезает всё что было в конце файла. Я использую режим r+.

Автор: Feldmarschall 4.5.2008, 19:17
"вообще" пишется без "м" на конце, а "в общем" - раздельно.
Постарайся запомнить.

Ты уверен что хочешь перезаписать что-то в начале файла?

Автор: m1kle 4.5.2008, 19:23
Feldmarschall, учить русскому языку меня не стоит.

Я хочу записать строчку в начало файла.

Код

$file=fopen("***/file.txt", "r+");
fwrite($file, "daasdas1\n");
fclose($file);


- вот например файл.

Автор: Feldmarschall 4.5.2008, 20:24
что-то мне уже надоело повторяться.
вы бы хоть кооперировались с одинаковым нубскими вопросами.

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

Автор: m1kle 4.5.2008, 20:26
Feldmarschall, Я и не говорил "Дописать". Ты меня не понял.

Мне нужно записать что-то в начало файла, не повредив при этом остальной текст. А у меня при записи в начало файла весь текст, который "ниже" удаляется, хотя я использую режим r+, который окрывает файл для чтения и записи; помещяет указатель в начало файла.

Автор: Feldmarschall 4.5.2008, 20:29
Это ты меня не понял.
"записать, не повредив" - это и значит дописать,
а поместив указатель в начало файла, можно только перезаписать. поверх того, что раньше было в начале файла.
ясно?

Автор: m1kle 4.5.2008, 20:32
Feldmarschall, Тогда другой вопрос. Чем тогда
'w+'     Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать. 
отличается от
'r+'     Окрывает файл для чтения и записи; помещяет указатель в начало файла. 

?

Автор: Sufius 4.5.2008, 20:33
m1kle, 
считываешь старый файл, добавляешь к этой инфе новую, заново записываешь в файл...

Автор: m1kle 4.5.2008, 20:34
Sufius, понял. Спасибо.

Автор: Sufius 4.5.2008, 20:35
http://ru2.php.net/fopen
w+ - хотя бы  Если файл не существует - пробует его создать. 

Автор: m1kle 4.5.2008, 23:30
Спасибо за помощь, всё работает

Автор: win9x 9.6.2008, 17:00
Лично я все же нашел для себя способ не переписывать, а дописывать в файл, используя флаг a , который устанавливает указатель в конец файла.

Код

$handle = fopen($dbfile, "a");
fwrite($handle,$text."\n");
 fclose($handle);


Полученный результат открываю , как массив rsort(file($dbfile))  и обрабатываю тем же оператором for , только в обратном порядке, т.е. в порядке течения событий. 

Код

$dataArr = file($dbfile);
rsort($dataArr);
for($a=0;$a<count($dataArr);$a++){
print $dataArr[$a]
;}


Иногда rsort() пашет некоректно, тогда:

Код

$dataArr = file($dbfile);
$dataArr =  array_reverse($dataArr);
for($a=0;$a<count($dataArr);$a++){
print $dataArr[$a]
;}


Ни на чем не настаиваю, но для меня этот способ работает отменно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)