【问题标题】:Deleting parts of a file with php用php删除文件的一部分
【发布时间】:2010-08-10 07:23:25
【问题描述】:

使用file_get_contents写入html文件后,我需要删除该文件内容的某些部分,因为css和图像的路径已经改变。

所以我有如下几行:

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

我想删除这两行中的“/Elements/”部分以及其他部分,以便获得正确的路径。

【问题讨论】:

  • 我能找到的最简单的解决方案是下载文件并使用 Dreamweaver 或您选择的其他编辑器进行查找和替换。
  • 我不认为他只有一个文件用于该操作...
  • 令人惊讶的是,有些人似乎更喜欢一种复杂的做事方式,而一个简单的解决方案就足够了(或者你忘了提及一些使复杂的方式更相关的细节)。

标签: php file writing


【解决方案1】:

你的问题到底是什么?只需对从 file_get_contents 获得的字符串使用 str_replacepreg_replace(仅在需要正则表达式时使用后者,即如果它不是简单的搜索和替换),然后将其保存回磁盘。

即。

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

【讨论】:

  • 如果文件包含的路径不只是显示的路径,那么实际上逐个替换路径是有意义的,例如str_replace("/Elements/css/main.css", "/css/main.css", $html); 以防止在其他路径中意外移除。或者传入数组。
  • 如果他只想更改引用中使用的路径(href,img src等),那么我不会一一更改,而是使用DOM解析器,那会更有意义对我来说。但由于他基本上要求进行简单的搜索和替换,我想这正是他所需要的......
  • 是的,我想自己推荐 DOM Parser,但 UseCase 似乎太简单了,根本不需要。
  • 在使用file_get_contents时,是否可以从原始文件中删除,而不是重新打开并保存回磁盘
  • 您希望如何保留这些更改而不保存它们?所以,不,您不能删除它们并保留更改而不将更改保存回磁盘。
【解决方案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。

祝你好运

【讨论】:

  • 当您可以一口气读取文件,替换相关部分并保存修改后的文件时,为什么还要费心将它们读入数组。
  • 因为这被证明是一种更安全的方式,因为您可以检查每一行而不是使用操作处理整个文件。这在实践中被证明是有问题的。
猜你喜欢
  • 2023-03-17
  • 2017-09-16
  • 1970-01-01
  • 2014-03-08
  • 2012-01-11
  • 2022-01-23
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多