Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedostojen ryhmäpoisto

Sivun loppuun

pistemies [20.04.2004 18:23:38]

#

Miten kannattaisi toteuttaa tiedostojen poisto, kun niitä on useita kymmeniä, jopa satoja? Yritin poistaa for-loopissa, mutta ei onnistunut.

tkarkkainen [20.04.2004 19:18:28]

#

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ä.

pistemies [20.04.2004 20:02:59]

#

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ää.

tkarkkainen [20.04.2004 21:12:49]

#

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?

pistemies [21.04.2004 09:28:32]

#

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".

ajv [21.04.2004 20:31:02]

#

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].

pistemies [21.04.2004 20:57:49]

#

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:

$file=file("ahaa.txt");
for($i=0;$i<count($file);$i++)
{
  echo $file[$i];
}

T.M. [21.04.2004 21:01:32]

#

Voiskohan tästä olla apua:
https://www.ohjelmointiputka.net/koodivinkit/24019-php-hakemistoskanneri

ajv [21.04.2004 21:26:11]

#

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...

pistemies [21.04.2004 21:56:24]

#

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!

Meitsi [22.04.2004 17:51:42]

#

[offtopic]
Kysyn vaan että mitä oikein poistelet kun on noin paljon tavaraa poistettavana?
[/offtopic]

pistemies [22.04.2004 20:41:32]

#

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 :)

NiLon [26.04.2004 02:14:10]

#

Tuollainen voisi tulla tarpeeseen joskus :)

Edit: Itseasiassa jos olet halukas jakamaan niin minulle kelpaisi.

pistemies [27.04.2004 22:09:37]

#

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.

NiLon [27.04.2004 22:13:33]

#

No en minä sitä kyllä maksamaan rupea.


Sivun alkuun

Vastaus

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

Tietoa sivustosta