Avatar billede kwjkwj Nybegynder
29. august 2002 - 11:47 Der er 24 kommentarer

Kan man få PHP til at redigere .htaccess?

Hej!
Er der nogen, der ved, om det er muligt at få noget PHP til at tilføje noget i .htaccess filen?

Hilsen
Kristian W. Jakobsen
ICQ: 31707979
MSN Messenger: kwj47@hotmail.com
Mail:kristianw@kristianw.dk
Avatar billede dmdisco Nybegynder
29. august 2002 - 11:49 #1
lytter lige med
Avatar billede binderup Nybegynder
29. august 2002 - 12:49 #2
Kom evt med et eksempel på hvad der skal laves...
Avatar billede Noone Nybegynder
29. august 2002 - 13:15 #3
Mon ikke PHP kan åbne den som alle andre filer? Kig på filsystem funktionerne http://www.dk.php.net/manual/en/ref.filesystem.php
Avatar billede kwjkwj Nybegynder
29. august 2002 - 14:16 #4
Jeg har prøvet på at få PHP til at åbne filen på den normale måde, men jeg kan ikke få det til at virke.

Det jeg skal lave er, sådan at hver gang jeg uploader en fil (via en php side), skal php skrive til .htaccess, hvem der skal have adgang til den.
Avatar billede Noone Nybegynder
29. august 2002 - 14:58 #5
"det kunne jeg ikke få til at virke"

Hmmm.. Min brødrister virker ikke.....

Hvad med at beskrive hvilken fejl scriptet giver når du forsøger?
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:02 #6
Der kommer ingen fejl eller noget som helst. Filen bliver bare ikke ændret...

Brødristeren virker ikke og der kommer ingen røg op og strømmen er tilsluttet...
Avatar billede binderup Nybegynder
29. august 2002 - 15:06 #7
er du sikker på at du har sat de rette permissions til at ændre i filen? (chmod)
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:12 #8
Jeg har læst et sted, at den skal stå til 766 ?
Avatar billede binderup Nybegynder
29. august 2002 - 15:14 #9
og du åbner filen på den rigtige måde (hvor du kan skrive til filen) og du skriver rigtigt til filen?

kom evt. med noget kode her så vi har noget at se på
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:17 #10
Jeg har lavet noget, der skriver til htpasswd på præcis samme måde, så det skal virke...

$fp = fopen(".htaccess", "w");
fputs($fp, "Tekst der skal indsættes");
fclose($fp);
Avatar billede binderup Nybegynder
29. august 2002 - 15:20 #11
og du er sikker på at henvisningen til filen er den rigtige?

Prøv at indtaste den absolutte sti til filen /var/www/domæne/folder/ osv
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:23 #12
Jeg har indtastet den absolutte sti og den er helt sikkert rigtig.
Avatar billede binderup Nybegynder
29. august 2002 - 15:26 #13
i stedet for w prøv da at skrive a+
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:37 #14
Det giver det samme...
Avatar billede binderup Nybegynder
29. august 2002 - 15:57 #15
hvis det er på din egen server, så kan du evt. i php.ini få alle fejl skrevet ud, så har du da noget mere at gå ud fra.
Avatar billede kwjkwj Nybegynder
29. august 2002 - 15:58 #16
Det er det ikke, men jeg kan jo prøve at lave det på min egen server...
Avatar billede Noone Nybegynder
29. august 2002 - 16:20 #17
Prøv denne kode i en fil for sig selv:

$data = file(".htaccess");

foreach ($data as $line) {
  echo "{$line}<br>\n";
}

Du skulle gerne se indholdet af din .htaccess fil når det er kørt.

Jeg kunne forstille mig, at man af sikkerhedsmessige årsager forhindre at du kan åbne filer uden for det dir scriptet er i (og vidst nok underdirs) og eller at man forhindre at .htaccess filer kan åbnes af PHP.
Avatar billede kwjkwj Nybegynder
29. august 2002 - 17:04 #18
Den kan sagtens vise indholdet, men den vil ikke skrive til filen - heller ikke, hvis PHP filen ligger i samme dir
Avatar billede Noone Nybegynder
29. august 2002 - 17:58 #19
Hvad er rettighederne på filen? Skal være 606 eller 666 brugeren som webserveren køres som skal ha' rettigheder til at skrive til filen.

I dit FTP program skal der stå noget i stil med

-rw-rw-rw .htaccess
eller
-rw----rw .htaccess
Avatar billede sukos Juniormester
30. august 2002 - 08:51 #20
Hvis opsætningen af PHP er "lidt stram" er det straks sværere/umuligt at få lov til div. "lyster".
.htaccess er jo pr. default beskytttet, og på min windows får jeg ikke mulighed for f.eks. at opdatere en passwordfil med htpasswd, netop på grund af opsætningen i php.ini.

Men du kan jo bare skrive

Require valid-user

i din .htaccess
Avatar billede kwjkwj Nybegynder
30. august 2002 - 09:00 #21
Det hjælper mig overhovedet ikke at skrive
require valid-user
for jeg skal give forskellige brugere rettigheder til at se de forskellige filer. Rettighederne skal først tildeles idet jeg uploader filen via en PHP side...
Avatar billede bojo Nybegynder
20. oktober 2004 - 21:48 #22
Dette dels hjemmelavede og dels "huggede" script klarer det for mig. Det skal ligge i den mappe der skal beskyttes

<? //Make .htaccess og .htpasswd

$htaccess=".htaccess";
$path_parts = pathinfo($SCRIPT_FILENAME);
$htpasswd = $path_parts["dirname"]."/.htpasswd";

function htpasswd($user) {
    global $htpasswd;
    $file=fopen($htpasswd,"a+");
    fputs($file,$user."\n");
    fclose($file);
}

function htaccess() {
    global $htaccess;
    global $htpasswd;
   
$t = <<<HTAEOF
AuthUserFile $htpasswd
AuthGroupFile /dev/null
AuthName "Enter Pass"
AuthType Basic
<Limit GET>
require valid-user
</Limit>
HTAEOF;
    if( $file=fopen($htaccess,"w+") ) {
        fputs($file,$t);
        fclose($file);
    } else {
        echo "hmmm";
    }
}

function genSalt () {
    $random = 0;
    $rand64 = "";
    $salt = "";
    $random=rand();    // Seeded via initialize()
    // Crypt(3) can only handle A-Z a-z ./
    $rand64= "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    $salt=substr($rand64,$random  %  64,1).substr($rand64,($random/64) % 64,1);
    $salt=substr($salt,0,2); // Just in case
    return($salt);
}
   
function cryptPass ($passwd, $salt = "") {
    if (!empty($salt)) {
        $salt = substr ($salt, 0, 2);
    }
    else {
        $salt = genSalt();
    }
    return (crypt($passwd, $salt));

} // end cryptPass

echo "
    <form action='$PHP_SELF' method='post'>
    <table>
    <tr>
    <td>Brugernavn:</td><td><input name='bruger' value='$bruger'></td>
    </tr>
    <tr>
    <td>Password:</td><td><input name='pw' value='$pw'></td>
    </tr>
    <tr>
    <tr>
    <td>Prompt:</td><td><input name='prompt' value='$prompt'></td>
    </tr>
    <tr>
    <tr>
    <td><input type='submit' name='doit' value='Kryptér'></td><td></td>
    </tr>
    </table>
    </form>
    ";

if( isset( $doit ) && $bruger != "" && $pw != "" ) {
    $krypt = cryptPass($pw);
    htaccess();
    htpasswd("$bruger:$krypt");
    unset( $doit );
}   

?>
Avatar billede morteeart Nybegynder
20. oktober 2004 - 21:49 #23
vil lige tilføje at rettihederne (chmod) skal være 777 for at man kan redigere i dem (write access)
Avatar billede bojo Nybegynder
20. oktober 2004 - 21:49 #24
hehe - gaaaammmelt indlæg jo :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester