Warning: mkdir() [function.mkdir]: Too many links in ... Workaround

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Warning: mkdir() [function.mkdir]: Too many links in ... Workaround

    Ja ich habe einen einfachen Link Ordner Dienst programmiert für einen "Bekannten". Dort werden automatisch DLC Dateien erstellt und unter files/container/dlc/ gespeichert!
    Für jede DLC Datei wird ein weiterer Unterordner angelegt eine DLC Datei liegt also unter files/container/dlc/sha1 hash 1/sha1 hash 2.dlc

    Jetzt macht der Server aber Ärger! Ich erhalte die Antwort:

    Warning: mkdir() [function.mkdir]: Too many links in … online …
    Ich bräuchte jetzt nur jemanden der eine Idee hat wie man das Limit welches vom Filesystem abhängig ist laut ryan.ifupdown.com/2008/08/17/warning-mkdir-too-many-links/ umgehen kann... Ich verstehe nicht wirklich was der Blogger mir vorschlägt bzw sieht das auch nicht wirklich toll aus ...
  • ok, im Ordner dlc hast du also x tausend Dateien.
    Erstmal musst du die Dateien besser hinterlegen.

    Quellcode

    1. $folder = 'files/container/dlc';
    2. $file = 'foo.dlc';
    3. $hash = sh1($file);
    4. $gooddir = $folder.'/'.$hash[0].'/'.$hash[1].'/'.$hash[2];
    5. @mkdir($gooddir);
    6. move_uploaded_file($_FILE[...], $gooddir.'/'.$file);


    Sicherlich. musst du nun aber erstmal aufräumen und mit einem Script die ganzen Dateien in Unterverzeichnisse kopieren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Torben Brodt ()

  • Verstehe ich nicht ...

    Es geht doch drum das in einem Ordner nicht mehr wie 32000 Ordner / Dateien liegen dürfen?!?
    Es ist doch vollkommen egal wie viele Ordner ich jetzt erstelle es wird trotzdem für jede DLC Datei im Ordner files/container/dlc/ aktuell 1 Unterordner mit einer Datei in eurem Fall bzw nach der Idee des Blogs 3 oder 4 Unterordner mit einer Datei, 1 Ordner geben das hab ich auch jemanden anderen schon versucht zu erklären ...

    Aktuell:

    DLC #1: files/container/dlc/{sha1}/{sha1}.dlc
    DLC #2: files/container/dlc/{sha1}/{sha1}.dlc
    DLC #3: files/container/dlc/{sha1}/{sha1}.dlc
    DLC #4: files/container/dlc/{sha1}/{sha1}.dlc
    DLC #5: files/container/dlc/{sha1}/{sha1}.dlc

    Nach der Idee des Blogs:

    DLC #1: files/container/dlc/{s/h/a/1}/{sha1}.dlc
    DLC #2: files/container/dlc/{s/h/a/1}/{sha1}.dlc
    DLC #3: files/container/dlc/{s/h/a/1}/{sha1}.dlc
    DLC #4: files/container/dlc/{s/h/a/1}/{sha1}.dlc
    DLC #5: files/container/dlc/{s/h/a/1}/{sha1}.dlc


    Also in beiden fällen sind schon 5 Ordner im Ordner files/container/dlc/

    ?( ?( ?( ?( ?(

    Die Idee die der Ty von dem Laden hatte ...

    files/container/dlc/{date}/sha1/sha1.dlc dann müssten wir Platz für 87 Jahre haben? Theoretisch?
  • Nach der Idee des Blogs gibts nur 16 Ordner in erster Hierarchie (Vom Hash das erste Zeichen), 16 Ordner in zweiter Hierarchie, usw
    Falls du das Datum nimmst, hast du das Problem, dass du vom ursprünglichen Dateinamen nicht mehr zum Zielpfad kommst.

    Der Hash ist jedoch immer der selbe - du kannst die Datei also jederzeit wieder finden.
  • Nun ich hatte jetzt vor alle Container neu zu generieren das Problem ist nur diese Lösung funktioniert auch nur solange nicht pro Tag mehr wie 32.000 Ordner erstellt werden ...

    Naja wie gesagt ich verstehe das noch nicht ganz mit den 16 / 16

    Soll das sowas werden wie:

    Also der Order files/container/dlc/ hat 16 Unterordner dieser auch wieder 16 die haben auch alle 16? Kommt man da nicht auch irgendwann mal auf 32.000? Und wieso nicht immer 1000 Ordner?
  • das hashing wird nur verwendet damit die Dateien fair in ihre Ordner aufgeteilt werden. In allen Unterordnern die du erstellst, wirst du also etwas genausoviele Dateien haben.

    Gehen wir nun von 2 Ebenen aus
    also domain.tld/a/b/dateiname dann haben wir 16^2 (256) Unterordner die jeweils 32.000 Dateien haben können.

    Gehst du wie in meinem PHP Beispiel drei Ebenen tief also domain.tld/a/b/c/dateiname dann haben wir (16^3) als 4.096 Ordner mit jeweils 32.000 Dateien.
    Das sollte fürs erste reichen ;) Ansonsten gehe eben noch ein paar Ebenen tiefer.
  • ich weiß nicht ob wir aneinander vorbei reden.
    Aber mein Code, den ich oben gepostet habe, enthält eigentlich schon die komplette Lösung für den Vorschlag aus dem Blog Posting.

    Es werden jeweils das erste Zeichen von der sha1 Summe als erster Ordner, das zweite als zweiten Ordner, usw verwendet.
    Auf die Möglichkeit mit dem Tag würde ich wie gesagt verzichten. Da du vom original Dateinamen nie mehr den abgelegten Ort nachvollziehen kannst.