WinFuture-Forum.de: Scandir Scannt 2 Datein Zuviel. - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Scandir Scannt 2 Datein Zuviel.


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0

geschrieben 29. Mai 2008 - 20:04

hallo,
ich arbeite zur Zeit mit scandir(). Was mich nur daran stört ist dass er immer 2 Datein zu viel scannt. Auch wenn ich es dann per cout Zähle sind generell 2 Zuviel angegeben.
Dann bin ich darauf gestoßen als ich die Array ausgegeben habe:
Array
(
    [0] => .
    [1] => ..
    [2] => info1.txt
    [3] => info2.txt
    [4] => info3.txt
    [5] => info4.txt
    [6] => info5.txt
)


Warum ist das so?
0

Anzeige

#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.940
  • Beigetreten: 13. Dezember 04
  • Reputation: 43

geschrieben 29. Mai 2008 - 20:22

Weil . der aktuelle und .. der darüberliegende Ordner ist und die gehören nun mal zu einem Ordner dazu.
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#3 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0

geschrieben 29. Mai 2008 - 20:28

Achso sit das gemeint, aber dass ist doch total sinnlos oder kann mir mal jemand sagen wofür man das gebrauchen kann?

Nebenbei, kann ich das so machen bzw "macht" man es so! =>
<?php
//Random-Tool-Tips-Script
$dir	= 'daten/';
$files = scandir($dir);

$anzahl= count($files);
$anzahl=$anzahl-2;
$out=rand(2,$anzahl);

$name ="$dir$files[$out]";
$title_name="$files[$out]";
//Headline aus Datei auslesen
$title= explode(".", $title_name);
echo "<b>",$out."/".$anzahl."</b><i>
 \"".$title[0]."\"</i><br />";
include("$name");
?>


Habe noch ein Problem. Es werdeb zwar alle "Newsdatein" erfasst doch ihen wird jedesmal eine anderer $out zugewiesen. Deswegen ist die Funktion (6/12) schonmal unnütz.
Ich müsste die Array doch "sortieren" oder? Ich mlchte aber vorher die Werte "." und ".." aus dem Array löschen!

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 29. Mai 2008 - 20:55

0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0

geschrieben 29. Mai 2008 - 20:56

Also, generell ist das in Ordnung. Jedoch solltest du die Anführungszeichen alle weglassen, wenn darin nur Variablen stehen, denn sonst muss extra ein mutmaßlicher String geparst werden. Außerdem bevorzuge ich die Funktion int mt_rand ([ int $min ], int $max ) vor rand(). Und damit du alle Dateien mit rand bzw. mt_rand erfasst, musst du nur eins von der Dateianzahl abziehen und nicht zwei. Denn das ist die Obergrenze und die ist nur eins kleiner als die Anzahl der Elemente im Array (da Nummerierung mit 0 beginnt).

<?php

//Random-Tool-Tips-Script
$dir	= 'daten/';

$files = scandir($dir);
$rand_no = mt_rand(2, sizeof($files) - 1);

$filename = $dir.$files[$rand_no];
$title_name = $files[$rand_no];

//Headline aus Datei auslesen
$title = explode('.', $title_name);
echo '<i>"'.$title[0].'"</i><br />';

include($filename);
?>


Zu den . und ..: Das ist einfach sowas wie eine Konvention in PHP, dass die mit übernommen werden :imao: dir in Windows und ls -a geben diese ebenfalls mit aus. Die gehören einfach zur Verzeichnisstruktur dazu :P

Gruß,
Stefan
0

#5 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0

geschrieben 29. Mai 2008 - 21:25

Hm das mit mt_rand() hab ich eingebaut, die "" habe ich auch entfernt aber bin zu einer anderen Lösung gekmmen. So läuft es aber die "plusse" und "minusse" machen mich traurig xD :P
<?php
//Random-Tool-Tips-Script
$dir	= 'daten/';
$files = scandir($dir);

$anzahl= count($files);
$anzahl=$anzahl-1;
//$out=rand(2,$anzahl);
$out= mt_rand(2,$anzahl);
$anzahl=$anzahl-1;
$name =$dir.$files[$out];
$title_name=$files[$out];
//Headline aus Datei auslesen
$title= explode(".", $title_name);
echo '<b>',$out-1 .'/'.$anzahl .'</b><i> "'.$title[0].'"</i><br />';
include($name);
?>

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 29. Mai 2008 - 21:32

0

#6 _USA_

  • Gruppe: Gäste

geschrieben 30. Mai 2008 - 18:15

Probier mal http://de3.php.net/glob

Gruß USA
0

#7 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 30. Mai 2008 - 19:37

Wenn PHP 5 zur Verfügung steht, schau Dir mal DirectoryIterator an. Ein Beispiel findest Du hier. Ebenfalls auf der Seite ist ein kleines Beispiel, wie Du Bilder zufallsbedingt auf einer Webseite anzeigen lassen kannst. Dafür wird u.a. glob() und array_rand() benutzt. Mit etwas Phantasie kann man auch verschiedene Techniken kombinieren. :)

Die . und .. werden in erster Linie für das rekursive arbeiten mit Verzeichnissen benötigt und sind nicht "total sinnlos", sondern ausgesprochen wichtig.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0