tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von ComFreek
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
241
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Wer kann mir ein bischen helfen?
    Ich erzeuge mit php ein Verzeichnis mit Ordnern, in die user fotos uploaden können.
    Jeder user hat seinen Foto Ordner. Dabei möchte ich, dass immer nur maximal 999
    Ordner in einem Ordner liegen (soll wohl sonst zu Problemen führen).
    Realisiert habe ich das mit Zurhilfenahme der user-id.

    PHP-Code:
    //id auffüllen nach links mit nullen 6 stellig
    $zahl str_pad($user_id,'0'STR_PAD_LEFT);

    //zahl in dreistellige zahlen zerlegen von rechts beginnend
    $v1 substr ($zahl,-3,3);
    $v2 substr ($zahl,-6,3);

    $path "$v2/$v1";

    if ( 
    mkdir '../foto/'.$path.'/files'0700true ) )
    {echo 
    'Verzeichnis erstellt!';} 
    Das funktioniert, obwohl ich als greenhorn sicher Fehler gemacht habe.
    Nun möchte ich aber kontrollieren, ob es diesen Pfad, also das Verzeichnis, bereits gibt.
    Eigentlich dürfte das ja nicht vorkommen, da ja jede user-id einzigartig ist. Konnte ich mich halbwegs verständlich machen?
    Geändert von phpameise (12.01.12 um 18:28 Uhr)
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    So könntest du zum Beispiel die Anzahl der Ordner in einem Ordner zählen:
    PHP-Code:
    define('SD_NAMES'1);
    define('SD_COUNT'2);

    function 
    getSubDirs($dir$mode=SD_NAMES)
    {
      if ( !
    dir_exists($dir) ) return array();
      
    $contents scandir($dir);
      if ( 
    $dir === FALSE ) return array();

      if ( 
    $mode SD_NAMES )
        
    $subdirs 0;
      else
        
    $subdirs = array();

      foreach ( 
    $contents as $entry )
      {
         if ( 
    is_dir($dir.DIRECTORY_SEPARATOR.$entry) )
         {
            if ( 
    $mode SD_NAMES )
              
    $subdirs[] = $dir.DIRECTORY_SEPARATOR.$entry;
            else
              
    $subdirs++;
         }
      }
      return 
    $subdirs;
    }

    if ( 
    getSubDirs($v1SD_COUNT) > 999 )
    {
      
    // Fehlerbehandlung!
      // ...
      
    exit();
    }
    if ( 
    getSubDirs($v2SD_COUNT) > 999 )
    {
      
    // Fehlerbehandlung!
      // ...
      
    exit();

    phpameise bedankt sich. 
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Ich glaub ich habs:
    PHP-Code:
    if (!is_dir('../foto/'.$path.'/files')) {

    if ( 
    mkdir '../foto/'.$path.'/files'0700true ) )
    {echo 
    'Verzeichnis erstellt!';}
    }  
    else
    {
      echo 
    'Verzeichnis gibts schon!';

    Geändert von phpameise (12.01.12 um 18:52 Uhr)
     

  4. #4
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Das sieht natürlich viel spektakulärer aus. Schau ich mir morgen mal genauer an. Danke
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von phpameise Beitrag anzeigen
    Ich glaub ich habs:
    PHP-Code:
    if (!is_dir('../foto/'.$path.'/files')) {

    if ( 
    mkdir '../foto/'.$path.'/files'0700true ) )
    {echo 
    'Verzeichnis erstellt!';}
    }  
    else
    {
      echo 
    'Verzeichnis gibts schon!';

    Ein Tipp am Rande. Formatiere dein Code mit Tabulatoren und man erkennt sofort welcher if wo endet ohne das man Klammern zählen muss
    PHP-Code:
    if (!is_dir('../foto/'.$path.'/files')) {
        if ( 
    mkdir '../foto/'.$path.'/files'0700true ) ){
            echo 
    'Verzeichnis erstellt!';
        }
    }else{
        echo 
    'Verzeichnis gibts schon!';

    Nachtrag:
    Ich finde ComFreaks Funktion ein wenig kompliziert (geschweige davon, dass is_dir($entry) mMn immer auf false läuft, da $entry nur ein Ordnername ist, jedoch kein Ordnerpfad).
    Ist natürlich geschmacksache - ich bevorzuge Arrays und Array-Funktionen *g*
    PHP-Code:
    //id auffüllen nach links mit nullen 6 stellig
    $zahl str_pad($user_id,'0'STR_PAD_LEFT);
    $path substr_replace($zahlDIRECTORY_SEPARATOR30);

    //Pfad generieren
    $myDir buildPath('..''foto'$path'files');

    //TODO: Ermitteln ob der Pfad exisitert....

    //Alle Items auslesen
    $items scandir($myDir);
    //Alles was kein Ordner ist rausfiltern
    $dirsarray_filter($items'filterIsDir');
    //Die Anzahl Dateien ermitteln
    $countDirs count($dirs);

    /**
     * generiert aus allen übergebenen Values einen Pfad mit dem passenden Separator 
     */
    function buildPath(){
        
    $items func_get_args();
        return 
    implode(DIRECTORY_SEPARATOR$items);
    }

    /**
     * Ermittelt ob es sich um eine Folder im angegeben verzeichnis handelt
     */
    function filterIsDir($item){
        return 
    is_dir(buildPath($GLOBALS['myDir'], $item));

    phpameise bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Ich danke Euch!
     

  7. #7
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Zitat Zitat von Yaslaw Beitrag anzeigen
    Nachtrag:
    Ich finde ComFreaeks Funktion ein wenig kompliziert (geschweige davon, dass is_dir($entry) mMn immer auf false läuft, da $entry nur ein Ordnername ist, jedoch kein Ordnerpfad).
    Ist natürlich geschmacksache - ich bevorzuge Arrays und Array-Funktionen *g*
    Mit $entry hast du Recht, da muss man noch den Ordnerpfad davorpacken (Code oben aktualisiert!).

    Ich muss ehrlich sagen, deine Lösung schaut eleganter bis auf das $GLOBALS['myDir'] aus
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von ComFreek Beitrag anzeigen
    Ich muss ehrlich sagen, deine Lösung schaut eleganter bis auf das $GLOBALS['myDir'] aus
    Leider ja. Das $GLOBALS gefällt mir auch nicht.... Alternativ könnte man mit einem array_walk() aus jedem item ein Pfad machen.
    oder die Funktion weglassen und mittels create_function eine Massgeschneiderte Funktion schreiben
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Verzeichnis erstellen!
    Von soa im Forum Java
    Antworten: 7
    Letzter Beitrag: 21.05.11, 19:57
  2. Antworten: 2
    Letzter Beitrag: 17.02.09, 10:15
  3. Verzeichnis erstellen
    Von mtk-flo im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 26.06.07, 17:59
  4. verzeichnis erstellen mit php
    Von creativeheadz im Forum PHP
    Antworten: 1
    Letzter Beitrag: 30.05.05, 22:37
  5. Verzeichnis erstellen
    Von Slater im Forum PHP
    Antworten: 1
    Letzter Beitrag: 02.09.02, 12:54

Stichworte