Avatar billede dhreugh Nybegynder
28. december 2006 - 22:18 Der er 24 kommentarer og
1 løsning

mkdir opretter to mapper

Jeg har en kort funktion til at oprette en ny mappe med et unikt navn, men for hver gang det køres oprettes der to mapper, hver med sit eget navn.

        $path = "/path/to/";
        $tempName = md5(uniqid(rand(), true).time());
        mkdir($path.$tempName);

Hvor er det at det går galt?
Avatar billede leif Seniormester
28. december 2006 - 22:33 #1
Der er intet i den kode som vil lave 2 mapper
Avatar billede michael_stim Ekspert
28. december 2006 - 23:04 #2
Mon ikke du kalder på funktionen 2 gange?
Avatar billede windcape Praktikant
28. december 2006 - 23:06 #3
forslag til at debugge :)

$path = "/path/to/";
$tempName = md5(uniqid(rand(), true).time());
$created = false
if(!$created) {
    mkdir($path.$tempName);
    $created = true;
} else {
    echo 'jeg er allerede blevet kørt en gang!';
}
Avatar billede windcape Praktikant
28. december 2006 - 23:07 #4
og husk ; efter $created = false
Avatar billede windcape Praktikant
28. december 2006 - 23:08 #5
Desuden er det klart den laver 2 forskellige mapper hvis du kører scriptet 2 gange. time() ændre sig jo hvert sekund.
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:12 #6
Takker meget for debug forslaget! har lige kørt det, men den siger at den kun bliver kaldt én gang, men alligevel oprettes der to mapper. Jeg er også sikker på at jeg kun kalder funktion én gang, så det er ikke derfor...
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:16 #7
hvis jeg derimod undlader uniqid() men kun kører:
$tempName = md5(time());
så oprettes der kun én mappe.

Kører jeg derimod uden time() påhæftet:
$tempName = md5(uniqid(rand(), true));
oprettes der to mapper! Så time() er ikke skyld i det.
Avatar billede leif Seniormester
28. december 2006 - 23:21 #8
Når du siger 2 mapper mener du så:
/path/to/10/123

eller

/path/to/10
/path/to/123
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:22 #9
$tempName = md5(uniqid(time(), true));
opretter også to mapper
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:22 #10
/path/to/10
/path/to/123

de oprettes begge i samme parent folder
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:24 #11
$tempName = md5(rand().time());
opretter ligeledes to mapper
Avatar billede windcape Praktikant
28. december 2006 - 23:26 #12
Jeg har lige testet dit (originale) script: http://dragons-lair.org/projects/experten/752866.php

Og det opretter altså kun een mappe..
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:30 #13
hmm yderst mærkeligt.
Men så kan jeg jo kun konkludere at fejle ligger et sted hos mig. Jeg er dog helt sikker på at den kun bliver kaldt én gang.
Avatar billede plx Nybegynder
28. december 2006 - 23:32 #14
den eneste logiske forklaring i mit hoved er, at scriptet bliver kaldt to gange
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:33 #15
hvis jeg sætter
$tempName = rand();
så oprettes der også to mapper!
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:35 #16
jeg ville også tror at det bliver kaldt to gange, men hvis jeg benytter den debug som blev forslået af windcape, eller får den til at udskrive noget hver gang den bliver kaldt, så viser den også at den kun bliver kaldt én gang...
Avatar billede plx Nybegynder
28. december 2006 - 23:36 #17
rand returnerer jo også forskellige værdier fra gang til gang. Da du kun benytte time, og der kun blev oprettet én mappe, kan skyldes scriptet blev kaldt to gange inden for samme sekund.

kaldes scriptet to gange, vil ovenstående debug ikke afsløre noget
Avatar billede dhreugh Nybegynder
28. december 2006 - 23:39 #18
jeps har jeg også tænkt på. Men hvis scriptet blev kaldt flere gange, ville enhver 'echo' i den også blive kaldt flere gange, ik?. Det gør de ikke. :(
Avatar billede windcape Praktikant
28. december 2006 - 23:41 #19
plx ja, hvis det bliver kaldt 2 forskellige steder fra, dvs. 2 HTTP requests.

Det ville virke hvis det f.eks. drejede sig om 2 x include()
Avatar billede dhreugh Nybegynder
29. december 2006 - 00:02 #20
hvis jeg benytter include_once() eller require_once() burde det ikke forhindre at det kan blive kaldt fra flere includes? Problemet er der ihvertfald stadig...
Avatar billede windcape Praktikant
29. december 2006 - 00:05 #21
include/require_once vil forhindre det ja :)

Problemet ligger noget dybere i din kode, så du bliver nød til at poste ALT det kode som bliver kaldt (gerne med filnavne, hvis du bruger require/include).
Avatar billede dhreugh Nybegynder
29. december 2006 - 00:32 #22
jeg har ved at prøve mig frem fundet frem til hvad der skabte problemet: I en include hvor jeg har alt min html head, var der en stylesheet deklaration som havde en tom href attribut, som her:

<link rel="stylesheet" type="text/css" href="" />

Når href er tom vil der blive oprette to mapper, men hvis den ikke er tom vil der kun komme én mappe som det er tænkt. Spørgsmålet er så bare hvorfor det forholder sig sådan? Er det browseren der sender to http requests? Det sker ved Firefox men ikke IE. Var sgu ikke nem at regne ud...
Avatar billede dhreugh Nybegynder
29. december 2006 - 00:55 #23
Jeg takker mange gang for hjælpen!
Avatar billede windcape Praktikant
29. december 2006 - 01:02 #24
ja, det er grunden :)

Firefox forsøger at lave et HTTP request til "" , dvs. samme side, og kører derfor dit script en gang til.
Avatar billede windcape Praktikant
29. december 2006 - 01:16 #25
tak for points, og godt nytor

<:o)-
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester