/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
problem med is_dir()
Fra : ndlarsen


Dato : 01-10-08 11:53

Hej.

Jeg har en mindre problem med is_dir(). Når jeg kører to næsten
identiske scripts fra to forskellige mapper, mod samme mappe, får jeg to
forsekllige resultater.Den eneste forskel mellem de scripts er en
variabel som indeholder stien til mappen de kører mod.

De pågældende scripts kan findes her:

http://ionline.dk/test/test1.php
http://ionline.dk/test/files/test2.php

De pågældende scripts indhold:

http://ionline.dk/test/test1.php:

<html>
<head>
<title></title>
</head>
<body>
<?php
$dir = getcwd() . '/files' ;
echo '<h1>Listing content of ' . $dir . '</h1>' . "\n";
echo '<table><tr><td>file</td><td>is_dir()</td></tr>' . "\n";
$dir = dir($dir);
while(false !== ($entry = $dir->read())){
if($entry != 'index.php')
echo
'<tr><td>'.$entry.'</td><td>'.is_dir($entry).'</td></tr>'."\n";
}
$dir->close();
echo '</table>'
?>
</body>
</html>


http://ionline.dk/test/test1.php:

<html>
<head>
<title></title>
</head>
<body>
<?php
$dir = getcwd();
echo '<h1>Listing content of ' . $dir . '</h1>' . "\n";
echo '<table><tr><td>file</td><td>is_dir()</td></tr>' . "\n";
$dir = dir($dir);
while(false !== ($entry = $dir->read())){
if($entry != 'index.php')
echo
'<tr><td>'.$entry.'</td><td>'.is_dir($entry).'</td></tr>'."\n";
}
$dir->close();
echo '</table>'
?>
</body>
</html>

Alle forslag til årsagen er velkomne.

Mvh.

 
 
Dan Storm (01-10-2008)
Kommentar
Fra : Dan Storm


Dato : 01-10-08 12:07

ndlarsen skrev:
> Hej.
>
> Jeg har en mindre problem med is_dir(). Når jeg kører to næsten
> identiske scripts fra to forskellige mapper, mod samme mappe, får jeg to
> forsekllige resultater.Den eneste forskel mellem de scripts er en
> variabel som indeholder stien til mappen de kører mod.

Den første af dem:
$dir = getcwd() . '/files' ;
echo '<h1>Listing content of ' . $dir . '</h1>' . "\n";
echo '<table><tr><td>file</td><td>is_dir()</td></tr>' . "\n";
$dir = dir($dir);
while(false !== ($entry = $dir->read())){
if($entry != 'index.php')
echo
'<tr><td>'.$entry.'</td><td>'.is_dir($entry).'</td></tr>'."\n";
}
$dir->close();

Du tjekker med is_dir($entry), men du er jo ikke i
/customers/ionline.dk/ionline.dk/httpd.www/test/files (som er den mappe
du looper igennem)
Du er i /customers/ionline.dk/ionline.dk/httpd.www/test

Så du spørger faktisk om bibliotekerne i test/files er et bibliotek i
test mappen.

Har du tilfældigvis en tmp mappe i begge mapper?


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

ndlarsen (01-10-2008)
Kommentar
Fra : ndlarsen


Dato : 01-10-08 13:41

Dan Storm wrote:
> Du tjekker med is_dir($entry), men du er jo ikke i
> /customers/ionline.dk/ionline.dk/httpd.www/test/files (som er den mappe
> du looper igennem)
> Du er i /customers/ionline.dk/ionline.dk/httpd.www/test

Korrekt.

> Så du spørger faktisk om bibliotekerne i test/files er et bibliotek i
> test mappen.

Så det er en forudsætning at cwd er samme mappe man itererer over? Hvis
i så fald fremgår der meget ringe af documentationen...

> Har du tilfældigvis en tmp mappe i begge mapper?

Ja, det havde jeg.

Tak for dit svar.

Mvh.

Dan Storm (01-10-2008)
Kommentar
Fra : Dan Storm


Dato : 01-10-08 13:51

ndlarsen skrev:
> Så det er en forudsætning at cwd er samme mappe man itererer over? Hvis
> i så fald fremgår der meget ringe af documentationen...

Nej, du misforstår;

getcwd() giver dig den aktuelle aktuelle sti.
Du tilføjer så "/files" til getcwd, men du er stadig i ./
Så når du skriver is_dir($entry) indeholder $entry kun et fil eller
mappenavn. Ikke den absolutte sti.

Så i virkeligheden bør du skrive is_dir($dir."/".$entry) for at få det
ventede resultat.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

ndlarsen (01-10-2008)
Kommentar
Fra : ndlarsen


Dato : 01-10-08 14:01

Dan Storm wrote:
> Nej, du misforstår;

> getcwd() giver dig den aktuelle aktuelle sti.
> Du tilføjer så "/files" til getcwd, men du er stadig i ./
> Så når du skriver is_dir($entry) indeholder $entry kun et fil eller
> mappenavn. Ikke den absolutte sti.

> Så i virkeligheden bør du skrive is_dir($dir."/".$entry) for at få det
> ventede resultat.

Oooh ja, det er rigtigt. read() returnerer jo ikke den fulde sti, kun
filnavn.

/me trænger til frisk luft

Jeg takker.

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste