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.
$file = 'tiedotsto.ece';
$filu = stristr($file, '.');
hah.. noin varmaan
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.
Tähän on PHP:ssä myös valmis funktio, basename.
Edit: jaa, T.M. on aina oikeassa, tuli hieman hätäsesti vilkastua.
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...
pathinfo taitaisi hoitaa homman.
Nopeustesti kirjoitti:
substr / strrpos :
Keskimäärin 54902 kierrosta per sekuntipathinfo / basename :
Keskimäärin 13434 kierrosta per sekuntiarray_reverse / explode / basename :
Keskimäärin 8380 kierrosta per sekunti
Näyttää siltä että tuo minun esittämäni tapa on se paras tapa. :D
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.?
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? :)
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.