2010-08-10 3 views
1

Après avoir utilisé file_get_contents pour écrire dans un fichier HTML, j'ai besoin de supprimer certaines parties de ce contenu parce que les chemins vers css et les images ont changé.Suppression de parties d'un fichier avec php

J'ai donc des lignes comme ci-dessous:

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

Je voudrais retirer la: partie «/Eléments/» de ces deux lignes, et d'autres, donc je vais avoir les chemins corrects.

+0

solution la plus simple que je pourrais trouver serait de télécharger le fichier et faire une recherche et de remplacement en utilisant dreamweaver ou un autre éditeur de votre choix. – Luke

+0

Je ne pense pas qu'il ait un seul fichier pour cette opération ... –

+0

Il est étonnant que certaines personnes préfèrent une façon alambiquée de faire les choses, quand une simple solution suffit (ou que vous avez oublié de mentionner quelques détails qui font la manière alambiquée est plus pertinente). – wimvds

Répondre

2

Je l'ai fait une fois pour modifier les fichiers de zone BIND. La meilleure solution est de lire le fichier dans un grand tableau, trouvez les lignes que vous voulez supprimer. Désactivez ou modifiez ces lignes et repoussez le tableau dans un fichier.

Voici comment lire un fichier dans un tableau:

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

Trouver la ligne que vous voulez comme ceci:

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

puis l'écrire tous à un fichier

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

Si vous connaissez des expressions régulières, vous pouvez également regarder cela (c'est ce que j'ai utilisé). Ensuite, utilisez preg_replace.

Bonne chance

+0

Pourquoi voudriez-vous même les lire dans un tableau lorsque vous pouvez simplement lire le fichier en une fois, remplacer les parties pertinentes et enregistrer le fichier modifié. – wimvds

+0

Parce que cela s'est avéré être un moyen plus sûr, car vous pouvez vérifier chaque ligne au lieu de traiter le fichier entier avec une action. Cela s'est avéré problématique dans la pratique. – thecodeassassin

3

Et quel est exactement votre problème? Il suffit d'utiliser str_replace ou preg_replace (utilisez ce dernier uniquement si vous avez besoin d'expressions régulières, c'est-à-dire s'il ne s'agit pas d'une simple recherche) sur la chaîne que vous avez obtenue de file_get_contents et enregistrez-la sur le disque.

ie.

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

Si le fichier contient plus que juste les chemins indiqués, il est logique de remplacer réellement les chemins un par un, par ex. 'str_replace ("/Eléments/css/main.css "," /css/main.css ", $ html);' pour empêcher une suppression accidentelle dans d'autres chemins. Ou passer dans les tableaux. – Gordon

+1

S'il veut seulement changer les chemins utilisés dans les références (href, img src, etc.) alors je ne les changerais pas un par un, mais utiliser un parseur DOM, ce qui me semblerait encore plus logique. Mais puisqu'il demande essentiellement une simple recherche et remplacement, je suppose que c'est exactement ce dont il a besoin ... – wimvds

+1

Oui, je voulais suggérer DOM Parser moi-même, mais le UseCase me semble trop simple pour en avoir vraiment besoin. – Gordon

Questions connexes