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. Ley4ik_Russia - 13 Марта, 2011 - 15:53:51 - перейти к сообщению
Перед мной стоит задача редактировать файл с помощью формы, она, форма, требует от пользователя ввести допустим свой IP адрес, а при нажатии на кнопку, должно проверяться существует ли такая строка в файле, если сущетвует, то заменить ее, при этом не известно где именно в файле нужная строка находится. Например, листинг редактируемого файла, под названием 2.txt:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. [data]
  3. floppyless = "1"
  4. msdosinitiated = "1"
  5. ; Needed for second stage
  6. OriSrc = "\\192.168.0.2\netboot\WINXPSP3\INSTALL\I386"
  7. OriTyp = "4"
  8. LocalSourceOnCD = 1
  9. DisableAdminAccountOnDomainJoin = 1
  10.  
  11. [SetupData]
  12. OsLoadOptions = "/fastdetect"
  13. ; Needed for first stage
  14. SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.2\netboot\WINXPSP3\install"
  15.  
  16. [RemoteInstall]
  17. ; Avoid automatic format/repartition
  18. Repartition = No
  19. UseWholeDisk = No
  20.  
  21. [UserData]
  22. ComputerName = *
  23. ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
  24.  

В нем есть 2 подстроки со значением ip адреса, который нужно заменить на введенный пользователем.пока что пользуюсь кодом:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ip = c("edit2")->text;
  3. $str1 = 'OriSrc = "\\\192.168.0.2\netboot\WINXPSP3\INSTALL\I386"';
  4. $var1 = substr_replace($str1, $ip, -42, -31);
  5. $data1 = $var1 . "\r\n";
  6. $file = '2.txt';
  7. $array1 = file( $file );
  8. $array1[4]=$data1;
  9. file_put_contents( $file, $array1 );
  10. $str2 = 'SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.2\netboot\WINXPSP3\install"';
  11. $var2 = substr_replace($str2, $ip, -37, -26);
  12. $data2= $var2 . "\r\n";
  13. $array2 = file( $file );
  14. $array2[12]=$data2;
  15. file_put_contents( $file, $array2 );
  16.  

Тут недостаток в том что строка заменяется по ее номеру, но как указывалось выше, заранее номер строки неизвестен.

Спасибо за уделенное внимание моей проблеме!
2. ALEN - 13 Марта, 2011 - 16:48:04 - перейти к сообщению
parse_ini_file чем не в помощь?
3. Ley4ik_Russia - 13 Марта, 2011 - 16:53:49 - перейти к сообщению
ALEN пишет:
parse_ini_file чем не в помощь?


Проблема в том что файл имеет расширение *.txt а не *.ini (((
Может конечно я чего то не понимаю?)))
4. ALEN - 13 Марта, 2011 - 16:58:13 - перейти к сообщению
Ley4ik_Russia
1) Формат файла, а не то, что к нему дописано важно!!
2)
а) читаешь файл - заносишь в массив
б) Нужные строки обрабатываешь с помощью str_replace
в) Записываешь все в файл
5. Ley4ik_Russia - 13 Марта, 2011 - 17:11:18 - перейти к сообщению
ALEN пишет:
Ley4ik_Russia
1) Формат файла, а не то, что к нему дописано важно!!
2)
а) читаешь файл - заносишь в массив
б) Нужные строки обрабатываешь с помощью str_replace
в) Записываешь все в файл


Спасибо Подмигивание счас попробую))
6. Champion - 13 Марта, 2011 - 19:47:31 - перейти к сообщению
Если именно ip заменить, то можно и так:
file_put_contents('2.txt', preg_replace('/(?:\d+\.){3}\d+/', $new_ip, file_get_contents('2.txt')));
7. JustUserR - 14 Марта, 2011 - 13:43:00 - перейти к сообщению
Ley4ik_Russia пишет:
Тут недостаток в том что строка заменяется по ее номеру, но как указывалось выше, заранее номер строки неизвестен.
В качестве возможного варианта решения предполагаемой задачи, заключающеся в осуществении анализа, модификации и извлечения элементов из информационных полей в текстовой базе данных, допустимо использование унифицированного решения, основанного на обеспечении поседовательного анализа входящих строк и провединии копирования их модифицированных инстанций
8. Ley4ik_Russia - 15 Марта, 2011 - 06:32:47 - перейти к сообщению
Всем спасибо я написал вот такой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = c("edit2")->text;
  3. if ("" != $result>0)
  4. {
  5. $ipadr = str_replace("%ip%", $result, "\\\%ip%\\netboot\WINXPSP3\INSTALL\I386");
  6. $ipadr1 = str_replace("%ip%", $result, "\Device\LanmanRedirector\\%ip%\\netboot\WINXPSP3\install");
  7. ini::open("xp001.sif");
  8. ini::write("data", "OriSrc", $ipadr);
  9. ini::write("SetupData", "SetupSourceDevice", $ipadr1);
  10. MessageBox("Готово!", "Netboot");
  11. } else {
  12. MessageBox("Введите IP адрес", "Netboot");
  13. }
  14.  

Пока что устраивает, но не все))

 

Powered by ExBB FM 1.0 RC1