Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема с записью в файл

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Форум №6] >> Проблема с записью в файл
Имя
Сообщение << Старые топики   Новые топики >>
Проблема с записью в файл - 2009-05-29 00:07:35.730000   
anty611

Сообщений: 25
Оценки: 0
Присоединился: 2007-07-02 04:06:41.186666
&lt;form action='test.php' method='POST'&gt;
&lt;tr&gt;&lt;td align="right"&gt;Логин: &lt;/td&gt;&lt;td&gt;&lt;input type='text' name='login' size=20&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align="right"&gt;Пароль: &lt;/td&gt;&lt;td&gt;&lt;input type='text' name='pass' size=20&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' value='Сохранить'&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;?php

if($_POST['login']) {

include("config.php");
$get=file_get_contents("config.php");

$save[0]=str_replace($login, $_POST['login'], $get);
$save[1]=str_replace($pass, $_POST['pass'], $get);

for ($x=0; $x&lt;=2; $x++) {
$f=fopen("config.php", "w");
fwrite($f, $save[$x]);
fclose($f);
}
}

?&gt;

Скрипт пишет в конфиг два значения. Он их заменяет, чтобы создавать видимость редактирования конфа, а не тупо дописывает в конце. Если писать один параметр, то все норм, но если два и более, то он тупо чистит файл, в который пишет. Если пытаться просто дописывать сверху, то все норм, но если ставить "w", то начинается нечто. Я не могу понять почему… Спасибо :(
Post #: 1
RE: Проблема с записью в файл - 2009-05-29 00:43:37.883333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
На баше появилось новое ответвление - killmeplease. Вот оно здесь очень уместно.
$f=fopen("config.php", "w");&nbsp; - открыть файл для записи, то есть записать следующую информацию вместо предыдущего содержимого. ПХП не знаю, но предполагаю, что тебе нужно "a" вместо "w". Это во-первых.
Во-вторых, нафиг тебе в цикле открывать-закрывать файл?
$f = fopen("config.php", "w"); // я так понимаю, весь файл конфига тебе нужно как раз перезаписывать, поэтому здесь остаётся "w" for ($x = 0; $x &lt;= 2; $x++) { &nbsp;&nbsp;&nbsp; fwrite($f, $save[$x]); } fclose($f);
Ну и в конце концов, для пароля используй input type="pawssword", а то какой с него толк, если все вводимые символы видны.
Post #: 2
RE: Проблема с записью в файл - 2009-05-29 01:01:33.456666   
anty611

Сообщений: 25
Оценки: 0
Присоединился: 2007-07-02 04:06:41.186666
ХП не знаю, но предполагаю, что тебе нужно "a" вместо "w".

"w" перезаписывает файл, а "a" - добавляет сверху. Мне нужна перезапись, поэтому там w.

нафиг тебе в цикле открывать-закрывать файл

Хм, у меня скрипт должен интуитивно сам догадываться, какой файл нужно открыть? Спасибо за попытку разобраться в ситуации, но ничего из этого не относится к делу. Я сейчас думаю о работе скрипта, а не о том, что у меня пароль слабый и что надо поле ставить другое. Этим я позже займусь

Судя по посту "нафиг открывать закрывать файл", ты в кодинге вообще проходом… Имхо. Такое сказануть. Глянь по внимательне конструкцию скрипта и поймешь, зачем там открывать его.
Post #: 3
RE: Проблема с записью в файл - 2009-05-29 01:17:01.076666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Обожаю, когда объясняешь нубу, что он неправ, а нуб ещё и огрызается
quote:

"w" перезаписывает файл, а "a" = добавляет сверху. Мне нужна перезапись, поэтому там w.

Тебе нужна перезапись всего файла или каждой переменной? Ты посмотри, что ты делаешь в своём скрипте:
1ое повторение в цикле:
1) открыть файл, затерев всё, что было до этого
2) записать в файл переменную номер 0
3) закрыть файл
2ое повторение в цикле
4) снова открыть файл для перезаписи, тем самым стерев записанную на первом повторении переменную
5) записать переменную номер 1
6) закрыть файл
3е повторение
7) открыть файл для перезаписи, стерев записанную на втором повторении переменную номер 1
8) записать переменную номер 2
9) закрыть файл

То есть, ты тупо затираешь на каждом цикле то, что у тебя было записано на предыдущем, а потом удивляешься, почему у тебя только последний символ записан. Ну продолжай удивляться. Я тебе рассказал, что для того, чтобы не затиралось старое содержимое, а просто дописывалось новое, нужно использовать "a" вместо "w". А лучше открыть файл для перезаписи, записать туда скопом всё, что тебе нужно и закрыть файл. Если ты не в курсе, когда открываешь файл, можно в него много раз записать, а не только один. В том числе, можно писать в файл в цикле, то есть открыть его перед циклом, в цикле записать всё, что нужно, а после цикла спокойно закрыть файл. И будет тебе счастье. Это я тебе уже рассказал, но ты в силу своей "крутости" и превосходства передо мной несчастным пропустил в фразе про "нафиг открывать-закрывать файл в цикле" словосочетание "в цикле". Ну давай, крутой, научи нас всех кодить.
Главное, нет быть забить то, что я написал, в код и проверить, работает ли, так нет, нужно сначала огрызнуться. Нуну.
Post #: 4
RE: Проблема с записью в файл - 2009-05-29 01:23:55.136666   
anty611

Сообщений: 25
Оценки: 0
Присоединился: 2007-07-02 04:06:41.186666
Лог файла config.php после ввода логина и паса (с правами "a"):

<?php
$login="admin";
$pass="pass";
?>
<?php
$login="df";
$pass="pass";
?>
<?php
$login="admin";
$sfd="sfd";
?>

Как видишь, он смотрит первое
<?php
$login="admin";
$pass="pass";
?>

после чего идет запись с измененным логином ($login). Потом скрипт берет предыдущую запись с уже ИЗМЕНЕННЫМ полем логина, и пишет туда новый пас и перезаписывает (должен так делать по хорошему). В итоге на выходе получается готовый измененный конф. В данном случае мы этого не увидим, т.к. пишется много данных, если бы было тупо логин с пасом, а не сверху куча всего ещё, то все бы норм писалось, а тут ессесно перезапись тупо. Теперь заткни свой рот и не отписывайся больше в теме, пожалуйста. Я не достоин внимания такого мегахцкера как ты, поэтому давай закроем тему, т.к. судя по всему ты ничего дельного не скажешь все равно. Ты бы хоть скрипт попробывал в деле, а потом уже понты кидал.
Post #: 5
RE: Проблема с записью в файл - 2009-05-29 01:27:56.520000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
А палата на этом форуме ещё есть? Обязательно должна быть для таких случаев.
Post #: 6
RE: Проблема с записью в файл - 2009-05-29 01:29:41.436666   
anty611

Сообщений: 25
Оценки: 0
Присоединился: 2007-07-02 04:06:41.186666
Он каждый раз открывает файл в цикле, поэтому будут писаться данные исходя из уже записанных в скрипте. Если бы все проходило на одном дыхании, то да, была бы шняга. В любом случае, вопрос был не в том, что у меня пишется последнее значение, а в том, почему у меня ваще запись не работает. Читай внимательнее. И вообще: отредактируй скрипт и кинь сюда. Если все будет пахать, то я хоть петухом себя признаю, мне плевать. А кидать словами не стоит, лучше покинь тему. В теоретических знаниях ты очень грамотный я смотрю, а вот практикой ты что-то не балуешь, только слова.
Post #: 7
RE: Проблема с записью в файл - 2009-05-29 01:46:16.880000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
&lt;form action='test.php' method='POST'&gt; &lt;tr&gt;&lt;td align="right"&gt;Логин: &lt;/td&gt;&lt;td&gt;&lt;inputtype='text' name='login' size=20&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td align="right"&gt;Пароль:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='pass'size=20&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' value='Сохранить'&gt;&lt;/td&gt;&lt;/tr&gt; &lt;?php if($_POST['login']) { include("config.php"); $get=file_get_contents("config.php"); $save[0]=str_replace($login, $_POST['login'], $get); $save[1]=str_replace($pass, $_POST['pass'], $get); $f=fopen("config.php", "w"); for ($x=0; $x&lt;=2; $x++) { &nbsp;&nbsp; fwrite($f, $save[$x]); } fclose($f); } ?&gt; Это если весь остальной твой код написан правильно, за что я не ручаюсь. Как я и сказал, ПХП не знаю, и времени разбираться нету. Вот код, который будет записывать в файл 2 переменные, каждый раз заменяя старые значения:
&lt;?php $save[0] = "value 1"; $save[1] = "value 2"; $f=fopen("somefile.txt", "w"); for ($x = 0; $x &lt; 2; $x++) { &nbsp;&nbsp; fwrite($f, $save[$x]); } fclose($f); } ?&gt; У тебя, кстати, ещё и границы цикла не соблюдены. Ну тут уж извини, гоняться за всеми твоими багами я не собираюсь, пиши по строчке и проверяй, делает ли твой скрипт, то, что ты от него ожидаешь, или уже есть ошибка. В конце концов напишешь таки рабочий скрипт.
Post #: 8
RE: Проблема с записью в файл - 2009-05-29 02:58:12.386666   
anty611

Сообщений: 25
Оценки: 0
Присоединился: 2007-07-02 04:06:41.186666
Thx )) Блин, башня уже не варит. Сразу бы так )
Post #: 9
RE: Проблема с записью в файл - 2009-05-29 10:39:00.740000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
quote:

А палата на этом форуме ещё есть?

есть, переношу :)
Post #: 10
Страниц:  [1]
Все форумы >> [Форум №6] >> Проблема с записью в файл







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.