• 18.07.2025, 09:42
  • Register
  • Login
  • You are not logged in.

 

Jogibär

God

Dateilinkliste generieren

Saturday, May 21st 2011, 1:11pm

Hi,
ich habe im Netz bißchen php Code gefunden mit dem man eine Dateilinksliste von *.gif Dateien in einem Ordner erstellen können soll. Entsprechend angepasst habe ich das versucht aber er meckert immer wegen den Pfades rum, was mache ich falsch?

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /kunden/xyz/webseiten/dateiliste.php on line 8

Die auszulesenden Dateien befinden sich in "webseiten/kolobok" Verzeichnis wobei die *.php Datei in "webseiten/" liegt.


PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function dateiendung($datei){
  $array explode(".",$datei);
  return $array[count($array)-1];
}


$path dir "kolobok/";
while($datei $path->read()){
  if(dateiendung($datei) == "gif"){
      echo "<a href='$datei'>$datei</a>";
  }
}

?>

elbarto`

God

Saturday, May 21st 2011, 1:34pm

dir("kolobok/");

Jogibär

God

Saturday, May 21st 2011, 2:18pm

Danke....mhh nur irgendwie habe ich mir das anders vorgestellt. Ich wollte eigentlich die komplette URL dort stehe haben, und am besten als Liste. Muss ich eine neue Funktion aufrufen um die komplette url als Link anzuzeigen?
Und wie bringe ich dem script bei nach jedem Namen einen Absatz zu erstellen?

palme|kex`

God

Saturday, May 21st 2011, 3:19pm

wenn du nach jedem link ne neue Zeile willst, machste einfach hinter jedes </a> noch nen <br />

und die Komplette URL musst du dir zusammen bauen...
wo soll das script liegen? und in welcher relation dazu ist der ordner wo die dateien ausgelesen werden sollen....

nehmen wir an das script liegt im httpdocs
also httpdocs/script.php
und der Ordner kolobok ist auch im httpdocs
also httpdocs/kolobok
dann hat nen bild zb die adresse httpdocs/kolobok/bild01.gif

Wenn script nun an dem ort ausgeführt wird, wo es auch liegt und nicht an einer anderen stelle included wird, schreibste dann also einfach

PHP Source code

1
echo "<a href='".$folder.$datei."'>".$datei."</a><br />";

This post has been edited 1 times, last edit by "palme|kex`" (May 21st 2011, 3:20pm)

Y0Gi

God

Sunday, May 22nd 2011, 1:49pm

Wenn es dir nur darum geht, Dateien in einem Verzeichnis über eine dynamisch generierte HTML-Seite zu verlinken, schau dir dieses Script zum Vergleich an. Anpassen müsstest du lediglich den Dateinamenfilter, so dass nur die gewünschte Endung berücksichtigt wird.

This post has been edited 1 times, last edit by "Y0Gi" (Jan 22nd 2013, 3:39am)

Jogibär

God

Monday, May 23rd 2011, 12:26pm

@Palme: Danke dir, geil ich habs! :D http://www.jogibaeruniverse.de/dateiliste.php Wenn ich jetzt noch schaffe die Adressen automatisch als Bild anzeigen zu lassen mit dynamischen Abmessungen, dass ist es perfekt. :D

@Coderschmidt: Klasse danke, dein Script interessiert mich jetzt aber auch, aber ich schätze ich scheitere wieder aufgrund meines geringen Coding Skills. Ich muss doch nur diese Zeile hier ändern und dann das Script in das Verzeichnis kopieren in dem sich die zu indizierenden Dateien befinden oder?

PHP Source code

1
if (($entry != '.') and (substr($entry, -4) != '.gif')) {

This post has been edited 4 times, last edit by "Jogibär" (May 23rd 2011, 12:48pm)

palme|kex`

God

Monday, May 23rd 2011, 1:23pm

Das ist doch die einfachste Sache der Welt.
Einfach den Link durch nen img tag ersetzen, und den wert des href schreibst du dort ins src attribut. Wenn du keine Angaben zur größe der Bilder machst, werden die in original Größe dargestellt.

This post has been edited 1 times, last edit by "palme|kex`" (May 23rd 2011, 1:25pm)

Jogibär

God

Monday, May 23rd 2011, 2:47pm

Mhh genau das habe ich schon versuchst, also bei mir sah das dann so aus was aber nicht geht:

PHP Source code

1
echo "<img src="<a href='kolobok/".$folder.$datei."'>http://www.jogibaeruniverse.de/webseiten/kolobok/".$datei.""</a><br />>";

palme|kex`

God

Monday, May 23rd 2011, 2:55pm

Du verwurschtelst da nen bissel was mit ein ander ^^

PHP Source code

1
echo "<a href='".$folder.$datei."'><img src='".$folder.$datei."'></a><br />";

wenn in der $folder vairable eben der kolobok drinne steht und das script aus dem selben ordner ausgeführt wird, in dem sich auch der kolokob ordner befindet

This post has been edited 2 times, last edit by "palme|kex`" (May 23rd 2011, 2:58pm)

Y0Gi

God

Monday, May 23rd 2011, 11:48pm

@Coderschmidt: Klasse danke, dein Script interessiert mich jetzt aber auch, aber ich schätze ich scheitere wieder aufgrund meines geringen Coding Skills.

Lass es einfach in Ruhe wirken und probiere Änderungen aus. Zugegeben, es vermischt vorbildlich Logik und Darstellung. Um es klarer zu machen, kannst du z. B. die Styles und einiges an HTML weglassen. Einen vernünftigen Editor mit Syntax-Highlighting benutzt du ja hoffentlich bereits.

Ich werde sehen, dass ich hier eben ein paar Verbesserungen vornehme (nach über neun Jahren wird das wohl erlaubt sein ;))).

Ich muss doch nur diese Zeile hier ändern und dann das Script in das Verzeichnis kopieren in dem sich die zu indizierenden Dateien befinden oder?

PHP Source code

1
if (($entry != '.') and (substr($entry, -4) != '.gif')) {

Koooorekt. Fast! Die Bedingung stellt fest, ob ein Verzeichniseintrag angezeigt werden soll. Daher muss es

PHP Source code

1
substr($entry, -4) == '.gif'

heißen, also negiert sein. Der ursprüngliche Test dient dazu, Dateien mit der Endung ".php" *nicht* anzuzeigen. Wenn du, wie du vorhast, statt dieser Black- eine Whitelist nutzt (d. h. nur "*.gif"), dann wird das PHP-Script selbst automatisch herausgefiltert.

Ansonsten gilt, was palme sagte: Das Markup für die Hyperlinks auf die (dann) GIFs einfach durch "img"-Tags mit dem ehemaligen Linkziel als Wert für das "src"-Attribut ersetzen. Der Rest ist CSS um Ausrichtung, Abstände und Rahmen anzupassen. Mit Listen und CSS-Floating kann man übrigens toll Bildergalerien erstellen, die die Anzahl der Bilder pro Zeile dynamisch der verfügbaren Seitenbreite im Browser anpassen Beispiel.

This post has been edited 2 times, last edit by "Y0Gi" (May 24th 2011, 10:18pm)

Jogibär

God

Tuesday, May 24th 2011, 11:06am

Danke, gut dann werde ich mich mal am we damit auseinandersetzen. :)

Nun versuche ich aber noch das erste Script zum Laufen zu bringen, aber ich denke mir fehlt die Funktion "$folder", deswegen auch meine Verwurschtelung im Post #8, wodurch die Zieladresse korrekt wurde, aber nicht die dargestellte und gerade die muss ja richtig ausgelesen werden bei direkter Darstellung der *.gif Bilder auf einer Seite. Auslesen tut das Script ja die Bilder richtig und gibt die Dateinamen aus, da ich ja das Verzeichnis "kolobok/" angegeben habe, aber ich finde in den zich Online Tutrials keine Hinweise auf eine "folder" Funktion. Ist das bereits in php "implementiert" wenn ich das so schreiben darf?

Ich habe ".$folder" jetzt einfach rausgelöscht und "kolobok/" davor geschrieben, was aber doch eigentlich die folder Funktion übernehmen sollte oder habe ich das missverstanden?

So funktioniert es nun: :)

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function dateiendung($datei){
  $array explode(".",$datei);
  return $array[count($array)-1];
}


$path dir ("kolobok/");
while($datei $path->read()){
  if(dateiendung($datei) == "gif"){
      echo "<a href='kolobok/".$datei."'><img src='kolobok/".$datei."'></a><br />";
  }
}

?>

palme|kex`

God

Tuesday, May 24th 2011, 9:22pm

Das ist keine Funktion, sondern ne Variable ^^ Ich hab mich da etwas vertan. Ich habe bei meinem Script ne $folder variable stehen, da ich das Script an verschiedenen stellen included habe.

Das hab ich einfach mit deinem verwechselt ^^
So wie dus gemacht hast, ist schon richtig, $folder gibts bei dir nit

Y0Gi

God

Tuesday, May 24th 2011, 11:34pm

Jogibär: Welche PHP-Version hast du zur Verfügung?

Y0Gi

God

Wednesday, May 25th 2011, 1:28am

So, es gibt nun eine verbesserte Version (die "modern"-Variante), die ich anstelle der alten empfehle. Mehr Code, aber recht funktional und damit sauber nachvollziehbar gestrickt. Dazu HTML5 und CSS3 (schlanker, aber hübscher ;)). Viel Spaß damit.

This post has been edited 1 times, last edit by "Y0Gi" (Jan 22nd 2013, 3:39am)

Jogibär

God

Wednesday, May 25th 2011, 9:23am

Stark danke, deine alte Version lief bei mir auch, die neue ist aber wesentlich übersichtlicher und komfortabler anzupassen. :) Mir steht PHP 5.2.13 zur Verfügung, mein webspace wird von df.eu betrieben, also immer recht aktuell.

Ich war gerade am Überlegen ob ich die Bilder sortiert in Unterverzeichnisse packe und wie ich das anstellen kann, da habe ich auch schon die entsprechende Zeile gefunden die genau das berücksichtigt wenn sich mein Englisch nicht täuscht. :D

PHP Source code

1
2
function get_grouped_entries($path) {
    list($dirs$files) = collect_directories_and_files($path)


Fein.....dann werd ich für jedes Verzeichnis eine Tabelle per css erstellen.....das wird ein Spaß. :D (das mein ich ernst)

This post has been edited 1 times, last edit by "Jogibär" (May 25th 2011, 9:24am)

Y0Gi

God

Thursday, May 26th 2011, 8:38pm

Funktioniert das neue Script wirklich bei dir? Ich bin der Meinung, mindestens zwei Dinge benutzt zu haben, die erst in PHP 5.3+ verfügbar sind. Aber das kann man wohl zur Not auch abwärtskompatibel gestalten.

Das Script ist so angelegt, dass man es in jedes Verzeichnis kopiert, das man so darstellen möchte. Dann kann man sich durch die entsprechenden Verzeichnisse hangeln.

Wenn du mit einem Aufruf gleich alle Bilder aller Unterverzeichnisse sammeln willst, kannst du Rekursion nutzen und bei jedem Verzeichnis die Funktion erneut aufrufen, die den anzuzeigenden Verzeichnisinhalt zusammenstellt. Dabei gibt man oft eine Datenstruktur (hier: Array) mit, die man entsprechend ergänzen kann. Ist aber nicht ganz trivial, sowas in den Kopf zu kriegen, damit es auch wie gewollt funktioniert.

Jogibär

God

Friday, May 27th 2011, 12:13am

Ich hatte es noch nicht ausprobiert bis jetzt, nur angeguckt und das alte benutzt, aber du hast Recht, es funktioniert bei mir nicht. Er meckert bei mir wegen Zeile 57:


PHP Source code

1
return array_partition($entries, function($entry) {

Jogibär

God

Saturday, May 28th 2011, 1:18pm

Beschäftige mich derzeit mit deinem alten Script, aber ich bekomme es einfach nicht hin, dass mehrere dynamische Tabellen erstellt werden und sich diese an die Bildschirmgröße anpassen, natürlich in der Länge. Also ich möchte 3 Tabellen nebeneinander wobei die Verteilung der Bilder gleichmäßig über alle 3 wie eine Gallerie stattfindet, geht sowas überhaupt? Sitze da jetzt seit 2 Stunden dran aber finde keine Lösung. Hier mein bisheriger Stand: http://www.jogibaeruniverse.de/kolobok/dirindex.php

Y0Gi

God

Saturday, May 28th 2011, 3:24pm

Tjo, anonyme Funktionen gehen erst ab PHP 5.3.0. Allerdings gibt es für PHP 5.2.x und älter meines Wissens keine Updates mehr (was möglicher-, aber nicht notwendigerweise heißt, dass es auch in Linux-Distributionen keine Patches mehr gibt). Selbst im aktuell stabilen Debian-Release ist bereits 5.3.3 enthalten. Von "recht aktuell" kann da eigentlich eher nicht die Rede sein. Tipp: Einfach mal den Support anrufen, ob die das Updaten oder dich auf 'nen aktuelleren Server schieben können.

Man könnte nun die anonymen in eigenständige Funktionen auslagern und nur deren Namen als Callback-Argumente übergeben. Wäre 'ne Übung für dich, wenn du willst ;)

Was für ein Layout genau möchtest du? Sowas wie in der von mir verlinkten Galerie, d.h. alles nebeneinander soweit in der Breite Platz ist, dann Umbruch? Brauchst du wirklich Tabellen, und wieso drei davon? Sind die Bilder irgendwie gruppiert?

Jogibär

God

Saturday, May 28th 2011, 4:24pm

[...]
Sowas wie in der von mir verlinkten Galerie, d.h. alles nebeneinander soweit in der Breite Platz ist, dann Umbruch? Brauchst du wirklich Tabellen, und wieso drei davon? Sind die Bilder irgendwie gruppiert?


Ja genau, also die Idee mit unterschiedlichen Verzeichnissen habe ich verworfen, brauch ich eigentlich nicht wirklich. So wie deine Galerie trifft es sehr gut, perfekt wäre dabei natürlich noch eine Sortierung nach Bildgröße, das wäre echt genial. 8o Ich werde erstmal versuche php 5.3.3 zu bekommen, schätze es ist auch erst dann sinnvoll mich anhand deines Galerie Beispiels ein entsprechendes Script zusammen zu basteln.