Der Martin: Erstellung von Verzeichnis mit .htaccess und htpassword mit php

Beitrag lesen

Hallo,

Ich möchte gerne einen FTP innerhalb einer Homepage integrieren.

deine Darstellung ist widersprüchlich, denn weiter unten wird deutlich, dass du eben *nicht* FTP willst, sondern HTTP. Wie auch immer, der Themenbereich HTML/XHTML ist in jedem Fall unpassend gewählt.

Benötigte Features:

  • Verzeichnis (Ordner) anlegen
  • Zugriffsschutz anlegen (.htaccess und .htpasswd)
  • Files drin ablegen

Bei FTP auf jeden Fall im Funktionsumfang enthalten, wobei "Zugriffsschutz anlegen" sich auf das Anlegen/Hochladen der beiden erforderlichen Dateien herunterbrechen lässt.

  • Wenn man auf das Verzeichnis geht, sollen die Inhalte angezeigt werden.

Was meinst du mit "auf das Verzeichnis gehen"?

Ziel: Einen Download für einen Kunden bereit stellen, für den man kein FTP-Programm benötigt!

Ja, also nicht FTP, sagte ich ja schon.

Folgende Probleme sind aufgetreten:

  1. das Verzeichnis kann nach Erstellung nicht mehr gelöscht werden

Durch wen (welchen Benutzer)? Und ist es überhaupt leer?

  1. ich kann keine Dateien darin per FTP einfügen

Meinst du an dieser Stelle wirklich FTP? - Wird wohl auch ein Problem der Benutzerrechte sein.

Was ich jetzt nicht weiss:
warum hat meine .htaccess Datei nach dem Erstellen den wert adfr(0644) statt adfrw(0644) und den Besitzer/Gruppe 33 33 statt 1128 ...

UID 33 ist auf vielen Systemen www-data, also der typische User, unter dem der Webserver läuft. Logisch, dass die Datei diesem Benutzer gehört, wenn der sie erzeugt hat. Und 0644 heißt, jeder darf sie lesen, aber nur der Besitzer auch schreiben. Ist 1128 etwa der deinem Account zugeordnete FTP-User?

$Unterverzeichnis     =   'files';

$rootVerzeichnis      =   str_replace("isoonline/",'',$_SERVER["DOCUMENT_ROOT"]);
$ZielVerzeichnis      =   p_leer($_REQEUST[$ZielVerzeichnis],$rootVerzeichnis.$Unterverzeichnis);

  
Wieso verwendest du $\_REQUEST? Möchtest du dich nicht auf $\_GET oder $\_POST festlegen?  
  

> ~~~php

if($_REQUEST['do'] == '1' ){  

>   //Verzeichnis erstellen  
>   echo "<br>Dieses Verzeichnis wurde erstellt: ";  
>   echo $neueVerzeichnisUrl   =   "$ZielVerzeichnis/$_REQUEST[neuesVerzeichnis]";  
>   echo "<br>";  
>   
>   mkdir ($neueVerzeichnisUrl ,0755 );

Na du bist ja lustig. Meldest den Vollzug schon, bevor du überhaupt versuchst, das Verzeichnis anzulegen. Und ob es gelungen ist, überprüfst du nicht einmal.

$testText=

'Ein kleiner Versuch';

$testDateiName = "test.htm";
    $testDatei = fopen("$neueVerzeichnisUrl/$testDateiName","w+");
    fwrite($testDatei, $testText);
    fclose($testDatei);

  
Von "Versuch" wollen wir hier auch nicht reden, wenn du nicht einmal den Erfolg deiner Aktionen abfragst. Das absolute Minimum sollte sein, das Ergebnis von fopen() zu prüfen (sollte non-zero sein).  
  

> ~~~php

// Den Benutzernamen für den Login  

> $user   = $_REQUEST[ftpUser];  
>   
> // Das Passwort für den Login  
> $passwd = $_REQUEST[ftpPassword];

FEHLER: Du meinst sicher die Stringkonstanten 'ftpUser' und 'ftpPassword' anstatt der benannten Konstanten ftpUser und ftpPassword, was PHP mit der Ausgabe einer Notice-Meldung auch kritisiert. Die Bezeichnungen sind auch irreführend, weil es sich ja gerade *nicht* um FTP handelt.

//Den kompletten Pfad zu der Datei .htpasswd, ohne abschließenden Slash (/)

$passwdFile = "$neueVerzeichnisUrl";

  
Wozu einen einzelnen Wert, der sowieso ein String ist, nochmal in einen String einbetten?  
  

> ~~~php

//Vorhandene Verzeichnisse ausgeben:  

> echo "<p>Diese Verzeichnisse bestehen bereits in diesem Verzeichnis:<br>";  
> $offen = opendir("$ZielVerzeichnis");

Nochmal der Unfug mit dem String im String. Außerdem: Warum beginnst du an der Stelle ein p-Element, obwohl IMO eine Überschrift viel passender wäre? Abgesehen davon, dass du das p-Element nirgends wieder abschließt.

while ($file = readdir ($offen))

{
        echo "<li><a href="$_SERVER[PHP_SELF]?ZielVerzeichnis=$ZielVerzeichnis/$file">".$file."</a>
                  <br>
                  <a href="http://www.promicron.org/files/$file">".$file.'</a>
              </li>';
      }
      closedir($offen);
?>

  
Was hat es mit den beiden Links auf sich, die du da pro Datei/Verzeichnis ausgibst?  
  
Und was war jetzt eigentlich deine Frage?  
  
So long,  
 Martin  

-- 
Es gibt Tage, da gelingt einem einfach alles.  
Aber das ist kein Grund zur Sorge; das geht vorbei.  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(