PHP generierte Seite als .html speichern

J

jimi77

Gast
Hallo

Ich habe versucht für eine Seite ein CMS einzubauen. (ein sehr kleines).
Man schreibt Text in eine Textbox - Text wird der PHP zugesendet und eingefügt.
Jetzt habe ich das Problem das der eingefügte Text nicht dort bleibt. Das heißt so viel wie sobald die php-Seite geschlossen wird verfallen die eingefügten Texte wieder.

Wie ist es möglich das sich die neu generierte Seite mit dem neuen Inhalt dauerhaft speichert?


Danke
 
Sinnvollerweise indem du den HTML-Text in einer Datenbank speicherst und diese zur Laufzeit auswertest.

Unsinnvollerweise indem du die HTML-Datei komplett neu schreibst.
Kleine Hilfe zu php und Dateien
 
gut ich habe mir das durchgelesen ... das problem ist nur

Ich erkläre nochmal wie das CMS funktioniert:

Man schreibt Text in eine Textbox hinein -> Text wird per "echo(stripslashes($_POST['content']));" von der Textbox in die .php geholt -> Seite wird mit neuem Inhalt generiert

Das was mir noch fehlt ist das die generierte Seite mit dem neuen Inhalt gespeichert wird. Ich habe es auch nicht geschafft den Inhalt herauszulesen aus der neugenerierten Seite (ich weiß nicht wie man aus einer neugenerierten .php den Inhalt herausliest, da sie ja nur lokal ist)

ich hoffe ihr könnt mir helfen
 
Ok formulieren wir es mal so das es ein breiteres Spektrum an Personen versteht:

Du willst via PHP deine Inhalte Pflegen, möchtest daraus statische Datein (.html) generieren und diese werden dann dem Besucher letzten endes angezeigt - korrekt?

Hier mal ein grober Ablauf wie das funktioniert bzw. was du tun müsstest/solltest damit das ganze Sinnvoll bleibt:

zu aller erst: Daten, Inhalte (Blogposts etc etc etc) müssen trotzdem in der Datenbank abgelegt werden

Dann wirst du eine funktion benötigen die dir dein HTML Output generiert - inklusive deiner dynamischen inhalte. Diesen HTML Output kannst du dann als .html abspeichern und der Besucher sieht eine statische, aber dennoch über ein Admin Panel (o.ä.) verwaltbare Seite.

Mal am Beispiel eines 0815 Blogs:

man nehme ein Seitentemplate für den üblichen html schnickschnack aussen rum

HTML:
<html>
<head>
<title>my blog</title>
</head>
<body>

<div id="container">
<!-- hier sollen alle blog postings rein -->
{Platzhalter}
</div>

</body>
</html>

An Stelle vom {Platzhalter} sollen jetzt alle X Blogeinträge aus der Datenbank kommen

PHP:
$output = "";
while($post = mysql_fetch_assoc($query)){
$output .= "<div class='blogPost'>" . .$post['content'] . "</div>";
}

/*
...
*/

$seitenOutput = str_replace("{Platzhalter}",$output,$seitenOutput);


Prinzipiell passiert hierbei nichts anderes als das, was ein Template System macht (zb. Smarty):

- Template öffnen
- Platzhalter durch Werte ersetzen
- Template an der richtigen Stelle einfügen



Hoffe ich konnte dir einen kleinen Denkanstoß geben :-)
 
Sauberer ist es schon, wenn du die Texte in einer Datenbank ablegst und die Seite dynamisch aufbauen lässt.

Aber für deinen Lösungswunsch kann ich dir zwei Alternativen nennen:
  1. Gib den Text nicht mit echo aus, sondern lass den gesamten HTML-Code in einen String schreiben. Anschliessend schreibst du den String mit fwrite() in eine Datei (z.B. .html) auf den Server.
  2. Du aktivierst den Ausgabepuffer am Anfang deines Skripts und liest den Ausgabepuffer am Ende deines Skripts in eine Datei. Das hätte den Vorteil, dass du nicht viel am jetzigen Skript ändern musst.
In beiden Fällen hast du am Ende eine statische HTML-Datei erzeugt, die du irgendwie in die bestehende Seite einbinden (verlinken) musst.


Viel Erfolg!
 
@scor genau das will ich machen. und der server unterstützt leider kein mysql ...

@Gobble-G das mit dem Ausgabepuffer habe ich shcon versucht nur leider hat es nicht funktioniert. (kann man einen ganze html datei so aufzeichnen wenn man am anfang den Ausgabepufferspeicher aktviert?`)
noch eine Frage ... wie sollte das mit fwrite funktionieren? kann man in einen bestimmten Teil einer .html datei mit fwirte schreiben? das heißt kann ich in ein bestimmtes div zB etwas hineinschreiben?

Danke
 
Hm...

Also, jimi, ich weiß genau worauf du hinaus willst - doch das ist der absolut falsche weg. Du kannst natürlich den Text einer Shoutbox als HTML abspeichern (oder eben auch die gesamte Seite), doch das macht keinen sinn. Du kannst auch die Shoutboxeinträge einzeln als .txt abspeichern (am besten mit Zeitstempel ( time(); ) als dateinamen) und diese .txt Dateien auslesen. Aber: Das ganze kostet viel zu viel Performance, wird auf dauer unübersichtlich und schlecht wartbar.

Du solltest - nein, vielmehr MUSST eine Datenbank einsetzen. Das ist das einzige, was Sinn macht und auch von der Performance her besser und generell weniger Anfällig für menschliche Fehler ist. Zudem: Solltest du gar die Shoutboxeinträge in einer einzigen Datei speichern, muss jeder, der einen neuen Shoutboxeintrag machen will und PHP die Datei gerade geöffnet hat, solange warten bis PHP die Datei wieder geschlossen hat. Auch können in einer solchen Datei schnell mal Fehler passieren, die verhindern dass die Shoutboxeinträge korrekt dargestellt werden (vor allem dann, wenn du die Einträge ggf. im csv-format anlegst).

Mein Rat an dich: Besorg dir einen Webspace mit MySQL-Datenbank. Sowas gibt es praktisch schon fast für lau - vielmehr wie 5 Euro/Monat kostet sowas heute nicht mehr.


Wenn du jedoch wirklich bei deiner "ich speicher das lieber als html" methode bleiben willst, dann wirst du um einen hohen Aufwand nicht herumkommen. Du kannst zwar mit den Dateifunktionen von PHP den Dateizeiger an eine bestimmte Stelle setzen und von da an schreiben, doch du kannst da nicht nach einer bestimmten Zeile/Bereich suchen und ersetzen.

Dazu wirst du die Datei komplett einlesen und mit Regex und der Funktion preg_match() und preg_replace() arbeiten müssen.
 
danke für die ganze Hilfe!
ich weiß nicht ob ich einen neuen Thread aufmachen soll weil es ja doch ein anderes Thema ist.

Ich bin es nochmal ganz von neu angegangen ...

Ich habe jetzt ein kleines JavaScript in dem man Text hineinschreiben kann und formatieren kann. Der formatierte Text wird in einer Variable als HTML-Text gespeichert.

Jetzt kommt das Problem ... der formatierte Text (also schon in HTML umgeschrieben) befindet sich in einer Variable. Nur wie übergebe ich den Inhalt der Variable einer PHP-Datei (Die Datei schreibt den Text in eine Textdatei, diese wird dann später immer neugelesen ... ich habe jetzt doch nicht die Lösung mit dem als .html speicher genommen da der Server ohnehin keinen großen Traffic hat und es nicht so schlimm wäre wenn die php immer die Textdatei neuausliest)

Was wäre da die beste Lösung?
 
Zurück
Oben