Eintrag-Details: Aufbau eines Mini-CMS mit wenigen Zeilen PHP-Code

31.01.2006

Aufbau eines Mini-CMS mit wenigen Zeilen PHP-Code

Eine Frage, die immer wieder in den einschlägigen Foren auftaucht ist diese: Wie kann ich eine Internetseite einrichten, bei der mein Kunde den Text und ein Bild selbst ändern kann, ohne ein aufwändiges Content-Management-System (CMS) zu installieren?

[Mehr:]

Wenn es wirklich nur um einen Text-Absatz und ein Bild geht, das hier jeweils ausgetauscht werden soll, so kann dies mit wenigen PHP-Zeilen realisiert werden. Dieses Beispiel soll zeigen, wie es gemacht wird. Das Skript können Sie hier als ZIP-Datei herunterladen: Download Zip-Datei. Die Datei enthält zwei Skripte "edit.php" und "seite.php".

Advertisement/Werbung
Anmerkung: Die hier vorgestellten Beispiele sollen lediglich das Prinzip verdeutlichen. Bei einigen Einzelheiten würde man in einer endgültigen Anwendung möglicherweise anders vorgehen. Sie dienen hier lediglich als Beispiele, damit das Verfahren anschaulich erläutert werden kann. In meinen Online-Kursen wird selbstverständlich genauer auf Einzelheiten eingegangen.

Das Skript "seite.php" kopieren Sie auf Ihren Webspace, dort wo die eigentliche Seite angezeigt werden soll. Das Skript "edit.php" kopieren Sie in ein Verzeichnis "admin" direkt unterhalb dieses Verzeichnisses. Dieses Admin-Verzeichnis können Sie dann über .htaccess schützen, so dass man die Seite "edit.php" nur als berechtigter Benutzer aufrufen kann.

Damit das Skript die Datei "inhalt.txt" anlegen kann, muss das admin-Verzeichnis die Rechte 777 (also Schreibrecht für Alle) besitzen. Sollte das nicht möglich sein, kopieren Sie einfach eine leere Textdatei mit dem Namen "inhalt.txt" in das Verzeichnis. Die Rechte für diese Datei müssen auf 646 oder 666 eingestellt werden, damit das Skript die Datei verändern kann.

Wenn auch Bilder hochgeladen werden sollen, muss das Verzeichnis, in dem sich "seite.php" befindet ebenfalls die Rechte 777 oder 757 haben. Andernfalls kann das Skript keine neuen Bilder abspeichern oder alte Bilder löschen.

Advertisement/Werbung
Das Skript zur Anzeige der Seite ist recht einfach gehalten:

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Anzeige-Seite</title>
</head>
<body>
<?php
$fp = fopen("admin/inhalt.txt", "r");
$inhalt = "";
while (!feof($fp))
{
    $inhalt .= fgets($fp);
}
echo nl2br($inhalt);

if (file_exists("bild1.gif"))
{
    $bild = "bild1.gif";
}
if (file_exists("bild1.jpg"))
{
    $bild = "bild1.jpg";
}
if (file_exists("bild1.png"))
{
    $bild = "bild1.png";
}
if ($bild > "")
{
    ?>
    <img src="<?php echo $bild ?>">
    <?php
}
?>
</body>
</html>

Code herunterladen

Es handelt sich hier um normales HTML, in das etwas PHP-Code zur Anzeige des Textes und des Bildes eingefügt wurde. Um den Text anzuzeigen, wird die Datei "inhalt.txt" im Verzeichnis "admin" eingelesen. Dazu können die PHP-Dateifunktionen fopen() und fgets() verwendet werden. Alle Zeilen werden in die Variable $inhalt eingelesen. Diese wird dann über die Funktion nl2br($inhalt) auf der Seite ausgegeben. Die Funktion nl2br() sorgt dafür, dass alle Absätze, die in "inhalt.txt" vorhanden sind, als HTML-Zeilenumbrüche (
) auf der Seite ausgegeben werden.

Beim Bild muss nur festgestellt werden, um welchen Dateityp es sich handelt. Je nachdem ob das Bild als gif, jpg oder png-Datei vorhanden ist, wird der entsprechende Dateiname in dem -Tag eingefügt.

Das Skript zum Bearbeiten ist hier schon etwas umfangreicher. Die ersten Zeilen des Skriptes sollen verhindern, das der Browser-Cache eine alte Version der Seite anzeigt:

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");                        

Code herunterladen

Diese Kombination hat sich gut bewährt um ein Neuladen der Seite zu erzwingen, so dass nicht versehentlich ein alter Text im Textfeld angezeigt wird.

Der sichtbare Teil des Skriptes besteht aus einem Formular, das auch zum Upload von Dateien (oder hier: Bildern) geeignet ist:

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" 
  method="POST" enctype="multipart/form-data">
Text:<br>
<textarea name="text" 
  rows="10" 
  cols="40"><?php echo $_POST['text'] ?></textarea><br>
Bild:<br>
<INPUT type="file" name="bild" 
  value="<?php echo $_POST['bild'] ?>"><br>
<input type="submit" name="submit" 
  value="speichern">
</form>

Code herunterladen

Damit auch ein Upload funktioniert, muss das

Tag um das Attribut enctype="multipart/form-data" ergänzt werden. Mit einem solchen Formular kann dann auch ein Input-Type "file" zum Hochladen eines Bildes verwendet werden.

Die Auswertung der verschickten Daten erfolgt noch vor dem Aufruf des Formular-Codes.

if (isset($_POST['submit']))
{
    // Text in Textdatei ablegen
    $fp = fopen("inhalt.txt", "w");
    if ($fp)
    {
        fputs($fp, $_POST['text']);
        fclose($fp);
        echo "Text wurde gespeichert<br>";
    } else {
        echo "Fehler: kann Textdatei nicht öffnen<br>";
    }

Code herunterladen

Wurde der Submit-Button angeklickt, wo wird die Datei "inhalt.txt" zum Schreiben geöffnet. Dabei wird der alte Inhalt automatisch gelöscht. Der eingegebene Text wird aus der Variable $_POST['text'] über die Funktion fputs() in die Datei geschrieben.

    // vorhandene Bilder löschen
    if (file_exists('../bild1.gif'))
    {
        unlink('../bild1.gif');
    }
    if (file_exists('../bild1.jpg'))
    {
        unlink('../bild1.jpg');
    }
    if (file_exists('../bild1.png'))
    {
        unlink('../bild1.png');
    }

Code herunterladen

Zunächst werden alle vorhandenen Bilder gelöscht, um nicht alte Dateileichen unnötig über die Zeit aufzubewahren. Da wir die Dateitypen gif, png und jpg erlauben, wird geprüft, ob eine Datei mit dieser Erweiterung vorhanden ist. Ist das der Fall, wird diese Datei mit unlink() gelöscht.

    if (in_array($_FILES['bild']['type'], 
         array('image/pjpeg', 'image/jpg', 'image/jpeg')))
    {
        $ext = 'jpg';
    }
    if ($_FILES['bild']['type'] == 'image/gif')
    {
        $ext = 'gif';
    }
    if ($_FILES['bild']['type'] == 'image/png')
    {
        $ext = 'png';
    }

Code herunterladen

In diesem Schritt wird nun geprüft, ob die gelesene Datei den passenden Dateityp enthält. Da es für JPG-Dateien mehrere Möglichkeiten gibt, den Filetype festzulegen, werden hierzu mit der Funktion in_array() mehrere Typen gleichzeitig geprüft.

if ($_FILES['bild']['error'] == 0)
{
  if ($ext == '')
  {
    echo "Fehler: nur GIF, PNG und JPG als Bilder erlaubt<br>";
  } else {
    if (false == move_uploaded_file(
       $_FILES['bild']['tmp_name'], 
       "../bild1." . $ext))
    {
        echo "fehler beim speichern des Bildes<br>";
    } else {
        echo "Bild 'bild1.$ext' wurde gespeichert<br>";
    }
  }
}
echo '<a 
  href="'.$_SERVER['PHP_SELF'].
	'">nochmal bearbeiten</a>';

Code herunterladen

Wurde bei der Auswahl der Upload-Datei kein Fehler festgestellt, so wird die Datei aus dem temporären Verzeichnis des Webservers in das eigentliche Anzeige-Verzeichnis kopiert. Als Bildname wird immer "bild1" mit der entsprechenden Dateierweiterung benutzt.

Sollte das Formular zum ersten Mal aufgerufen werden, so müssen natürlich erst die entsprechenden Zeilen aus der Textdatei eingelesen und angezeigt werden. Das erledigt der Code, der sich im else-Block befindet:

$fp = fopen("inhalt.txt", "r");
if ($fp)
{
  $_POST['text'] = '';
  while(!feof($fp))
  {
      $_POST['text'] .= fgets($fp);
  }
  fclose($fp);
}

Code herunterladen

Hier wird der Inhalt aus "inhalt.txt" genauso eingelesen wie Sie das schon aus dem Skript "seite.php" kennen.

Damit hätten Sie bereits eine Kleinst-Version eines voll funktionsfähigen Content-Managements zu Verfügung. Mit etwas Aufwand lässt sich das Ganze auch für mehrere Texte auf einer Seite und auch für unterschiedliche Seiten erweitern. Werden dann allerdings auch noch unterschiedliche Zugriffsrechte für verschiedene Autoren benötigt, sollte man spätestens dann auf eines der vorhandenen Open-Source CMS zurückgreifen, die ja im Internet in großer Zahl vorhanden sind.

Hinweis: Diesen Text und die enthaltenen Beispielprogramme und Skripte dürfen Sie zum Erlernen der einzelnen Techniken und auch als Grundlage für Ihre eigenen Projekte auf eigene Gefahr kostenlos nutzen.

Bitte denken Sie daran, dass alle Texte und Quellcodes trotzdem urheberrechtlich geschützt sind. Eine direkte Weitergabe ist nur nach ausdrücklicher schriftlicher Genehmigung gestattet.

Permalink 31.01.2006 10:17:13, von Marian eMail , 308 Wörter, 24676 mal angeschaut   German (DE) Kategorien: PHP

Kommentare, Pingbacks:

Bisher keine Kommentare/Pingbacks für diesen Eintrag...

Kommentar schreiben:

Ihre E-Mail-Adresse wird nicht angezeigt.
Ihre URL wird angezeigt.
Antispam-Feld
Erlaubte XHTML Tags: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
Optionen:
 
(Zeilenumbrüche werden zu <br />)
(Setze Cookies für Name, eMail & URL)

Werbung

Online-Kurse

  • Bequem PHP lernen bei freier Zeiteinteilung von zuhause
  • Der Onlinekurs den jeder versteht
  • www.lernpilot.de/wbt/

Konnte ich helfen?

mehr Werbung

buy viagra online|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66| levitra overdose effects levitra overdose symptoms which is stronger levitra or viagra cialis levitra or viagra levitra or viagra which is better levitra interactions alcohol levitra uk side effects levitra uk online generic levitra uk levitra use for women levitra use instructions levitra user group levitra tabs 20mg levitra trial coupon levitra time effectiveness levitra time frame levitra ratings and reviews levitra effects viagra levitra effects use levitra effects forum levitra effects liver levitra effects women levitra effectiveness reviews levitra women effect standard levitra dose levitra generic medication levitra generic viagra levitra generic cheap levitra generic drug levitra generic available