[PHP] Problem beim ersetzen eines Strings in einer PHP-Datei

deDe

Lieutenant
Registriert
Juli 2004
Beiträge
841
Hallo,
Folgendes Problem. Ich wollte ein Script ala Latest News schreiben, was heisst,
dass er er mir nur die News Topic in eine Zeile seperat vom Newssystem(
Topic+inhalt) in eine Datei namens Latestnews.php schreiben soll. Die Newstopic
stammt von einem Formular.

In der Latestnews.php steht ein Kommentar namens <!--latestnews-->, welcher dann
ersetzt werden soll durch die Newstopic und hinter diesem Kommentar stehen noch
einige HTML Sachen wie </center> und so weiter..

Problem ist jetzt, dass PHP immer anstatt den Kommentar <!--latestnews--> mit
dem Neuen zu ersetzen den restlichen Dateiinhalt, der nach <!--latestnews-->
folgt einfach löscht.

ich kann den Fehler einfach nicht finden.

<?php
$eintrag2="<!--latestnews--> ";
$eintrag2.='<a href="index.php"><b><font color="#cf0000">'
$eintrag2.=$news;

$bol=file_exists("latestnews.php");
if ($bol) {
$datei1=fopen("latestnews.php","r");
if($datei1) {
$dateigroesse1=filesize("latestnews.php");
$inhalt22=fread($datei1,$dateigroesse1);
fclose($datei1); //schließe Datei
}
$ersetzen22=str_replace("<!--latestnews-->",$eintrag2,$inhalt22);
}
$bol=file_exists("latestnews.php");
if($bol) {
$datei1=fopen("latestnews.php","w");
if($datei1) {
$ersetzen22=substr($ersetzen22, 0, 97);
$ersetzen22.="...</font></b></a>";
$output=fwrite($datei1,$ersetzen22);
fclose($datei1);
echo('<br>Erfolgreich in Latestnews.php geschrieben.');
}
}
?>

Das Script soll nach 97 Zeichen abbrechen den Text weiterzuschreiben und einfach
den String "..</font></b></a>" ranhängen.

Das Problem ist wie gesagt, dass der nach dem Kommentar <!--latestnews--> den
ganzen darauffolgenden Dateiinhalt löscht , so dass im Prinzip immer nur die
neueste News-Line dasteht, weil die älteren ja gelöscht werden.
Der sollte doch eigentlich nur ERSETZEN oder nicht?
 
Probier mal file_get_contents() ist einfacher als fopen/fread...
hast du es schon mal mit einem anderen Platzhalter versucht?
 
Ehm soweit ich das gesehen hab, speicherst du den inhalt der LatestNews-Datei in $eintrag2 und ersetzt dann die Kommentarzeile (<!--latestnews-->) durch die eigentliche News ($inhalt22), was in $ersetzen22 gespeichert wird.

Dann kürzt du den Inhalt der Variablen $ersetzen22 auf 97 Zeichen.

Meiner meinung nach müsstest du doch wenn dann den Inhalt von $inhalt22 auf 97 Zeichen kürzen und zwar _bevor_ du ihn in $ersetzen22 einfügst.
Schließlich willst du ja die News selbst kürzen und nicht den entsprechenden html-quelltext, oder?
 
Funktioniert es so:

PHP:
<?php 
// Text, der den Platzhalter ersetzt
$strReplacement = '<!--latestnews-->\n<a href="index.php"><span style="font-weight:bold;">';

//Die News wird hiermit eingebunden. 
$strNews = "Hier ist die News.";


if(file_exists("latestnews.php"))
{
  //Datei existiert, inhalt wird gelesen
  $strContent = file_get_contents("latestnews.php");
}
if(strlen($strContent)>0)
{
  // Inhalt ist grösser als 0 Byte
  // Der String der News wird auf 97 Zeichen gekürzt.
  $strShortNews = substr($strNews, 0, 97);
  //Dem Ersatzstring wird Die News und das Ende angehängt
  $strReplacement .= $strShortNews."</span></a>";
  //ersetze Platzhalter
  $strReplaced = str_replace("<!--latestnews-->", $strReplacement, $strContent);
  if(is_writeable("latestnews.php"))
  {
     //Datei existiert, öffne Datei
     $fileNews = fopen("latestnews.php", "w");
     if(fwrite($fileNews, $strReplaced))
     {
        //erfolgreich geschrieben, schliesse datei
        fclose($fileNews);
     }
  }
}
?

(Notes: Nicht getestet)
[Edit 1: Syntax Fehler korrigiert]
[Edit 2: Variabel vor der Definition benutzt, geändert.]
 
Zuletzt bearbeitet:
thx erstmal für die antworten

muss das nachher noch mal durchgehen. Fliegenkiller funzt noch nicht ganz :)

php.JPG
 
Am ende von zeile 64 fehle ne schließene klammer^^ ;)
 
Edit:

Danke Fliegenkiller. Funktioniert nun genau wie ich es mir vorgestellt habe ;)
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
5
Aufrufe
1.199
master.rv
M
Antworten
10
Aufrufe
1.385
K
Antworten
9
Aufrufe
1.053
Zurück
Oben