Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление строки из файла 
:(
    Опции темы
americanets
Дата 18.3.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12




Удаляю строку из файла такой функцией

Код

function DelHtaccess($delstroke){
$f_old = file( "../.htaccess" );
for( $i=0; $i < count( $f_old ); $i++ )
if( $f_old[$i] == $delstroke)
unset( $f_old[$i] );
//теперь пишем изменения в файл
$f_new = fopen("../.htaccess",'w'); //открываем на перезапись
//пишем массив в файл
for( $i=0; $i < count( $f_old ); $i++ )
 fputs( $f_new, $f_old[ $i ] );
fclose( $f_new );
}

DelHtaccess($search_text);
DelHtaccess($search_text2);


строки нужные удаляет, но в новом файле нет последней строки , вернее постоянно удаляет и последние 2 строки, как сделать чтоб корректно работало?


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 18.3.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



Или можно как то проще просто избавиться от ненужной строки? Заменив ее например на "" ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Всемогущий
Дата 18.3.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



функция может принимать массив,и если принимаемое значение массив она удалит все строки которые будут указанны
если принимаемое значение число то функция удалит одну эту строку
Код

<?php
function myunset($delstring){
$temparray=file("../.htaccess");
if(is_array($delstring)){foreach($delstring as $v)unset($temparray[$v]); }
else unset($temparray[$delstring]);
file_put_contents ("../.htaccess",implode('',$temparray));   }
myunset(0);
// или myunset(array(4,6));
?>


Добавлено @ 17:56 
совет : не отвечай на своё сообщение первым, потому что когда глядишь на список тем ,темы с 0 ответов бросаются в глаза а когда 1 думаешь"опоздал,уже помогли"... 


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
SelenIT
Дата 18.3.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



americanets, беда Вашей ф-ции в следующем: число строк в массиве действительно уменьшилось на единицу, а индексы массива после места уделения не изменились. Поэтому при переборе массива циклом for до нового, уменьшенного количества элементов последний индекс не захватывается. Плюс, при error_reporting(E_ALL) будет показан notice по поводу несуществующего индекса на месте удаленной строки.

Обе эти проблемы решаются заменой цикла for на foreach.


Цитата(americanets @  18.3.2007,  17:41 Найти цитируемый пост)
Или можно как то проще просто избавиться от ненужной строки? Заменив ее например на "" ? 

Тоже можно... что-то в таком духе:

Код

file_put_contents ('../.htaccess', preg_replace('/^'.preg_quote($delstring, '/').'$/m', '', file_get_contents('../.htaccess')));



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 18.3.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



Спасибо , пробую 
Цитата(Всемогущий @  18.3.2007,  17:54 Найти цитируемый пост)
совет : не отвечай на своё сообщение первым, потому что когда глядишь на список тем ,темы с 0 ответов бросаются в глаза а когда 1 думаешь"опоздал,уже помогли"...
 учту на будующее smile 



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 18.3.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



пишет Fatal error: Call to undefined function: file_put_contents() 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 18.3.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



americanets, PHP4? Эта ф-ция только для 5-й версии. Для 4-й замените на "традиционные" fopen + fputs|fwrite.

как-то так:
Код

function DelFromFile($fname, $delstring) {
   $contents = preg_replace('/^'.preg_quote($delstring, '/').'$/m', '', file_get_contents($fname));
   $f_new = fopen($fname,'w');
   fputs( $f_new, $contents);
}

DelFromFile('../.htaccess', $search_text);


Хотя вообще, имхо, таким образом терзать .htaccess довольно рисковано, слишком легко нечаянно вызвать неустранимую (без вмешательства по FTP|SSH) 500-ю ошибку...

Это сообщение отредактировал(а) SelenIT - 18.3.2007, 20:06


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 18.3.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



понятно, а как лучше? 

делал так  но не работает тоже 

Код

function file_put_contents($n,$d) {
   $f=@fopen($n,"w");
   fwrite($f,$d);
   fclose($f);
}
 
function DelHtaccess($delstring){
$temparray=file("../.htaccess");
if(is_array($delstring)){foreach($delstring as $v)unset($temparray[$v]); }
else unset($temparray[$delstring]);
file_put_contents ("../.htaccess",implode('',$temparray));   }

$search_text="RewriteRule ^dsdsdsdsdsds$ /index.php\n"
$search_text2="RewriteRule ^dsdsdsdsdsds2$ /index.php\n"
DelHtaccess($search_text);
DelHtaccess($search_text2);



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 18.3.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



americanets, нужно учесть, что в результате file() в каждом элементе массива остаются еще символы перевода строки. Нужно либо удалить их оттуда (напр. с помощью array_map + rtrim), либо добавить к искомой строке (имхо, первый вариант аккуратнее и надежнее).

А функция Всемогущего, насколько я понимаю, "заточена" под удаление строки по номеру, а не по содержимому.

Это сообщение отредактировал(а) SelenIT - 18.3.2007, 20:50


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 18.3.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



В искомую строку вроде добавил \n 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 18.3.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



americanets, а OC какая? Почему я и говорю - лучше из массива trim'ить...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.