Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: hakemistot ja tiedostopaatteet pois tiedostolistauksesta

Sivun loppuun

jideko [12.10.2004 18:36:47]

#

Eli miten saisin tiedostolistauksen nayttamaan vain tiedostot ilman paatteita ja etta listauksessa ei nakyisi myoskaan mitaan kansioita?
Nyt olen tehnyt pelkastaan noilla opendir ja readdir jutuilla.

Kiitoksia paljon jos joku pystyisi auttaa.

makeuu [12.10.2004 19:11:35]

#

$file = 'tiedotsto.ece';
$filu = stristr($file, '.');

hah.. noin varmaan

ajv [12.10.2004 19:30:31]

#

Tapoja on monia, mutta tässä yksi esimerkki tiedostopäätteen poistamiseksi:

<?php
function drop_extension($fname){
   $tmp = array_reverse(explode(".",$fname));
   return basename($fname, ".".$tmp[0]);
}

echo drop_extension("Foo.batbat.bat.battery");
?>

Sitten is_dir()-funktiolla saat selville onko kyseessä hakemisto.
EDIT: Pientä optimointia ;) En tiennyt, että basenamellakin saa poistettua tiedostopäätteen.

Tempfile [12.10.2004 19:39:49]

#

Tähän on PHP:ssä myös valmis funktio, basename.

Edit: jaa, T.M. on aina oikeassa, tuli hieman hätäsesti vilkastua.

T.M. [12.10.2004 20:04:34]

#

Basename ei poista tiedostopäätettä itsestään, se tiedostopääte pitää tietää jotta se katoaa siitä nimestä.

Tämän luulisi olevan paras tapa:

<?php
function drop_extension($tiedosto){
	return substr($tiedosto, 0, strrpos($tiedosto, "."));
}
echo drop_extension("Foo.batbat.bat.battery"); // Foo.batbat.bat
?>

Ellei tuohon ole jo valmista funktiota...

Metabolix [12.10.2004 21:35:49]

#

pathinfo taitaisi hoitaa homman.

T.M. [12.10.2004 23:17:07]

#

Nopeustesti kirjoitti:

substr / strrpos :
Keskimäärin 54902 kierrosta per sekunti

pathinfo / basename :
Keskimäärin 13434 kierrosta per sekunti

array_reverse / explode / basename :
Keskimäärin 8380 kierrosta per sekunti

Näyttää siltä että tuo minun esittämäni tapa on se paras tapa. :D

jideko [14.10.2004 22:25:06]

#

Noniin, sain nuo tiedostopaatteet katoamaan.

Mutta en tuota hakemisto/kansio juttua ymmatanyt.
Kun teen tiedostolistauksen niin siihen ylimmaksi tulee ne pistesysteemit, joita en kaipaa. Eli miten saan ne katoamaan.
Niin ja viela semmoinen kysymys etta miten saisin listauksen kaannettyyn jarjestykseen. Eli aa:lla alakava tiedostonimet olisivat viimeisena jne.?

Blaze [14.10.2004 22:31:29]

#

jideko kirjoitti:

Niin ja viela semmoinen kysymys etta miten saisin listauksen kaannettyyn jarjestykseen. Eli aa:lla alakava tiedostonimet olisivat viimeisena jne.?

Ne lienevät taulukossa? array_reverse() tai sitten yksinkertaisesti printatessa looppaat taulukon väärinpäin läpi. Eli for($i = count($taulukko); $i = 0; $i--)

Tuleeko nimimerkki "jideko" muuten Dejikosta? :)

ajv [15.10.2004 01:16:04]

#

jideko kirjoitti:

Kun teen tiedostolistauksen niin siihen ylimmaksi tulee ne pistesysteemit, joita en kaipaa. Eli miten saan ne katoamaan.

Laitat siihen loopin ekalle riville tuon is_dir()-funktion (tai jonkun muun systeemin jolla tunnistat hakemiston)

while($fname = readdir($a)){
   if(is_dir($fname)) continue;
   //ja sitten jatkat omaa koodiasi
}

Tuo continue tavallaan jättää suorittamatta sen hetkisen kierroksen. Tai siis hyppää loopin alkuun ja jatkaa seuraavasta (tässä tapauksessa) tiedostosta. Äh, vaikee selittää, toivottavasti tajusit.
Ps. Kannattaa tutustua myös glob()-funktioon.


Sivun alkuun

Vastaus

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

Tietoa sivustosta