Miten kannattaisi toteuttaa tiedostojen poisto, kun niitä on useita kymmeniä, jopa satoja? Yritin poistaa for-loopissa, mutta ei onnistunut.
No looppiahan siihen tarvitaan. Mutta kerros nyt ensin, että poistetaanko esim. kaikki tiedostot tietyn kansion sisältä, vai kysytäänkö poistettavat tiedostot käyttäjältä? Postaatko myöskin sen koodin jolla yritit, niin katsotaan olisiko siinä pahempia virheitä.
Minulla on tuo koodi toisella koneella, jossa ei ole nettiä, mutta se on jotenkin näin:
Txt-tiedostossa on hakemistojen nimiä allekkain tähän tapaan:
1000
1035
1038
1040
Hakemistoja on yhteensä yli 1000, joiden sisältä täytyy poistaa tiedostoja, osa niistä on noiden yllä mainittujen kansioiden sisällä, noita yllä olevia haen for-loopissa näin:
$dirs=file("config/index.txt"); for($i=0;$i<count($dirs);$i++) { $tili=explode("\n",$dirs[$i]); $pois="kirjat"; // yläkansio $k1="01"; // alin kansio unlink("$pois/$tili[0]/$k1/$tili[0].txt"; }
Kun kirjoitan täyden tiedostopolun, niin toimii, mutta tuossa ei toimi. Lisäksi tuo for pysähtyy eka-riville.
Ehkä joku saa tästä selvää.
Toiseksi: Kaikkia ei saa poistaa, muutama "title.txt" tulisi jättää.
Tuo explode näyttää minusta tähän aivan turhalta. $dirs[$i] sisältää tuossa kohdassa merkkijonon, jossa ei ole rivinvaihtoa, siispä explodea ei tarvita, ja kaikkien $tili[0] juttujen paikalle voit laittaa $dirs[$i]
Jos se kerran toimii täyden tiedostopolun kanssa, niin onkohan hakemistorakenteessa jotain vikaa? Löytyyhän tuo kirjat-kansio suoraan sen kansion alta, jossa tämä php-skripti on?
Ei toiminut tuollakaan konstilla. Siinä on kaksi vikaa:
echo $dirs[$i] tulostaa vain ekarivin.
Ja jos tuon for-silmukan saisi toimimaan, näin äkkiä mietittynä se antaa hakemistopoluksi seuraavaa:
kirjat/1000103510381040/vuosi.txt
eli hakemistonimeksi tulostuu koko tiedoston sisältö. Vai ymmärsinkö väärin?
Kopsaan tässä kohta tuolta toiselta koneelta virheilmoituksen, jonka tuo saa aikaan... hetki...
Tässä tämä errortulostus:
Warning: Unable to access kirjat/1000 /vuosi.txt in c:\ohjelmatiedostot\apache group\apache\htdocs\omat_ohjelmat\tyhjennys.php on line 40
Hakemistopolku on oikein, ei poista tiedostosta mitään.
echo $dirs[$i] tulostaa "1000".
Mikähän ton "config/index.txt":n sisältö oikeen on? Siis missä muodossa siellä on dataa?
Pekka Mansikka kirjoitti:
Ja jos tuon for-silmukan saisi toimimaan, näin äkkiä mietittynä se antaa hakemistopoluksi seuraavaa:
kirjat/1000103510381040/vuosi.txt
Miten se voi tuollaisen hakemistopolun antaa, jos $dirs[$i] tulostaa 1000? $tili[0]:han on sama asia kuin $dirs[$i].
Kyseisessä tiedostossa on 112 riviä, 112 hakemiston nimet, jotka sijaitsee "kirjat" hakemistossa. Niistä neljää lukuunottamatta hakemiston nimi on numeroina. Lisäksi noista hakemistoista yli 60:ssa hakemistossa on 12 hakemistoa nimillä 01-12 eli yhteensä yli 800 hakemistoa. Jokaisessa ei välttämättä ole tavaraa, mutta ohjelman voi tietääkseni estää pysähtymästä sitä herjaamaan, kun käyttää @ -maukua.
Toinen kysymyksesi: Vanhasta muistista muistelisin, että tiedoston voi tulostaa näin:
Voiskohan tästä olla apua:
https://www.ohjelmointiputka.net/koodivinkit/
Joo, tiedoston tulostaminen onnistuu juuri noin.
Jos ja kun et tuota koodia kovin usein varmaan läpi aja toteuttaisin sen hieman erilailla:
Tekisin funktion, joka lukee hakemistot läpi ja poistaa sieltä kaikki halutut tiedostot. Itelläni on tuommoinen vastaava funktio, jos kiinnostaa.
edit: No näköjään T.M. jo auttoikin...
ajv kirjoitti:
Jos ja kun et tuota koodia kovin usein varmaan läpi aja toteuttaisin sen hieman erilailla:
Tekisin funktion, joka lukee hakemistot läpi ja poistaa sieltä kaikki halutut tiedostot. Itelläni on tuommoinen vastaava funktio, jos kiinnostaa.edit: No näköjään T.M. jo auttoikin...
Kerran vuodessa, helmi-maaliskuun vaihteessa. Seuraavaan tyhjennykseen on reilusti aikaa :)
Kiitoksia, pitääpä tutustua noihin avuihin!
[offtopic]
Kysyn vaan että mitä oikein poistelet kun on noin paljon tavaraa poistettavana?
[/offtopic]
Kiitoksia pajon vinkeistä. Sain homman toimimaan hyvin muokkaamalla tuota T.M :n ehdottamaa funktiota omiin tarpeisiini sopivaksi. Se nyt säilyttää halutut tiedostot ja "rämpii" hakemistoja ja tiedostoja vielä pari polkua alempaa kuin alkuperäinen skripti.
Meitsi kirjoitti:
[offtopic]
Kysyn vaan että mitä oikein poistelet kun on noin paljon tavaraa poistettavana?
[/offtopic]
Olempa vaan värkännyt PHP:lla oman kirjanpito-ohjelman (ehkä ainoa sellainen suomessa). Laskee alvit eri verokantojen mukaan, luo tuloslaskelman ja taseen ym. ym.
Kokoa ohjelmalla on tällä hetkellä 412 kt :)
Tuollainen voisi tulla tarpeeseen joskus :)
Edit: Itseasiassa jos olet halukas jakamaan niin minulle kelpaisi.
NiLon kirjoitti:
Tuollainen voisi tulla tarpeeseen joskus :)
Edit: Itseasiassa jos olet halukas jakamaan niin minulle kelpaisi.
Minä haluan painottaa tuota sanaa joskus:
Ehkä tämä joskus on jaossa, mutta todennäköisesti ei ihan ilmaiseksi.
No en minä sitä kyllä maksamaan rupea.
Aihe on jo aika vanha, joten et voi enää vastata siihen.