# htaccess mit php erstellen



## Sevenger (30. Dezember 2003)

Ich möchte gerne eine .htaccess und eine .htpasswd mit php erstellen.
Die Dateien werden soweit auch erstellt.
Wenn ich mich aber einloggen will, dann kommt, wenn ich das korrekte Passwort eingebe folgende Fehlermeldung:

403 Forbidden
You don't have permission to access /bilder/13/ on this server

_skript.php_

```
// htaccess Verzeichnisschutz erstellen
    
    	$DOCUMENT_ROOT = "/www/htdocs/sevengab/bilder/";
	$updir = $picid;
	$username = $name;
	$authname = upload;
	$password = upload;
    
    // htaccess Datei erstellen
    
    	$htaccess = fopen("$DOCUMENT_ROOT"."$updir/.htaccess", "w");
	fputs($htaccess, 
             "AuthType Basic\n".
             "AuthName \"$authname\"\n".
            "AuthUserFile $DOCUMENT_ROOT"."$updir/.htpasswd\n".
             "require valid-user\n"
           );
	fclose($htaccess);
	
    
    // htpasswd Datei erstellen
    
    	$htpasswd = fopen("$DOCUMENT_ROOT"."$updir/.htpasswd", "w");
	$password = crypt($password);
	fputs ($htpasswd, "$username:$password\n");
	fclose ($htpasswd);
    
    // htaccess Verzeichnisschutz Ende
```

Folgende beiden Dateien wurden vom Skript erstellt:

_.htaccess_

```
AuthType Basic
AuthName "upload"
AuthUserFile /www/htdocs/sevengab/bilder/13/.htpasswd
require valid-user
```

_htpasswd_

```
admin:$1$DyDC32ka$86.kq.hlRlgTOoYbSroUf0
```

Hat irgendjemand ne Idee, wo sich hier der Fehlerteufel eingeschlichen hat?

so long
Sevenger


----------



## Neurodeamon (30. Dezember 2003)

Wie sind denn die Rechte der Ordner?
Ich sage nur chmod  ... Gesundheit!


----------



## Sevenger (30. Dezember 2003)

Ne, ist auch korrekt gesetzt.

so long
Sevenger


----------



## Neurodeamon (30. Dezember 2003)

OK, dann solltest Du überprüfen ob in der httpd.conf (sofern Du apache verwendest) folgendes Steht:


```
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride AuthConfig
```

Deine .htaccess und die pwd-datei sollten eigentlich in Ordnung sein.


----------



## hohoho (31. Dezember 2003)

Dein Problem liegt am salt der crypt Funktion.
Denn htaccess verschlüsselt die Passwörter folgendermaßen:

```
$ht_pass = crypt($pass,substr($pass,0,2));
```
(Quelle: Kommentare der Funktion crypt)
Also sollte bei dir die Zeile so aussehen:

```
$password = crypt($password, substr($password, 0, 2));
```


----------



## chibisuke (31. Dezember 2003)

Und wer sich die arbeit einfach machen Will, der benutzt die PEAR klassen für das erzeugen von htaccess und htpasswd...


----------



## low-group (31. März 2004)

> _Original geschrieben von hohoho _
> *Dein Problem liegt am salt der crypt Funktion.
> Denn htaccess verschlüsselt die Passwörter folgendermaßen:
> *
> ...




Das geht leider auch nicht. 

hier mein Code dazu, was nich geht:



```
<?php
	$ordner = test;
	$username = "user";
	$authname = upload;
	$password = "upload";

$htaccess = fopen("$ordner/.htaccess", "w");
	fputs($htaccess, 
             "AuthType Basic\n".
             "AuthName \"$authname\"\n".
            "AuthUserFile \".htpasswd\n".
             "require valid-user\n"
           );
	fclose($htaccess);
	
    
    // htpasswd Datei erstellen
    
    	$htpasswd = fopen("$ordner/.htpasswd", "w");
	$pass = crypt($password, substr($password, 0, 2));


	$pwf .= $username.":".$pass."\n";	

	fputs ($htpasswd, $pwf);
	fclose ($htpasswd);

?>
```

beide Dateien werden erstellt, nur das Pass stimmt dann nicht.

Hat jemand einen Rat?


----------



## Patinkin (25. April 2004)

Versuchs mal hiermit:
<?
echo "user:";
$chars = array_merge(range('a','z'),range('A','Z'),range(0,9));
$newpass = 'pass';
for($i=0;$i<2;$i++) { $salt .= $chars[mt_rand(0,count($chars)-1)]; }
echo crypt($newpass,$salt);
?>


----------



## PhoenixDH (24. August 2005)

Hab das Script gerade eben entdeckt, da ich auch meine htaccess Verwaltung  über PHP machen will !

Leider klappt das Script immer noch nicht, aber gibt es mittlerweile andere Lösungen oder diese Verbessert wo das ganze auch klappt ?


----------



## japetos (12. Oktober 2009)

```
function make_htaccess($user, $authName, $passwdFile="")
{
    
    if(empty($passwdFile))
        $passwdFile=dirname(__FILE__);
    
    $access .=    'AuthType Basic' . "\n";
    $access .=    'AuthName "' . $authName . '"' . "\n";
    $access .=    'AuthUserFile ' . $passwdFile . '/.htpasswd' . "\n";
    $access .=    'require user ' . $user . "\n";
    
    $handle = fopen(".htaccess","w");
    fputs($handle,$access);
    fclose($handle);

}


function make_htpasswd($user, $passwd, $passwdFile="")
{
    
    if(empty($passwdFile))
        $passwdFile=dirname(__FILE__);
        
    $passwd = crypt($passwd);
    $htpasswd = $user . ':' . $passwd . "\n";
    
    $handle = fopen($passwdFile . '/.htpasswd',"a");
    fputs($handle,$htpasswd);
    fclose($handle);
    
}

// Den Benutzernamen für den Login
$user = 'Damir';

// Das Passwort für den Login
$passwd = 'meinPasswort';

// Der Text, der angezeigt wird wenn das Login-Fenster geöffnet wird.
$authName = 'Meine geschütztes Verzeichnis';

//Den kompletten Pfad zu der Datei .htpasswd, ohne abschließenden Slash (/)
$passwdFile = '';


make_htaccess($user, $authName, $passwdFile);
make_htpasswd($user, $passwd, $passwdFile);

// unlink("crypt.php");
```

Quelle: self-php


----------



## ZodiacXP (12. Oktober 2009)

Kleiner Tip: Der Passwortdatei kannst du einen beliebigen Namen geben. Der Vorteil wäre das ein "Hacker", der den Ordner nicht sieht aber Dateien ziehen kann, erst den Namen erraten muss.


----------

