Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:n file_exists() ja is_dir() toimivat väärin Windowsissa

masse [09.10.2010 11:30:52]

#

Minkä takia id_dir() ja file_exists() funktiot antavat väärän tuloksen silloin kun käyttää PHP:tä Windowsilla? Kun kokeilin vastaavaa Linux-palvelimella mihin kotisivut lopulta tulevat, toimii funktiot oikein.

Ensimmäisessä esimerkissä tutkitaan onko "images"-nimistä kansiota olemassa ja toisessa tutkitaan onko "images......."-nimistä kansiota olemassa.

Kansio "images" on oikeasti olemassa.

<?php

header("Content-Type: text/plain");

$file = 'images/';

if (file_exists($file)) {
  echo "file $file exists\n";
  if (is_dir($file)) {
    echo "dir $file exists\n";
  }

}

antaa tulokseksi seuraavat rivit:

file images/ exists
dir images/ exists

Seuraavassa esimerkissä muuttujan arvo on seuraava: $file='images.......';

<?php

header("Content-Type: text/plain");

$file = 'images.......';


if (file_exists($file)) {

  echo "file $file exists\n";

  if (is_dir($file)) {
    echo "dir $file exists\n";
  }


}

Tämä antaa seuraavan tuloksen:

file images....... exists
dir images....... exists

Minkä takia tämä ilmoittaa että kansio "images......." on olemassa? Onko kyse jostakin bugista tai ominaisuudesta jossakin? Ainoastaan "images" kansio on olemassa, kansiota "images......." ei ole.

Teuro [09.10.2010 11:37:56]

#

php.net on sitä mieltä, että funktio palauttaa toden sekä tiedostosta että hakemistosta.

masse [09.10.2010 11:41:03]

#

Onkohan tämä Windowsin ominaisuus kun esim. yrittää tehdä uutta kansiota komentorivillä esim. seuraavasti

mkdir images...

niin Windows ilmoittaa että kansio on jo olemassa, vaikka ainoastaan "images" kansio on oikeasti olemassa?

Teuro [09.10.2010 11:53:19]

#

Melko varmasti pisteet lopusta jätetään kylmästi lukematta.

Lebe80 [09.10.2010 11:59:40]

#

masse: arvatenkin juuri samasta syystä windows-ympäristössä hakemistojen ja tiedostojen nimen kirjaimien koolla ei ole merkitystä. Asia on vain opeteltava ottamaan huomioon ohjelmoitaessa.

Grez [09.10.2010 12:54:56]

#

Niin, tämähän juontaa juurensa FAT16-levyjärjestelmään, jossa tiedoston nimessä saattoi olla vain yksi piste ja sitä ennen 8 merkkiä ja sen jälkeen 3 merkkiä. Koko nimi tallennettiin 11 merkin pituiseen tilaan. Eli ei ollut varsinaisesti keinoa erottaa oliko tiedoston nimen lopussa piste vai ei.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta