2010-08-10 71 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