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();