Existierendes Verzeichnis erkennen und entsprechend handeln

  • Hallo,

    ich habe da wohl eine Gedanken-Blockade oder so was.

    Auf einer Upload-Seite kann ich ein zu erstellendes Verzeichnis angeben. Wenn dieses Verzeichnis existiert soll gefragt werden, was mit den hochzuladenden Dateien passieren soll. Lokal funktioniert die Erkennung ganz gut, es öffnet sich eine LightBox und fragt, was eben passieren soll. Aber wie gebe ich das Resultat jetzt weiter. Ich bin mir sicher, dass es etwas ganz simples ist, aber irgendwie komme ich nicht drauf.

    Außerdem habe ich jetzt feststellen müssen, dass das Scirpt

    auf meinem Server gar nicht funktioniert. Angeblich existiert ein existierendes Verzeichnis nicht.

    Zum Testen hier mal klicken. Das Verzeichnis test existiert.

  • Offenbar resultiert es immer in einem Fehler, wenn Du ein Verzeichnis als URL in einem Ajax-Aufruf angibst. Schreibe stattdessen ein Miniscript, das mit file_exists() prüft, ob das Verzeichnis existiert und gib eine entspr. Kennung z. B. "true"/"false" zurück, die kannst Du dann in done() auswerten kannst.

  • Offenbar resultiert es immer in einem Fehler, wenn Du ein Verzeichnis als URL in einem Ajax-Aufruf angibst. Schreibe stattdessen ein Miniscript, das mit file_exists() prüft, ob das Verzeichnis existiert und gib eine entspr. Kennung z. B. "true"/"false" zurück,

    in PHP? das ist kein Problem,

    die kannst Du dann in done() auswerten kannst.

    aber hier kann ich Dir nicht folgen. Zu done() habe ich nicht viel gefunden und das Wenige bezieht sich immer auf ein und dasselbe Script, welches ich irgendwie nicht verstehe.

  • Das "resultiert wahrscheinlich immer in einem Fehler" muss ich korrigieren: Ich habe es jetzt nicht genau untersucht, aber ich erwarte dass sich der Aufruf eines Verzeichnisses mit Ajax genauso verhält wie der Aufruf im Browser: Ist das Verzeichnis für Directory-Browsing freigegeben, wird das HTML des Directory-Listings zurückgegeben, ist es gesperrt, führt es zu einem Fehler.


    Was das done() betrifft: Diese Funktion wird aufgerufen, wenn der Ajax-Aufruf erfolgreich war und hat die Ausgabe des Skriptes als Parameter. Müsste dann so aussehen:

    Ungetestet.

  • Ich habe das Directory-Browsing freigegeben (glaube ich jedenfalls), funktioniert aber immer noch nicht.

    Alleine des Lernens wegen gefällt mir aber die zweite Variante eh besser.

    Ich glaube, ich habe gerade googles CO2-Bilanz gekippt, verstehe es aber immer noch nicht so richtig und bekomme es auch nicht zum Laufen.

    Zuerst mal, muss es nicht in Zeile 7 data: vdir heißen?

    Wie gebe ich nun aber das Ergebnis der checkdir.php zurück? Ich habe es auch schon mit success statt .done versucht, doch während das Zweite immer sagt, das Verzeichnis existiert nicht behauptet das Erste IMMER, das Verzeichnis existiere.

    Das Problem ist aber auch, dass es beinahe keine passenden PHP-Dateien zu den Scipten bei googel zu finden gibt.

  • Zitat

    Zuerst mal, muss es nicht in Zeile 7 data: vdir heißen?

    Da hast Du vollkommen recht, so wie es da steht, ist es Blödsinn. So sollte es richtig sein:

    Code
    $.ajax({
            url: "checkdir.php",
            data: {dir: vdir}
        }).done(function(output) {

    success und done sollten eigentlich gleichwertig sein. Ich werde mal ein vollständige Testseite machen ...

  • So, dieses funktioniert bei mir:

    checkdir.php:

    PHP
    <?php
    if (isset($_POST['dir'])) {
        if (file_exists($_POST['dir'])) {
            echo "true";
        } else {
            echo "false";
        }
    }
    ?>
  • Naja, wenigstens die PHP-Datei hatte ich richtig :).

    Ja, so funktioniert es jetzt, danke :) :). Das war das, was ich eigentlich für das leichte Problem gehalten habe, jetzt kommt das Schwierige - die Ausgabe des Fensters abzufangen und auszuwerten. Aber wie es mir gerade scheint ist das eigentlich ganz simpel. Denke, das bekomme ich hin.

    Wirklich mal #Sempervivum, ohne Dich würde ich ganz schön alt aussehen. Danke.

  • Ja, das war dann wirklich ganz einfach.

    Jetzt habe ich seit gestern eine neue Idee und vermutlich das das jquery von oben auch hier die Lösung, Ich weiß nur noch nicht wie.

    Wenn ein Verzeichnis bereits vorhanden ist, öffnet sich eine Lightbox mit der Abfrage, was mit den vorhandenen Bildern passieren soll. Jetzt will ich dem Nutzer auch auch die Möglichkeit geben, gleich in diesem Fenster die Bilder zu sehen. Ich muss also in der Lightbox das Verzeichnis auslesen, der Verzeichnisname steckt aber lediglich in einer jquery-Variable. Kann ich vdir (oben) von der checkdir.php wieder zurückgeben und auffangen?


    [edit]

    Hat sich erledigt, habe einfach ein Coockie gebacken :)

  • Mit dem Cookie hat es dann doch nicht geklappt, der wird ja erst beim nächsten Aufruf der Seite aktiv.

    Ich habe jetzt den ganzen Tag an dem Problem gesessen und bin kein Stück weiter gekommen, obwohl es doch eigentlich ganz einfach sein müsste.

    Der Download-Pfad wird per Ajax als vdir an die checkdir.php übergeben. Ich muss doch jetzt den Inhalt von vdir irgendwie an die ursprüngliche Seite zurückgeben können.

    Das Einzige, was ich geschafft habe - das war schon so einfach dass es mich fast verhöhnt - dass ich den Inhalt als String in einem DIV angezeigt bekomme.

  • OK, wenn ich dich richtig verstehe, willst Du die Bilder in einer Lightbox anzeigen. Dann sehe ich zwei Möglichkeiten:

    • Du generierst das HTML für die Anzeige der Bilder auf dem dem Server mit PHP oder
    • Du gibst nur eine Liste der Dateinamen der Bilder aus und erzeugst das HTML mit Javascript

    Was möchtest Du denn für eine Lightbox verwenden, vorgefertigt wie Fancybox oder selbstgemacht?

  • Die Lightbox ist Eigenbau. Die Ausgabe der Bilder ist auch kein Problem, das läuft.

    Ich habe alles hier mal hochgeladen. Gib die ArtNr bla ein und gehe aus dem Input-Feld. Die Lightbox informiert darüber, dass der Ordner existiert. Nun will ich aber die Bilder aus diesem Ordner auch angezeigt bekommen. Das ".uploads/bla/" ist praktisch der Inhalt von vdir, den kann ich aber nur anzeigen, nicht an PHP weiter geben, damit so das Verzeichnis ausgelesen werden kann.

  • In checkdir.php die img-Tags generieren:

    In der Lightbox einen Container für die Bilder hinzu fügen:

    Und in der Funktion check() die img-Tags dort eintragen:

  • Klasse, funktioniert. Mir ist gerade aufgefallen, dass ich die checkdir,php inner irgendwie als JavaScript gesehen habe. Keine Ahnung warum. daher habe ich mich gar nicht allzusehr damit beschäftigt.

    Das mit glob() kannte ich noch gar nicht, ist aber interessant. Aber was macht PHP_EOL? Hab die Erklärung auf php.com nicht wirklich verstanden.

  • Das PHP_EOL fügt einen Zeilenumbruch ein, damit die Tags untereinander stehen, nur damit das HTML besser lesbar ist. Der Zeilenumbruch ist ein wenig vom Betriebssystem abhängig und diese Konstante fügt immer die richtige Version ein.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!