2010-08-10 238 views
1

使用file_get_contents寫入到html文件後,我需要刪除此文件內容的某些部分,因爲css和圖像的路徑已更改。使用php刪除文件的部分

所以,我有如下行:

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

我想刪除:這兩條線「/片/」的一部分,和其他人,所以我會在正確的路徑。

+0

簡單的解決方案,我能找到將要下載的文件,並做了查找和使用Dreamweaver或您選擇的其他編輯器代替。 – Luke 2010-08-10 07:26:38

+0

我不認爲他只有一個文件的操作... – 2010-08-10 07:37:51

+0

有些人似乎更喜歡一種令人費解的做事方式,當一個簡單的解決方案就足夠了(這或者你忘記提及一些細節,錯綜複雜的方式更相關)。 – wimvds 2010-08-10 14:08:28

回答

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。

好運

+0

當你只需一次讀取文件,替換相關部分並保存修改後的文件時,爲什麼還要將它們讀入數組中? – wimvds 2010-08-10 14:06:04

+0

因爲這證明是一種更安全的方式,因爲您可以檢查每一行而不是通過操作處理整個文件。事實證明,這在實踐中是有問題的。 – thecodeassassin 2010-08-16 12:06:38

3

究竟是什麼問題?只需使用str_replacepreg_replace(僅在需要正則表達式時使用後者,即如果它不是簡單的搜索&替換),您將從file_get_contents獲取的字符串中,並將其保存回磁盤。

即。

$text = file_get_contents("yourfile.html"); 
$text = str_replace("/Elements/", "", $text); 
file_put_contents("yourfile.html", $text); 
+1

如果文件包含的不僅僅是所顯示的路徑,則實際上逐個替換路徑是有意義的,例如, 'str_replace(「/ Elements/css/main.css」,「/css/main.css」,$ html);'以防止在其他過程中意外刪除。或者傳入數組。 – Gordon 2010-08-10 07:52:44

+1

如果他只想改變引用中使用的路徑(href,img src等),那麼我不會一個接一個地改變它們,但是使用一個DOM解析器,這對我來說更有意義。但是,因爲他基本上要求一個簡單的搜索和替換,我想這就是他所需要的... – wimvds 2010-08-10 08:08:10

+1

是的,我想要自己推薦DOM解析器,但UseCase似乎太簡單了,真的不需要它。 – Gordon 2010-08-10 08:13:26