Функция замены строки в файле

1. KOZZ (26.07.2010 / 09:42)
Есть у кого нить готовое решение ?

2. Studentsov (26.07.2010 / 09:52)
Wap-Motor 19:
<?php
//------------------- Функция замены строки в файлe --------------------//
function replace_lines($files, $lines, $text){

if (file_exists($files)){
if ($lines!==""){
if ($text!=""){

$file = file($files);
$fp = fopen($files, "a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);

foreach($file as $key=>$val){ 

if ($lines==$key) {
fputs($fp,"$text\r\n");

} else {

fputs($fp,$val);
}
}

fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
}}}}
?>


3. KOZZ (26.07.2010 / 10:01)
у меня вот так получилось, хз,мне кажется можно как то получше это реализовать
<?
function replace($from,$to,$str,$file) {
// $from - заменяемый текст
// $to - текст на который заменяем
// $str - строка в которой заменяем
// $file - файл в котором производим замену
$f1 = file_get_contents($file);
$str_num = explode("\n",$f1);
$f2 = str_replace($from,$to,$f1);
if(file_put_contents($file,$f2)){echo 'Замена произведена успешно!';} else {echo 'Ошибка замены!';}
}

replace('1','2',0,'file.txt');
?>


4. Валерий (26.07.2010 / 11:59)
у тебя номер строки тут вообще не используется в функции.. Просто заменяет во всём файле.
Да и не нужен этот параметр, я думаю.

5. KOZZ (26.07.2010 / 12:17)
4, нужен, просто я не то скопировал ))

6. DmitryDick (26.07.2010 / 13:13)
<?php
$what = 'что меняем';
$to = 'на что меняем';

$file = file('файл');

if ( $key = array_search($what, $file) ) $file[$key] = $to;
?>


7. KOZZ (26.07.2010 / 13:23)
6,а как потом запись в твоем варианте делать чтобы остальные строки сохранились?

8. DmitryDick (26.07.2010 / 13:28)
<?php 

function replace_line($what, $to, $current_file) {

$file = file($current_file); 

if ( $key = array_search($what, $file) ) {

$file[$key] = $to; 
file_put_contents($current_file, implode("\n", $file));

return true;

}

return false;

}

?>


9. KOZZ (26.07.2010 / 13:38)
8, не робит

10. Titov (26.07.2010 / 15:12)
а если так?
<?php
/*
file.dat
1|user|password
2|user2|password2
*/
$parametr = $_GET['parametr'];
/*
$parametr = 1;
*/
$file=file('file.dat');
$count=count($file);
for($i=0;$i<$count;$i++)
{
$ex=explode('|',$file[$i]);
if ($ex[0]==$parametr)
{

$var=str_replace($ex[0].'|'.$ex[1].'|'.$ex[2], $parametr.'|user3|password3', file_get_contents("file.dat"));
$fopen=fopen("file.dat","w");
fputs($fopen,$var);
fclose($fopen);

}
}
?>


11. KOZZ (26.07.2010 / 15:24)
10, как то странно %)
все функции открытия файлов использовал(и file, и fopen, и file_get_contents), а самое интересное что одного и того же файла %)...нерационально

12. Titov (26.07.2010 / 15:39)
11 ну они все последовательно будут работать а неодновременно,
file будем строки считать, знаеш другой способ это сделать говори
fopen открываем и пишим в файл уже с изменненой строкой
file_get_contents можно вынести в переменную $bufer, но зачем. лишняя строка в коде
думаю нагрузка не будет такой уж сильной главное чтоб работало и делало то что нужно.

13. Studentsov (26.07.2010 / 15:58)
Чем тебя функция из #2 не устраивает?

14. DmitryDick (26.07.2010 / 17:34)
<?php
function replace_line($what, $to, $current_file) {
	
	$file = file($current_file);
	$file = array_map('trim', $file);
	
	if ( $key = array_search($what, $file) ) {
		
		$file[$key] = $to;
		file_put_contents($current_file, implode("\n", $file));
		
		return true;
		
	}
	return false; 

}
?>


15. KOZZ (26.07.2010 / 17:47)
file будем строки считать, знаеш другой способ это сделать говори
ну это делается довольно просто:
<?$f1 = file_get_contents($file); 
$str_num = explode("\n",$f1);
$str_kol = count($str_num);?>


16. KOZZ (26.07.2010 / 18:07)
13, я смотрю на разные варианты, смотрю как реализуют эту задачу другие люди.

17. ramzes (26.07.2010 / 21:43)
$txt = file('text.txt');
$txt[$line] = str_replace($old, $new, $txt[$line]);
и хорош

18. KOZZ (28.07.2010 / 08:16)
в общем остановился на своем варианте:
<?
function replace($from,$to,$str,$file) {
# $from - заменяемый текст
# $to - текст на который заменяем
# $str - строка в которой производим замену ('all - все строки')
# $file - файл в котором производим замену
if(!file_exists($file)){die("Файл '$file' не существует!");}

$f1 = htmlspecialchars(file_get_contents($file));
if($str!=='all'){
$str = $str-1;
$f_str = explode("\n",$f1);
$f2 = str_replace($from,$to,$f_str[$str]);
$f3 = str_replace($f_str[$str],$f2,$f1);
$result = $f3;
}else{
$f1 = htmlspecialchars(file_get_contents($file));
$f2 = str_replace($from,$to,$f1);
$result = $f2;
}
if(file_put_contents($file,$result))
{die ('Замена произведена успешно!');} else {die ('Ошибка замены!');}
}?>


URL: https://visavi.net/topics/11907