Jan: PHP include

Hallo,
Kann mir jemand sagen, ob es mit include irgendwie möglich ist, alle .txt dateien aus einem verzeichnis in eine seite eizufügen, unabhängig von der anzahl der .txt dateien.
Wenn ja, kann man die reihenfolge beeinflussen zb. über das erstelldatum oder den namen der jeweiligen .txt datei wenn die namen als zahlen bestehen, 1.txt, 2.txt, usw, oder irgenwie ganz anders.
Oder geht das schon aber mit einer ganz anderen methode.
ich wäre für ein paar anregungen dankbar.

mfg, der jan aus dresden

  1. Hi

    Naja du könntest es mit fopen, fgets, ... usw. machen...
    die Richtlinien musst du natürlich dann selbst festlegen, wann er welche Datei einliest

    MfG TOM

    1. Hi

      Naja du könntest es mit fopen, fgets, ... usw. machen...
      die Richtlinien musst du natürlich dann selbst festlegen, wann er welche Datei einliest

      MfG TOM

      Hallo,
      mit fopen, fgets spreche ich ja bestimmte dateien an und nicht ein verzeichnis.
      Das ist  mein problem, jemand anders läd in ein verzeichnis .txt dateien die in eine webseite eingefügt werden, ich habe das jetzt sogemacht, dass in dem verzeichnis 15 leere dateien liegen mit den namen 1-15 die in der webseite schon included sind (ohne inhalt)wenn er jetzt was hochladen will, schreibt er seinen text und benennt die datei 1.txt und läd sie hoch, und der text ist jetzt online.
      Mit der methode spreche ich ja nun nur ganz bestimmte dateien mit einer bestimmten anzahl an, das möchte ich ändern. Mein gedanke war halt, ein ganzes verzeichnis anzusprechen, keine ahnung ob das überhaupt geht.

      Oder ist mein gedankengang schon falsch und es geht ganz anders oder gar nicht.

      mfg

      1. Huhu Jan

        Das ist  mein problem, jemand anders läd in ein verzeichnis .txt dateien die in eine webseite eingefügt werden, ich habe das jetzt sogemacht, dass in dem verzeichnis 15 leere dateien liegen mit den namen 1-15 die in der webseite schon included sind (ohne inhalt)wenn er jetzt was hochladen will, schreibt er seinen text und benennt die datei 1.txt und läd sie hoch, und der text ist jetzt online.

        [...] jemand anders läd [...]

        spätestens jetzt solltest Du auf include verzichten, da in diesen Dateien auch z.B. PHP-Code enthalten sein könnte der dann interpretiert wird.
        Also besser über die file-Funktionen in einen String einlesen und
        per print bzw. echo ausgeben. Ggf. noch HTML- und Javascipt-Tags "rausstrippen".

        http://www.php.net/manual/en/function.strip-tags.php

        Viele Grüße

        lulu

  2. $lokal=getcwd(); //oder das verzeichnis welches du auslesen willst
    $handle1=opendir ($lokal);
    while ($file = readdir($handle1))
     {$bla[]=$file;}//les mal alles man so findet in ein array
    closedir($handle1);
    /*
    hier kannste erstmal dein array sortieren lassen:
    ksort -- Sortiert ein Array nach Schlüsseln
    sort -- Sortiert ein Array
    uasort --  Sortiert ein Array mittels einer benutzerdefinierten Vergleichsfunktion und behält Indexassoziationen bei.
    uksort --  Sortiert ein Array nach Schlüsseln mittels einer benutzerdefinierten Vergleichsfunktion.
    usort --  Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion.
    */
    for ($x=0;$x<count($bla);$x++)
     {
     if ((stristr($bla[$x],".txt"))!="")//ist es ein text?
      {
                    einfuegen ($bla[$x]);
                    }
            }

    function einfuegen ($test)
    {
    if (file_exists($test))
      {
      $datei = fopen($test,"r");
      if ($datei)
        {
        while (!feof($datei))
          {
          $inhalt=fgets($datei,600);
          echo $inhalt;
          }
        }
      }
    }

    1. $lokal=getcwd(); //oder das verzeichnis welches du auslesen willst
      $handle1=opendir ($lokal);
      while ($file = readdir($handle1))
      {$bla[]=$file;}//les mal alles man so findet in ein array
      closedir($handle1);
      /*
      hier kannste erstmal dein array sortieren lassen:
      ksort -- Sortiert ein Array nach Schlüsseln
      sort -- Sortiert ein Array
      uasort --  Sortiert ein Array mittels einer benutzerdefinierten Vergleichsfunktion und behält Indexassoziationen bei.
      uksort --  Sortiert ein Array nach Schlüsseln mittels einer benutzerdefinierten Vergleichsfunktion.
      usort --  Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion.
      */
      for ($x=0;$x<count($bla);$x++)
      {
      if ((stristr($bla[$x],".txt"))!="")//ist es ein text?
        {
                      einfuegen ($bla[$x]);
                      }
              }

      function einfuegen ($test)
      {
      if (file_exists($test))
        {
        $datei = fopen($test,"r");
        if ($datei)
          {
          while (!feof($datei))
            {
            $inhalt=fgets($datei,600);
            echo $inhalt;
            }
          }

      fclose ($test); //sorry vergessen

      }
      }

      1. Hi

        Dann hat sich _meine_ Antwort wohl erledigt ;-)

        MfG TOM

  3. $_DIRECTORY=dir("mydir/");
    while($_ENTRY=$_DIRECTORY->read()){
        if(is_int(strpos($_ENTRY,".txt"))){
            include_once($_ENTRY);
            # Auch möglich
            # $_FILE=implode("",file($_ENTRY));
            # echo $_FILE;
            # $_FILES[]=$_FILE;
        }
    }
    $_DIRECTORY->close();

    Hallo,
    Kann mir jemand sagen, ob es mit include irgendwie möglich ist, alle .txt dateien aus einem verzeichnis in eine seite eizufügen, unabhängig von der anzahl der .txt dateien.
    Wenn ja, kann man die reihenfolge beeinflussen zb. über das erstelldatum oder den namen der jeweiligen .txt datei wenn die namen als zahlen bestehen, 1.txt, 2.txt, usw, oder irgenwie ganz anders.
    Oder geht das schon aber mit einer ganz anderen methode.
    ich wäre für ein paar anregungen dankbar.

    mfg, der jan aus dresden

    1. ACH, noch ne anmerkung... dir($_WHAT) ist noch nicht binary-safe fähig....

      $_DIRECTORY=dir("mydir/");
      while($_ENTRY=$_DIRECTORY->read()){
          if(is_int(strpos($_ENTRY,".txt"))){
              include_once($_ENTRY);
              # Auch möglich
              # $_FILE=implode("",file($_ENTRY));
              # echo $_FILE;
              # $_FILES[]=$_FILE;
          }
      }
      $_DIRECTORY->close();

      Hallo,
      Kann mir jemand sagen, ob es mit include irgendwie möglich ist, alle .txt dateien aus einem verzeichnis in eine seite eizufügen, unabhängig von der anzahl der .txt dateien.
      Wenn ja, kann man die reihenfolge beeinflussen zb. über das erstelldatum oder den namen der jeweiligen .txt datei wenn die namen als zahlen bestehen, 1.txt, 2.txt, usw, oder irgenwie ganz anders.
      Oder geht das schon aber mit einer ganz anderen methode.
      ich wäre für ein paar anregungen dankbar.

      mfg, der jan aus dresden

  4. Hallo nochmal,
    Das sind ja schon eine menge tips.
    Ich werde mich mal darüber hermachen und testen.
    Vielen Dank!

    mfg, der jan aus dresden

  5. Hallo nochmal,
    den tips konnte ich nun doch nicht so richtig folgen, der grund, ich habe noch nicht wirklich einen plan von php, also habe ich noch so ein wenig rumprobiert und bin jetzt soweit:
    <?php
    $handle=opendir('news');
    while ($file = readdir ($handle)) {
       if ($file != "." && $file != "..")
        include ("news/$file");
    }
    closedir($handle);
    ?>

    alle dateien aus dem verzeichnis sind jetzt in der seite wie gewollt, aber mit der sortierung haberts noch, ich will, dass die zu letzt erstellte .txt datei als erste in der php seite erscheint.
    Nun habe ich mir die sort befehle angesehen, habe aber noch keine idee wie ich die nun einfüge und was ich sortien soll, das erstelldatum, nach dateinamen (1.txt, 2.txt,...)? Und vorallem wie bau ich das auf/ein?
    Die sort befehle an sich sind mir ja einigermaßen klar geworden aber nich so, das ich sie für mein problem verwenden könnte.

    wenn nochmal jemand nen tip gäben könnte, wäre schön.

    mfg, der jan aus dresden

    1. Aloha!

      <?php
      $handle=opendir('news');
      while ($file = readdir ($handle)) {
         if ($file != "." && $file != "..")
          include ("news/$file");
      }
      closedir($handle);
      ?>

      alle dateien aus dem verzeichnis sind jetzt in der seite wie gewollt, aber mit der sortierung haberts noch, ich will, dass die zu letzt erstellte .txt datei als erste in der php seite erscheint.

      Dann mußt du ein wenig mehr tun, als nur die unsortierten Textdateien einlesen.

      Zunächst mal: _Das_ Dateidatum gibts nicht, es gibt nur mehrere: fileatime, filectime, filemtime. Damit kriegst du raus, wann eine Datei zuletzt gelesen oder beschrieben wurde. Lies die Befehlsbeschreibungen am besten selbst:
      http://www.php.net/manual/de/function.fileatime.php
      http://www.php.net/manual/de/function.filectime.php
      http://www.php.net/manual/de/function.filemtime.php
      und
      http://www.php.net/manual/de/function.clearstatcache.php
      wenn du seltsame Ergebnisse erhälst, die schon uralt sind. :)

      Für jede gefundene Text-Datei mußt du also das gewünschte Datum herausfinden und irgendwie speichern. Ein Array wäre gut.

      Wenn du array_multisort() verwendest, kannst du im ersten Array die einzelnen Dateinamen speichern, und in einem zweiten Array das Dateidatum dazu. Gleicher Index bedeutet gleiche Dateizugehörigkeit.
      http://www.php.net/manual/de/function.array-multisort.php

      Du hast also $filename[0..n]="textdatei.txt" und $filedatum[0..n]="123456768".

      Nach dem Multisort sind die Dateien im Array alle in der richtigen Reihenfolge, du mußt also $filename nur noch von 0 bis n durchgehen und alle Textdateien ausgeben.

      - Sven Rautenberg