Im Script eine Folgeseite per header-Weiterleitung aufrufen

  • im Quellcode dürfen keine Textausgaben vor dem header(…) in Form von “echo”, “printf”, “error_reporting(E_ALL)”, usw. stehen, da sonst der Header nicht gesendet wird
  • auch vorher eingebundene Dateien (include, require) können Ausgaben beinhalten
  • HTML-Code vor PHP kann auch ASCII-Zeichen beinhalten, diese verhindern ebenfalls die Weiterleitung per header(…)
  • Wichtige Infos zum Thema gibt es auch hier: Link
  • zulässig sind sowohl absolute Adressen:
  • <?php
       header("Location: http://www.domain.de/seite.php"); // absolute Adresse
       exit(); // danach sofort das Script abbrechen
    ?>
    
  • als auch rel. Pfade:
  • <?php
       header("Location:../verzeichnis/seite.php"); // rel. Adresse
       exit(); // danach sofort das Script abbrechen
    ?>
    

Session Variablen verwenden

  • Das Beispiel verwendet zwei Dateien s1.php und s2.php .
  • s1.php erzeugt die Session und registriert eine Variable ‘username’ im globalen Array $_SESSION .
  • Nach dem Klick auf den Link in s1.php wird in s2.php die akt. Session weitergeführt und die Variable ‘username’ ausgelesen und die Session zerstört.
  • Man kann so also ohne viel Aufwand versteckt Daten von einer Seite zur anderen transferieren, ohne $_GET (URL) oder $_POST (Formvariablen) zu benutzen.
  • s1.php
    <?php
      if (session_start()) // neue Session erstellen oder bestehende fortführen -> muss ganz oben stehen, vor "<?php" dürfen keine Leerzeichen sein
      {
        // akt. SessionID ausgeben
        echo "akt. SessionID: ".session_id()."<br>";
        
        // akt. Speicherpfad der Session ausgeben
        echo "Speicherpfad der Session: ".session_save_path()."<br>";
        
        // Variable in der Session registrieren, ab PHP 4.1.0
        if (!isset($_SESSION["username"])) $_SESSION["username"] = "admin";
        
        echo "akt. Inhalt der Variable 'username': ".$_SESSION["username"]."<br>";
        
        echo "<a href="s2.php" title="Session test">weiter</a>";
      }
      else
      {
        echo "Session konnte nicht gestartet werden.<br>";
      }
    ?>
    
  • s2.php
    <?php
      if (session_start()) // neue Session erstellen oder bestehende fortführen -> muss ganz oben stehen, vor "<?php" dürfen keine Leerzeichen sein
      {
        // akt. SessionID ausgeben
        echo "akt. SessionID: ".session_id()."<br>";
        
        // akt. Speicherpfad der Session ausgeben
        echo "Speicherpfad der Session: ".session_save_path()."<br>";
        
        // Variable in der Session registrieren, ab PHP 4.1.0
        echo "akt. Inhalt der Variable 'username': ".$_SESSION["username"]."<br>";
        
        // alle Variablen der Session löschen
        session_unset();
        
        // kontrollieren, ob die Variable gelöscht wurde
        echo "akt. Inhalt der Variable 'username' nach session_unset(): ".$_SESSION["username"]."<br>";
        
        if (session_destroy())
        {
          echo "Session erfolgreich zerstört.<br>";
        }
        else
        {
            echo "Session konnte nicht zerstört werden.<br>";
        }
      }
      else
      {
        echo "Session konnte nicht gestartet werden.<br>";
      }
    ?>
    

Logfile erstellen

// Dateiname
$filename = "logfile.csv";
// Trennzeichen
$col_separator = ";";
// Datum
$timestring = date("d.m.Y H:i:s");
// ein paar interessante Servervariablen :)
$adress = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
// CSV-Header
$header = "TIME".$col_separator."REMOTE_ADDR".$col_separator."HTTP_REFERER\n";

// falls noch nicht vorhenden, Logfile erstellen
if (!file_exists($filename))
{
    $fh = fopen($filename, 'w');
    
    // Header schreiben   		
    fwrite($fh, $header);
        
    fclose($fh);
} 	    

// Zeile anfügen
$fp = fopen($filename, "a");

fwrite($fp, implode(array($timestring, $adress, $referer), $col_separator)."\n"); 
fclose($fp);

File download über den header

  • Im Beispiel wird über einen Klick auf einen Download-Button ein Script abgearbeitet, welches aus einem, für den Benutzer von außen nicht sichtbaren, Verzeichnis einen Dateidownload startet.
  • Beispiel für eine HTML-Datei, die download.php?f=$filename aufruft:
$filename = "myfile.gif";

echo "<form method="post" action="download.php?f=".$filename.">\n";
echo "  <input type="submit" name="btn_download" class="button" value="Download">\n";
echo "</form>\n";
  • Beispiel für die download.php, die die Datei aus einem Verzeichnis liefert:
// übergebenen Dateinamen aus der GET-Variablen holen
$filename = $_GET["f"];

// Pfad zur Datei zusammenbauen
$downloadfile = "../".$filename;
// Content type sollte Datei spezifisch übergeben werden
// nähere Infos siehe: http://de.selfhtml.org/diverses/mimetypen.htm
$content_type = "image/jpeg";

// Dateiname sollte nicht leer sein
if (!empty($filename))
{
    // Dateiname darf keine Slashes enthalten, um zu verhindern, dass
    // Dateien aus anderen Verzeichnissen vom Server geladen werden können
    if (!preg_match('=/=', $filename))
    {
        // wenn Datei vorhanden
        if (file_exists($downloadfile))
        {
            $filesize = filesize($downloadfile);
            // Header-Infos für den Browser zusammenbauen
            header("Content-Description: File Transfer");
            header("Content-Type: ".$content_type);
            header("Content-Disposition: attachment; filename='".$filename."'");
            header("Content-Length: ".$filesize."");
            // Datei liefern
            readfile($downloadfile);
        }
        else
        {
            echo "Datei nicht vorhanden: ".$filename."\n";
        }
    }
    else
    {
        echo "Dateiname enthält slashes, das ist aus Sicherheitsgründen nicht erlaubt.\n";
    }
}
else
{
    echo "Der übergebene Dateiname ist leer.\n";
}

// hier Script abbrechen und zur ursprünglichen Datei zurückkehren
exit();

Sprachspezifische Strings speichern

  • Sprachdateien erstellen und in einem Ordner ‘language’ speichern
  • Deutsch
// Datei für Deutsch (de.inc)
$TEXT['main_title'] = "Überschrift";
$TEXT['start_text_welcome'] = "Willkommen auf der Startseite<br-><br->";
$TEXT['bottom_text'] = "© 2008 by Admin";
  • Englisch
// Datei für Deutsch (en.inc)
$TEXT['main_title'] = "Header";
$TEXT['start_text_welcome'] = "Welcome to the mainpage<br-><br->";
$TEXT['bottom_text'] = "© 2008 by Admin";
  • Sprachdatei einbinden
$Language = "de";

include("language/".$Language.".inc");

echo $TEXT['main_title']."<br>";
echo $TEXT['start_text_welcome']."<br>";
echo $TEXT['bottom_text']."<br>";