Problem mit OpenDir

Hallo,

ich bin gerade leicht am verzweifeln.

Arbeite gerade mit OpenDir, ReadDir und CloseDir, um die Grafiken eines Ordners im Internet an zu zeigen.

Verstehe das nicht, es kommt immer die Fehlermeldung:

Warning: opendir(http://www.test.net/shout/smi) [function.opendir]: failed to open dir: not implemented in …

Ich versteh´s nicht.

$verzeichnis = „http://www.test.net/shout/smi“; // Pfad zum Verzeichnis (Hier ist es ein Unterverzeichnis)
$handle = openDir($verzeichnis); // Verzeichnis öffnen
while ($datei = readDir($handle)) { // Verzeichnis auslesen

Auch ’ statt " funktionieren nicht.

Was ist hier dran falsch ?

Gruß,
Flo

Moin!

Was ist hier dran falsch ?
$verzeichnis = „http://www.test.net/shout/smi“;

$verzeichnis ist kein Verzeichnis, sondern eine URL.
URLs werden erst ab PHP 4.3.0 unterstützt.
http://de3.php.net/manual/de/function.opendir.php

Liebe Grüße,
-Efchen

Hallo Efchen,

vielen Dank für Deine Antwort.

Der Server hat lt. phpinfo bereits 4.4.9, aber es läuft trotzdem nicht.

Gruß,
Flo

Hi,

es bleibt die Problematik dass du dort kein Verzeichnis sondern eine Url angibst. Opendir kann meiner Meinung nach nur lokale Pfade.

Aber: Was genau hast du denn vor?

Warning: opendir(http://www.test.net/shout/smi)
[function.opendir]: failed to open dir: not implemented in

http://php.net/manual/de/function.opendir.php

5.0.0 path unterstützt den ftp:// URL-Wrapper.
4.3.0 path kann auch eine URL sein, die Directory-Listing unterstützt, allerdings wird nur der file:// URL-Wrapper von PHP 4 unterstützt.

Alles was ein directory ausgibt kann genutzt werden ,
es gibt aber kein HTTP directory, wenn du ein directory siehst dann ist es eine ausgabe in HTML vone einem tool (auch integriert im server).

somit kann man nicht auf HTTP directorys zugreifen , ausser bei file:// da dort wiederum ein gültiges filesystem ist und somit auch ein echtes directory und keine HTML seite zu finden ist.

du kannst also nicht DIR extern auf andere http server anwenden.
Du kannst aber dir die ausgabe vom server hohlen (vorrausgesetzt da ist keine index datei) und auswerten.

webserver sind keine filesysteme .

willst du local auf deinem System Dirs haben nimmst du halt den pfad un keine URL .

Hallo,

also ich habe auf meiner HP ein Verzeichnis in dem viele Grafiken (Smileys) abgelegt sind. Da da immer wieder neue zu kommen, beabsichtige ich in PHP zu schreiben, dass mir jedes Smiley im Verzeichnis angezeigt werden kann und am besten auch noch angeklickt werden kann, um dann im Beitrag eingefügt zu werden.
Momentan füge ich jedes Smiley manuell ein, aber das möchte ich nun irgendwie umgehen.

Gruß,
Flo

Moin!

Opendir kann meiner Meinung nach nur
lokale Pfade.

Was ist nur Deine Meinung gegen das von mir bereits verlinkte Handbuch. Aber gerne hier nochmal: http://de.php.net/manual/de/function.opendir.php

Nichts gegen unvollständiges oder falsches Wissen, ich weiß auch nicht alles. Es liest sich nur doof, wenn zwei Beiträge weiter oben jemand sagt, dass eine URL ab Version 4.3.0 erlaubt ist, und das auch noch verlinkt und dann jemand sagt, das ginge nicht. Ab 5.0.0 geht sogar ftp://

Aber nicht ärgern :wink:

Liebe Grüße,
-Efchen

Hi,

Was ist nur Deine Meinung gegen das von mir bereits verlinkte
Handbuch. Aber gerne hier nochmal:
http://de.php.net/manual/de/function.opendir.php

Stimmt das hatte ich wirklich übersehen. Was da aber auch steht:

  1. Es funktioniert nur mit dem file:// Wrapper in php 4.3 und
  2. wenn die URL Directory-Listing anbietet.

Beide Bedingungen sind nicht erfüllt.

Das Direcory-Listing lässt sich per ‚.htaccess‘ einschalten. ‚Options +Indexes‘.

also ich habe auf meiner HP ein Verzeichnis in dem viele
Grafiken (Smileys) abgelegt sind. Da da immer wieder neue zu

und warum nimmst du dann eine URL ???
Du bist doch auf deinem eigenen server ?, also nimmst du den direkten pfad und keine URL

PFAD ungleich URL

Jetzt bin ich schon ein wenig überfragt.

Wenn http://www.xyz.de/123/456 eine Url ist, wie sieht denn der Pfad aus, bzw. ??

Einfach /123/456 ??

Woher weiß openDir denn dann, welche Website gemeint ist ??

Hi,

Jetzt bin ich schon ein wenig überfragt.

Wenn http://www.xyz.de/123/456 eine Url ist, wie sieht denn
der Pfad aus, bzw. ??

Einfach /123/456 ??

Wo genau liegt denn dein Script? http://www.xyz.de/deinscript.php?

Hi,

Wo genau liegt denn dein Script?
http://www.xyz.de/deinscript.php?

Genau, auf http://www.xyz.de/123/deinscritp.php
und die Grafiken sind im weiteren Ordner 456

Hi,

Wo genau liegt denn dein Script?
http://www.xyz.de/deinscript.php?

Genau, auf http://www.xyz.de/123/deinscritp.php
und die Grafiken sind im weiteren Ordner 456

Dann ist das ja kein Problem. > opendir(’./456’);

also mal was grundlegendes .

wenn du eine Webseite baust und auf ein bild verlinkst was im unterordner „unterordner“ ist, also

/123/unterordner/bild1.jpg

das ist immer vom server anfang (root) aus gesehen.

ohne den ersten schrägstrich ist es von dem ort aus gesehen wo sich die datei, die gerade genutz wird, befindet.

beispiel:
website
/123/meinebild.html

relativer pfad

absoluter pfad

du brauchst niemals und nicht die domain angeben . Der Browser weiss woher er seine /123/meinebild.html herbekommen hat , wohl von xyz.de/123/ und ergänzt die nötigen informationen für alle resourcen locations die keine domain als angabe haben.
PHP allerdings weiss erstmal nix von der domain , es läuft auf dem server und nimmt alle pfad angaben entweder absolut zum root oder relativ zum root .

soll heissen :

Beispiel :
dein server root liegt im verzeichniss:

c:\server\meinserver\

und dort dein unterordner ordner
c:\server\meinserver\123\unterordner

liegt dein php auf
c:\server\meinserver\123\bilder.php

dann ist der pfad zum unterordner einfach nur

opendir(„unterordner/“);

in php braucht es keine trennung von windows \ oder unix / pfad zeichen . php nimmt das server eigene / auch bei windows pfad angaben.

Absolute und Relative Pfade

Wenn http://www.xyz.de/123/456 eine Url ist, wie sieht denn
der Pfad aus, bzw. ??
Einfach /123/456 ??

Moin,

und auch hier der Vollständigkeit halber:
Nein. Eine Website teilt sich bei üblichen Webspaces einen Rechner mit mehreren Websites mehrerer Benutzer. Daher liegt Deine Website auch nicht im Root-Verzeichnis (/), sondern in einem eigenen.

Welches das ist, kannst Du entweder auf den FAQ-Seiten Deines Webspace-Anbieters nachlesen, oder per PHP aus der Variable $_SERVER[„DOCUMENT_ROOT“] auslesen.

Die URL http://www.xyz.de/123/456 entspricht also dem Pfad $_SERVER[„DOCUMENT_ROOT“]."/123/456". So muss man das aber nur angeben, wenn man absolute Pfade benutzt. Ob man absolute oder relative Pfade nimmt, mag jeder selber entscheiden, es gibt für alles irgendwelche Vor- oder Nachteile.

Liebe Grüße,
-Efchen

Es geht :smiley:

Super, vielen Dank schon mal an dieser Stelle.

Nur … jetzt taucht das nächste Problem auf.

Die Grafiken werden alle untereinander gezeigt, wie kann ich es denn erreichen, dass z.B. 5 Grafiken pro Zeile angezeigt werden ??

Moin,

wie kann ich
es denn erreichen, dass z.B. 5 Grafiken pro Zeile angezeigt
werden ??

Das geht bei Websites üblicherweise mit CSS, nicht mit PHP. PHP stellt ja nur die HTML-Seite her, die letztendlich an den Browser gesendet wird.

Zuerst brauchst Du eine aussagekräftige (semantische) Auszeichnung Deiner Images (z.B. eine Form von Liste, kann aber was gänzlich anderes sein, je nachdem, waas Du vor hast => HTML), die Du dann in diesem Fall von PHP schreiben lässt, das Aussehen definierst Du per CSS in Deinem externen Stylesheet, das Du ja vermutlich nicht per PHP erzeugen lässt.

Grüße,
-Efchen

z.b. so

<?php // iacta alea est
// diretory pfad zu den bildern $dir = "../../web/images/"; // Öffnen eines bekannten Verzeichnisses und danach seinen Inhalt einlesen $dateien = array(); if (is\_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { // eintrag hinzufügen für .jpg , .bmp , .gif , .png if (preg\_match("/\.jpg|\.gif|\.bmp|\.png/", $file )) $dateien[] = $file; } closedir($dh); } } else { echo "no dir found"; } // ausgabe $counter = 1; // max anzahl pro reihe $maxatrow = 5; // für jeden eintrag in $dateien foreach ($dateien as $datei) { // max pro reihe erreicht , counter zurücksetzen und zeilenumbruch if ($counter \> $maxatrow) { $counter = 1; echo " ";} // bild ausgeben mit pfad echo ''; // zähler erhöhen ++$counter; } ?\>

Zuerst brauchst Du eine aussagekräftige (semantische)
Auszeichnung Deiner Images (z.B. eine Form von Liste, kann
aber was gänzlich anderes sein, je nachdem, waas Du vor hast
=> HTML), die Du dann in diesem Fall von PHP schreiben lässt,
das Aussehen definierst Du per CSS in Deinem externen
Stylesheet, das Du ja vermutlich nicht per PHP erzeugen lässt.

Moin Efchen ,
könnten wir mal zusammen eine korrekte HTML version für sein Beispiel erzeugen , ich denke das interressiert doch einige , wie man sowas ohne

tag löst :smile:

ich biete das /t/problem-mit-opendir/6450876/19

Was wäre also dein konkreter Vorschlag hier ?