[PHP] Ordner rekursiv erstellen "open_basedir"

Dieses Thema im Forum "Webentwicklung" wurde erstellt von newcomer2k6, 14. Mai 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 14. Mai 2008
    Ordner rekursiv erstellen "open_basedir"

    Hi Leute, ich habe ein kleines Problem.

    Ein Script erstellt ein Temp ordner um sachen zu Cachen. Dabei erstellt diese Funktion die Ordner Rekursiv:

    PHP:
    function  _create_dir_structure ( $dir )
        {
            if (!@
    file_exists ( $dir )) {
                
    $dir_parts  preg_split ( '![\/]+!' $dir , - 1 PREG_SPLIT_NO_EMPTY );
                
    $new_dir  = ( $dir { 0 } ==  DIR_SEP ) ?  DIR_SEP  '' ;
                foreach (
    $dir_parts  as  $dir_part ) {
                    
    $new_dir  .=  $dir_part ;
                    if (!
    file_exists ( $new_dir ) && ! mkdir ( $new_dir 0771 )) {
                        
    Cache_Lite :: raiseError ( 'Cache_Lite : problem creating directory \"$dir\" !' , - 3 );   
                        return 
    false ;
                    }
                    
    $new_dir  .=  DIR_SEP ;
                }
            }
        }
    So sieht mein Pfad dann aus, der erstellt werden soll:

    /srv/www/htdocs/web/temp/

    Das Problem ist, dass das Script die ordner erstellt wie folgt.
    1. /srv/
    2. /srv/www/
    3. /srv/www/htdocs/
    4. /srv/www/htdocs/web/
    5. /srv/www/htdocs/web/temp/
    Bei Nummer 1 bis 4 würde er jetzt einen fehler ausgeben, wegen open basedir restriction.

    Geht es, das man in der Konfig von php oder apache einen befehl eingibt, das er diesen Pfad erstellen darf? Man kann den ganzen /srv/ ordner freigeben, und dann /www/ aber das erhöht das risiko für ne sicherheitslücke, da in diese ordner eingentlich nichts reinkommt.

    Oder muss ich die Funktion umschreiben?
     
  2. 14. Mai 2008
    AW: Ordner rekursiv erstellen "open_basedir"

    ähm, versteh ich nicht. warum willst du denn diese ordner erstellen?
    erstell doch einfach nur ./temp
     
  3. 14. Mai 2008
    AW: Ordner rekursiv erstellen "open_basedir"

    Ansonsten sollte es diese Funktion auch bringen, musst dann halt noch falls gewünscht deine Fehlermeldung einbauen.

    PHP:
    function  createFolders ( $path ) {     // Erstellt Ordner , bis der Ordner $path erstellt wurde
        
    $explode_path      explode ( '/' $path );
        
    $new_dir          '' ;
        
        if(
    is_file ( $_SERVER [ 'DOCUMENT_ROOT' ]. $path ))
            
    $path  dirname ( $path );
        for (
    $i  0 $i  count ( $explode_path );  $i ++) {
            
    $new_dir  $new_dir . $explode_path [ $i ]. '/' ;
            if (!
    file_exists ( $_SERVER [ 'DOCUMENT_ROOT' ]. $new_dir ))
                @
    mkdir ( $_SERVER [ 'DOCUMENT_ROOT' ]. $new_dir 0755 );
        }
    }
     
  4. 14. Mai 2008
    AW: Ordner rekursiv erstellen "open_basedir"

    verbessert:

    PHP:
    <? php
    function  createFolders ( $path ) {     // Erstellt Ordner , bis der Ordner $path erstellt wurde
        
    $explode_path      explode ( '/' $path ); 
        
    $new_dir          '' ;
        
        if(
    is_file ( $_SERVER [ 'DOCUMENT_ROOT' ] .  $path ))
            
    $path  dirname ( $path );
            
            
        for (
    $i  0 $to  count ( $explode_path );  $i  $to $i ++) {  //fehler 1, count() bei jedem schleifendurchgang
            
    $new_dir  $new_dir . $explode_path [ $i ]. '/' ;
            if (!
    is_dir ( $_SERVER [ 'DOCUMENT_ROOT' ]. $new_dir ))  //fehler 2, file_exists()
                
    @ mkdir ( $_SERVER [ 'DOCUMENT_ROOT' ]. $new_dir 0755 );
        }
    }
    ?>
     
  5. 14. Mai 2008
    AW: Ordner rekursiv erstellen "open_basedir"

    thx, haut hin
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.