serious-cool

IT Solutions
  • Start
  • Computer
  • Warhammer
Hauptmenü
  • Kontakt
  • Archiv
  • Impressum
  • Sitemap
Computer
  • Datensicherheit
  • Multimedia Server
  • Webdesign
  • PHP-Scripts
Anmeldung



  • Passwort vergessen?
  • Benutzernamen vergessen?

XSendFile in XAMPP aktivieren

PostDateIconMittwoch, den 04. Januar 2012 um 15:30 Uhr

Manchmal ist es notwendig eine Datei direkt aus der Programmlogik einer PHP Methode heraus zu versenden. Beispielsweise lässt sich so ein Rechtesystem auf Benutzer der Webseite abwickeln.

Hierbei steht man häufig vor dem Problem, dass bereits ein HEADER an den Client gesendet wurde und somit die Dateiausgabe über die normale header() Funktion scheitert. Abhilfe schafft das Apache Modul XSendFile. 

Auf der Herstellerseite findet sich eine Hilfe zur Installation auf Linux-Systemen, der lokale XAMPP-Server auf Windowsmaschienen geht dabei leider leer aus.

Wie dieses Modul manuell installiert wird, erkläre ich in diesem Artikel.

Bezugsquelle

DieWin32 Binaries findet man auf https://tn123.org/mod_xsendfile/ unter Downloads. Entpackt man das Zip Archiv findet man neben dem Quellcode auch den Ordner 22. 22 steht dabei für die Apache Version 2.2 die sich in den heutigen XAMPP-Paketen wiederfindet. Wir benötigen die darin enthaltene Datei: mod_xsendfile.so

Installation

Wir kopieren die Datei mod_xsendfile.so in unser XAMPP-Verzeichnis unter apache/modules/

Damit das Modul geladen werden kann müssen wir ein paar Einstellungen im Apache Webserver vornehmen:

Wir bearbeiten die Datei apache/conf/httpd.conf:
Im Abschnitt, in dem die LoadModule Optionen ausgeführt werden, ergänzen wir folgende Zeile:

LoadModule xsendfile_module modules/mod_xsendfile.so

Wer XSendFile global für alle Projekte auf seinem XAMPP aktivieren möchte, kann direkt darunter folgende Zeilen schreiben:

# enable xsendfile
XSendFile On

Alle anderen können diese Option in den jeweilige Vhost Konfiguration verschieben.

XSendFile benötig allerdings noch eine weitere Option um sicher arbeiten zu können. Wir erstellen entweder eine .htaccess Datei im Verzeichnis unseres Projektes, oder erweitern die Vhost-Konfiguration um diese Einstellung:

XSendFilePath "/xampp/htdocs/projektverzeichnis"

XSendFilePath legt fest, welches das höchste Verzeichnis ist aus dem eine Datei gesendet werden darf! Dies stellt sicher, dass z.B. keine Datenbank-/Konfigurations- oder gar Systemdateien an den Nutzer gesendet werden.

Übrigens erzeugt eine Verletzung dieser Einstellung einen Eintrag im error-log. Dies kann sich bei der Fehlersuche als nützlich erweisen.

Verwendung

Wie bereits erwähnt erlaubt XSendFile das direkte und bequeme versenden von Dateien aus dem Programmfluss heraus, ein Beispiel findet Ihr auf der Herstellerseite.

if ($user->isLoggedIn())
{
    header("X-Sendfile: $path_to_somefile");
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"$somefile\"");
  exit;
}

Das Yii Framework sellt sogar eigene Methoden zur Verwendung von XSendFile bereit: XSendFile mit Yii

Yii::app()->request->xSendFile(
  '/home/user/Pictures/picture1.jpg',
  array(
   '
saveName'=>'RequestedFile.jpg',
   'mimeType'=>'image/jpeg',
   '
terminate'=>false,
   )
);

Aktualisiert (Mittwoch, den 04. Januar 2012 um 16:11 Uhr)

 
meist gelesene Beiträge
  • Media Server -Teil 2 - TV Server
  • Diffie-Hellman Schlüsselaustausch
  • Media Server -Teil 1 - Hardware
  • Typo3 Meta Generator entfernen
  • Basegestaltung
  • Häufigkeitsanalyse
  • Chaos General

Valid XHTML 1.0 Transitional