Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Редактирование файла
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Редактирование файла

Страниц (1): [1]
 

1. Зверь - 30 Декабря, 2011 - 16:42:49 - перейти к сообщению
Здравствуйте! С наступающим Улыбка

Помогите с реализацией вот такой штуки:

Есть некий файл, с примерно таким содержимым

CODE (htmlphp):
скопировать код в буфер обмена
  1. KEY1 = VALUE1
  2. KEY2 = VALUE2
  3. ...


Так вот, как найти по ключу значение и перезаписать его. То есть найти значение например KEY2 и поменять его на то, что придет через форму.
2. Зверь - 30 Декабря, 2011 - 19:06:57 - перейти к сообщению
Ну где же вы, гуру)
3. OrmaJever - 30 Декабря, 2011 - 20:36:55 - перейти к сообщению
мм?
PHP:
скопировать код в буфер обмена
  1. $arr = file("filename.txt");
  2.  
  3. $i = 0;
  4. $newArr = array();
  5. while(list($key, $value) = explode(' = ', $arr[$i++])) $newArr[$key] = $value;
  6. unset($arr);
  7. $arr['KEY2'] = 'new value';
4. OrmaJever - 31 Декабря, 2011 - 00:09:38 - перейти к сообщению
Вобще если значения уникальны можно не заморачиватся
PHP:
скопировать код в буфер обмена
  1. $filename = 'filename.txt';
  2. file_put_contents($filename, str_replace('VALUE2', 'new_value', file_get_contents($filename)));
5. Зверь - 31 Декабря, 2011 - 06:04:34 - перейти к сообщению
OrmaJever пишет:
мм?
PHP:
скопировать код в буфер обмена
  1. $arr = file("filename.txt");
  2.  
  3. $i = 0;
  4. $newArr = array();
  5. while(list($key, $value) = explode(' = ', $arr[$i++])) $newArr[$key] = $value;
  6. unset($arr);
  7. $arr['KEY2'] = 'new value';

Мне нужно не запихнуть файл в массив и поменять значение уже у массива, а именно найти значение по уникальному ключу и поменять его напрямую в файле
OrmaJever пишет:
Вобще если значения уникальны можно не заморачиватся
PHP:
скопировать код в буфер обмена
  1. $filename = 'filename.txt';
  2. file_put_contents($filename, str_replace('VALUE2', 'new_value', file_get_contents($filename)));

Нет, значение может меняться на все что вздумается, а вот ключи уникальны

P/S Вот соорудил пример для более полного понимания того что я хочу реализовать _http://booklight.tk/
6. Зверь - 31 Декабря, 2011 - 10:00:48 - перейти к сообщению
Вот пришел к такому костылю

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: text/html;charset=utf-8");
  3.         $data = parse_ini_file("config.cfg");
  4.                 foreach($data as $k=>$v){
  5.                         $txt .= "<tr>
  6.                                 <td>
  7.                                     <input type='text' value='{$k}' readonly>
  8.                                 </td>
  9.                                 <form method='post'>
  10.                                 <td>
  11.                                     <input name='{$k}' type='text' value='{$v}'>
  12.                                 </td>
  13.                                 <td>
  14.                                     <input type='submit' name='submit' value='Edit'>
  15.                                 </form>
  16.                                 </td>
  17.                         </tr>";
  18.                 }
  19.                 foreach($_POST as $k=>$v){
  20.                                 $data["$k"] = $v;
  21.                 }
  22.                 foreach($data as $k=>$v){
  23.                         $string .= "$k = $v\n";
  24.                 }
  25.                 echo '<pre>';
  26.                 echo $string;
  27.                 echo '</pre>';
  28.         if(isset($_POST['submit'])){
  29.                 file_put_contents("config.cfg",$string);
  30.                 header("Location:".$_SERVER['SCRIPT_NAME']);
  31.                 }
  32.         echo "<table border='0px'>{$txt}</table>";
  33. ?>

Содержимое файла config.cfg
CODE (htmlphp):
скопировать код в буфер обмена
  1. KEY1 = VALUE1
  2. KEY2 = VALUE2
  3. KEY3 = VALUE3
  4. KEY4 = VALUE4
  5. KEY5 = VALUE5

Два минуса
файл полностью перезаписывается, что не позволяет хранить в нем комментарии вида
; comment
И добавляется значение кнопки сабмита, в данном случае "submit = Edit"

Подскажите как исправить.

Пример работы _http://booklight.tk/

 

Powered by ExBB FM 1.0 RC1