faq:php [Sven-Of-Nine]

PHP

Apache-Kennwörter mit PHP erzeugen

Leider ist die Erzeugung der Kennwörter für die htaccess-Dateien etwas ungeschickt gelöst. Es gibt grundsätzlich vier Möglichkeiten :

  1. Kennwörter im Klartext (völliger Wahnsinn aber unter Windows am einfachsten)
  2. Crypt (Aus meiner Erfahrung plattformabhängig !?)
  3. MD5 (Leider ist der MD5 von Apache nicht standardkonform und damit mit keinem andern Programm so einfach zu erzeugen)
  4. SHA1-Base64 (Die Methode der Wahl)

SHA1-Base64 ist einfach ein SHA1 der Base64-kodiert wird. Allerdings wird nicht der Hexstring kodiert den jede normale Anwendung ausspuckt sondern deren ASCII-Version. Also muß man wie folgt vorgehen :

  1. SHA1-Key erzeugen ⇒ Hexstring
  2. Jedes Hex-Byte in seinen ASCII-Wert wandeln
  3. Den neuen String Base64-Kodieren.

Unter PHP (und ich nehme an die meisten brauchen es dort) sieht das folgendermaßen aus :

$sha1base64=base64_encode(pack("H*",sha1($kennwort)));

Mit diesem Wert kann dann einfach die Kennwortdatei erzeugt werden. Um Apache zu zeigen, welch Verschlüsselung man benutzt muß nur ein {SHA} vor das Kennwort gesetzt werden.

username:{SHA}verschlüsseltes Kennwort
testuser:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

Wie sieht ein Downloadheader in PHP aus

Eigenlich ist es ganz einfach. Nur zwei Dinge :

  1. Es darf kein Zeichen vor dem Header übertragen werden.
  2. Die Groß/Kleinschreibung muß genau stimmen.
header("Content-Type: application/octet-stream",TRUE);
header("Content-Transfer-Encoding: binary");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-Disposition: attachment; filename=".$name,TRUE);
header("Content-Length: ".filesize($file),TRUE);
 
//Und die Datei gleich hinterher
$fp=fopen($file,"rb");
if ($fp!=FALSE)
  {
  while (!feof($fp))
    {
    set_time_limit(30);
    $buffer = fread($fp, 8192);
    print $buffer;
    }
  }

faq/php.txt · Zuletzt geändert: 2010/05/27 22:43 von Sven Of Nine