[PHP]Directory uitlezen

Pagina: 1
Acties:

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
Ik heb een scriptje gemaakt, wat van een directory alleen de subdirs moet weergeven. Het werkt alleen niet helemaal zoals het hoort, ik krijg alleen de . en .. directory te zien, terwijl er wel een andere subdir in die folder staat. Dit is mn code, iemand een idee wat er mis is?
PHP:
1
2
3
4
5
6
7
<?php
if ($handle = opendir("Images/fotos/")) {
    while (false !== ($file = readdir($handle))) {
        if (is_dir($file)) 
            echo "$file<br>";}
    closedir($handle);}
?>

Wat ook raar is, is dat als ik ipv is_dir is_file gebruik (wat dus een lijstje met de bestanden moet geven), dan krijg ik helemaal niks te zien :?

Verwijderd

Dr_Frickin_Evil schreef op 29 september 2002 @ 15:28:
false !== ($file = readdir($handle))
Wat is dit voor vreselijk rare constructie :? Je bedoelt gewoon $file = readdir($handle) neem ik aan?

edit: Met de is_dir moet je wel de directorynaam ervoor plakken anders kijkt hij in de huidige directory is_dir("Images/fotos/".$file) dus :)

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
dit komt rechtstreeks uit het php.net manual. Volgens dat manual was dit de betere constructie.

aha idd, dat werkt, thx man.

Verwijderd

Ik vind hem nog al false != true != false != true achtig. Maar zie ook mijn edit :)

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
maar die regel komt er toch op neer dat $file gelijk is aan readdir($handle) mits readdir($handle) geen false returned?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Jahoor, maar wat is het verschil tussen
while(false !== ($file = readdir($handle)))
en
while($file = readdir($handle))

Bij mijn weten doet dat hetzelfde namelijk.
Ken een waarde toe aan $file en check of $file "niet false" is :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Gebruik, nooit, nooit, maar dan ook echt nooit een constructie als 'niet false'. De menselijke geest is hier om een of andere reden niet helemaal tegen op gewassen. In triviale stukje code gaat het misschien goed, maar je gaat er absoluut een keer mee in de fout. Niet false is gewoon true.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
ik meen dat ze deze constructie gebruiken voor het geval dat je een directory hebt die "False" heet. Zal niet vaak voorkomen, maar toch... Kan dat de reden zijn?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

!== is wat anders dan != mbravenboer ;)
Dat is het grootste verschil in de code tussen de twee while loops.

!= -> evalueert tot false (0, "" en meer van dat soort geintjes dus ook)
!== -> is het een boolean met de waarde 'false'

Maar imho is het in dit geval wel te rechtvaardigen dat je niet expliciet checkt of er een boolean uitkomt, en ja er had ook while(true === (...)) kunnen staan.
Dr_Frickin_Evil schreef op 29 september 2002 @ 15:46:
ik meen dat ze deze constructie gebruiken voor het geval dat je een directory hebt die "False" heet. Zal niet vaak voorkomen, maar toch... Kan dat de reden zijn?
Dat lijkt me niet, een string met een waarde evalueert altijd naar true bij mijn weten.

Simpel testje:
PHP:
1
2
3
4
5
6
<?
if("false")
echo "true";
else
echo "false";
?>

Levert iig true als output op :)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

ACM schreef op 29 september 2002 @ 15:47:
!== is wat anders dan != mbravenboer ;)
Dat is het grootste verschil in de code tussen de twee while loops.
"!=" !== "!=="
"!=" == "!=="
:+

Localhost, sweet localhost


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ACM: !== -> is het een boolean met de waarde 'false'
Welja, we hebben een taal die een beetje rommelt met typen, dus voeren we typering in op operator niveau ;) .
er had ook while(true === (...)) kunnen staan.
Dat is inderdaad het punt van mijn opmerking.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
ik heb het nu aangepast, vond het zelf ook niet mooi eruit zien, thx voor de uitleg ed. Nu ik toch bezig ben, ik krijg nu weer een (mi) vage foutmelding met dit scriptje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$i=0;
if ($handle = opendir("Images/fotos/")) {
    while($file = readdir($handle)) {
        if (is_dir("Images/fotos/$file")&&($file!==".")&&($file!=="..")) {
            $dirlist[i]=$file;
            i++;}
        }
    closedir($handle);}
for(j=0;j=sizeof($dirlist);j++)
    echo "$dirlist[j];
?>

Mn browser geeft dan de melding "PHP Parse error: parse error, unexpected T_INC in c:\Inetpub\wwwroot\lighttown\bla.php on line 14 ". Wat is er fout met de i++ op die plaats? (line 14 is line 7 in de code hierboven)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

zucht....
i++ != $i++
i != $i

Wel zelf je fouten debuggen he?

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:15
:o uh...

(dees ken dicht)
Pagina: 1