После использования file_get_contents для записи в файл html мне нужно удалить определенные части содержимого этого файла, потому что пути к css и изображениям изменились.

Итак, у меня есть строки, как показано ниже:

 <link href="/Elements/css/main.css" rel="stylesheet" type="text/css">
  <image src="/Elements/images/image1.gif" />

Я хотел бы удалить часть: '/ Elements /' из этих двух и других строк, чтобы у меня были правильные пути.

1
Rifki 10 Авг 2010 в 11:23
Самое простое решение, которое я смог найти, - это загрузить файл и выполнить поиск и замену с помощью Dreamweaver или другого редактора по вашему выбору.
 – 
Luke
10 Авг 2010 в 11:26
Я не думаю, что у него есть только один файл для этой операции ...
 – 
Vladislav Rastrusny
10 Авг 2010 в 11:37
Удивительно, как некоторые люди, кажется, предпочитают запутанный способ делать что-то, когда достаточно простого решения (либо это, либо вы забыли упомянуть некоторые детали, которые делают запутанный способ более актуальным).
 – 
wimvds
10 Авг 2010 в 18:08

2 ответа

Лучший ответ

Я сделал это один раз для редактирования файлов зоны BIND. Лучшее решение - прочитать файл в большом массиве, найти строки, которые нужно удалить. Отмените установку или отредактируйте эти строки и верните массив в файл.

Вот как вы читаете файл в массив:

$html = file("something.html");

Найдите нужную строку так:

foreach($html as $key => $line)
{
  $html[$key] = str_replace("/Elements/", "", $line); 
}

Затем запишите все обратно в файл

$fp=fopen("something.html","w+");
foreach($html as $key => $value)
{
   fwrite($fp,$value."\t");
}

Если вы знаете регулярные выражения, вы также можете изучить это (это то, что я использовал). Затем используйте preg_replace.

Удачи

2
thecodeassassin 10 Авг 2010 в 12:47
Зачем вам вообще читать их в массив, если вы можете просто прочитать файл за один раз, заменить соответствующие части и сохранить измененный файл.
 – 
wimvds
10 Авг 2010 в 18:06
Потому что это оказалось более безопасным способом, потому что вы можете проверять каждую строку вместо того, чтобы обрабатывать весь файл действием. На практике это оказалось проблематичным.
 – 
thecodeassassin
16 Авг 2010 в 16:06

А в чем именно твоя проблема? Просто используйте str_replace или preg_replace (используйте последнее, только если вам нужны регулярные выражения, т. е. если это не простой поиск & replace) в строке, полученной из file_get_contents, и сохраните ее обратно на диск.

То есть .

$text = file_get_contents("yourfile.html");
$text = str_replace("/Elements/", "", $text);
file_put_contents("yourfile.html", $text);
3
wimvds 10 Авг 2010 в 18:00
1
Если файл содержит больше, чем только показанные пути, имеет смысл фактически заменять пути один за другим, например str_replace("/Elements/css/main.css", "/css/main.css", $html); для предотвращения случайного удаления в других папках. Или передайте массивы.
 – 
Gordon
10 Авг 2010 в 11:52
1
Если он хочет изменить только пути, используемые в ссылках (href, img src и т. Д.), Я бы не стал менять их один за другим, а использовал парсер DOM, что было бы для меня еще более осмысленным. Но поскольку он в основном просит простой поиск и замену, я думаю, это именно то, что ему нужно ...
 – 
wimvds
10 Авг 2010 в 12:08
1
Да, я сам хотел предложить DOM Parser, но UseCase кажется слишком простым, чтобы действительно в этом нуждаться.
 – 
Gordon
10 Авг 2010 в 12:13
Можно ли вместо повторного открытия и сохранения на диск удалить из оригинала при использовании file_get_contents
 – 
Rifki
10 Авг 2010 в 12:51
И как вы ожидаете, что эти изменения будут сохранены без их сохранения? Итак, нет, вы не можете удалить их и сохранить изменения без сохранения изменений на диск.
 – 
wimvds
10 Авг 2010 в 14:30