PHP dir wil niet gemaakt worden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Om een 1 of ander reden wil mk_dir() niet zijn werk doen. Het probleem ligt em bij wanneer ik meer dan 1 map wil maken dus map_die_er_al_zat/map1/map2/

Bij Map 2 krijg ik de error van kan path etc niet vinden. Ik heb dit forum eens afgezocht plus de php website op een antwoord op mijn vraag maar kon er niets over vinden.

Ik heb van alles geprobeert, slashes ervoor slashes eraf. Voor het gemak heb ik een deel van me code gestript en bij mk_dir een voorbeeldje gezet van wat er in $this->UPLOAD_DIR_VOLLEDIG zou moeten zitten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
    public function controleer_maak_dir ($status_bestanden) {       
        
        if (!is_dir( $this -> UPLOAD_DIR_VOLLEDIG )) {  #
            if ( mkdir("tuploadHIER/7/cool") ) {
                $status_bestanden -> melding .= 'dir gemaakt <br />';
            }
            else {
                $status_bestanden -> melding .= 'dir kon niet gemaakt worden <br />';
            }
        }
    }

[ Voor 5% gewijzigd door aex351 op 30-06-2005 19:47 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
kan t niet zo

mkdir("tuploadHIER)
mkdir("tuploadHIER/7)
mkdir("tuploadHIER/7/cool)

you get the idea?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

mkdir doet in PHP precies hetzelfde wat je op de commandline doet (be it in Linux, be it in Windows), en daar kun je ook geen submappen maken van mappen die nog niet bestaan. Even logisch nadenken dus. ;)

Waarom heb je dat niet meteen geprobeerd trouwens? Lijkt me een vrij logische oplossing namelijk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
gideon82 schreef op donderdag 30 juni 2005 @ 20:05:
kan t niet zo

mkdir("tuploadHIER)
mkdir("tuploadHIER/7)
mkdir("tuploadHIER/7/cool)

you get the idea?
Ja daar dacht ik ook aan, alleen ik geloof niet dat dat de bedoeling is van de functie mk_dir(). Ik wil gewoon het in 1 keer kunnen aanmaken.
mkdir doet in PHP precies hetzelfde wat je op de commandline doet (be it in Linux, be it in Windows), en daar kun je ook geen submappen maken van mappen die nog niet bestaan. Even logisch nadenken dus.

Waarom heb je dat niet meteen geprobeerd trouwens? Lijkt me een vrij logische oplossing namelijk
Omdat ik dacht dat mk_dir() het gewoon zelf zou moeten kunnen doen, vandaar.

[ Voor 38% gewijzigd door aex351 op 30-06-2005 20:11 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op donderdag 30 juni 2005 @ 20:10:
Ja daar dacht ik ook aan, alleen ik geloof niet dat dat de bedoeling is van de functie mk_dir(). Ik wil gewoon het in 1 keer kunnen aanmaken.

[...]

Omdat ik dacht dat mk_dir() het gewoon zelf zou moeten kunnen doen, vandaar.
Dat gaat je met standaardfuncties niet lukken, maar zelf zo'n functie schrijven lijkt me geen probleem?
PHP:
1
2
3
4
5
6
7
8
9
10
11
function my_mkdir($path) {
  $pieces = explode('/', $path);
  $pieces[0] = empty($pieces[0]) ? '/' : $pieces[0]; //beveiliging bij paden die beginnen met een /
  $currentpath = '';
  foreach ($pieces as $folder) {
    if (!is_dir($folder)) {
      mkdir($currentpath . $folder);
    }
    $currentpath .= $folder . '/';
  }
}

Zoiets lijkt me te doen wat jij wil? :) Disclaimer: ongetest. ;)

[ Voor 7% gewijzigd door NMe op 30-06-2005 20:23 . Reden: beveiliging ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

aex351 schreef op donderdag 30 juni 2005 @ 20:10:

Omdat ik dacht dat mk_dir() het gewoon zelf zou moeten kunnen doen, vandaar.
Dat is heel vaak het probleem. Je moet niet denken, maar gewoon de documentatie lezen, én de comments.
http://www.php.net/mkdir

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 30 juni 2005 @ 20:25:
[...]

Dat is heel vaak het probleem. Je moet niet denken, maar gewoon de documentatie lezen, én de comments.
http://www.php.net/mkdir
Inderdaad. Daar staat meteen ook een veel mooiere functie in de comments die precies doet wat TS wil:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   function RecursiveMkdir($path)
   {
       // This function creates the specified directory using mkdir().  Note
       // that the recursive feature on mkdir() is broken with PHP 5.0.4 for
       // Windows, so I have to do the recursion myself.
       if (!file_exists($path))
       {
           // The directory doesn't exist.  Recurse, passing in the parent
           // directory so that it gets created.
           RecursiveMkdir(dirname($path));

           mkdir($path, 0777);
       }
   }

Ik vraag me wel af waarom er gekozen is voor file_exists in plaats van is_dir, maar ok, het zal beiden werken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • neh
  • Registratie: Juni 2001
  • Laatst online: 18-09 09:55

neh

-NMe- schreef op donderdag 30 juni 2005 @ 20:29:
[...]
Ik vraag me wel af waarom er gekozen is voor file_exists in plaats van is_dir, maar ok, het zal beiden werken. :)
Omdat je iig in unix geen dir kunt maken als er een file bestaat met dezelfde naam

XT, 640K ram, 20 MB harddisk, MS-DOS 4.0...


Acties:
  • 0 Henk 'm!

Verwijderd

plork schreef op donderdag 30 juni 2005 @ 20:33:

Omdat je iig in unix geen dir kunt maken als er een file bestaat met dezelfde naam
Dat klopt, maar de schrijver van dat scriptje is wel vergeten om even een nette foutmelding te geven. Het is niet handig als een functie niets lijkt te doen, en je moet er dan zelf achter komen dat er al een bestand bestaat.

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Verwijderd schreef op donderdag 30 juni 2005 @ 20:25:
[...]

Dat is heel vaak het probleem. Je moet niet denken, maar gewoon de documentatie lezen, én de comments.
http://www.php.net/mkdir
Dat heb ik ook gelezen, maar nergens stond er dat ik de mappen stuk voor stuk moest aanmaken. Ik uiteindelijk het idee wel dat het zo moest, maar omdat ik het zeker wilde weten vroeg ik het op dit forum.

@NME
PHP:
1
$pieces[0] = empty($pieces[0]) ? '/' : $pieces[0];

Interessante vormgeving, ben ik nog niet eerder tegen gekomen. Misschien toevallig een linkje naar wat meer informatie.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

[google=ternary operator] ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Wie goed kijkt ziet dat de topicstarter sowieso PHP 5.0.x gebruikt, en volgens de documentatie is er dan dus een 3e argument "bool recursive", welke waarschijnlijk hetzelfde doet als -p bij het mkdir op de command line.

Verder staat er uiteraard nog wat over dingen als safe mode, maar dat zal niet van toepassing zijn, omdat je (vrij verscholen) impliceert dat het aanmaken van een enkele directory wel goed gaat.

[ Voor 3% gewijzigd door Verwijderd op 30-06-2005 20:50 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Verwijderd schreef op donderdag 30 juni 2005 @ 20:50:
Wie goed kijkt ziet dat de topicstarter sowieso PHP 5.0.x gebruikt, en volgens de documentatie is er dan dus een 3e argument "bool recursive", welke waarschijnlijk hetzelfde doet als -p bij het mkdir op de command line.

Verder staat er uiteraard nog wat over dingen als safe mode, maar dat zal niet van toepassing zijn, omdat je (vrij verscholen) impliceert dat het aanmaken van een enkele directory wel goed gaat.
Dat houd in dat ik de mappen in dat de funtie mk_dir() de mappen in 1x kan aanmaken ipv per stuk ?

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op donderdag 30 juni 2005 @ 22:09:
Dat houd in dat ik de mappen in dat de funtie mk_dir() de mappen in 1x kan aanmaken ipv per stuk ?
Ja. Was je ook achter gekomen als je het even geprobeerd had. ;)

De functie heet trouwens mkdir, niet mk_dir. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
-NMe- schreef op donderdag 30 juni 2005 @ 22:23:
[...]

Ja. Was je ook achter gekomen als je het even geprobeerd had. ;)

De functie heet trouwens mkdir, niet mk_dir. :)
Ben er net erachter gekomen dat alleen de Engels pagina's op php.net over die informatie beschikken. Aangezien ik altijd bij de Nederlanse pagina's kijk heb ik het dus niet gezien.

*note : ik wist trouwens ook helemaal niet wat recursive was , maar ik zie dat het gewoon een functie is die zichzelf loopt. Maar ik zie dat ook in die extra feature onder windows systemen bugs zitten
Voor mensen die in de toekomst nog problemen met dit zullen ondervinden heeft iemand op php.net al een kant en klaar script gemaakt


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        function RecursiveMkdir($path)
        {
            // This function creates the specified directory using mkdir().  Note
            // that the recursive feature on mkdir() is broken with PHP 5.0.4 for
            // Windows, so I have to do the recursion myself.
            if (!file_exists($path))
            {
                // The directory doesn't exist.  Recurse, passing in the parent
                // directory so that it gets created.
                RecursiveMkdir(dirname($path));

                 mkdir($path, 0777);
            }
        }

        if (!file_exists($this -> UPLOAD_DIR_VOLLEDIG))
        {
            // Call the recursive mkdir function since the "recursive" feature
            // built in to mkdir() is broken.
             RecursiveMkdir($this -> UPLOAD_DIR_VOLLEDIG);
        }


edit2 : Ik zie net dat NME een deel van de bovenstaande code al in een voorgaande reply gepost had.

[ Voor 100% gewijzigd door aex351 op 30-06-2005 23:58 ]

< dit stukje webruimte is te huur >

Pagina: 1