Käytössäni on .php systeemi, jossa on käytössä tekstitietokanta.
Kannan sisältö on seuraavanlainen:
GROUP;hakemisto1;hakemisto2;hakemisto3
NAME;1;kuvan nimi(ilman tyyppiä);
PIC1;kuvat/hakemisto1/hakemisto2/hakemisto3/
END;
Kysymykseni kuuluukin seuraavanlaisesti:
Miten saisin ko. tietokantaan lisättyä hakemistosta1, kaikki alihakemistot ja kuvat
oikeille paikoilleen ko. tietokantaan ?
Käsin syötettynä aikaa menisi useita tunteja. Alihakemistoja on n.30 kpl, ja kuvia
per/hakemisto n. 50 kpl
Vinkkejä otetaan vastaan, kun kuitenkin oppia samalla
halutaan :=)
Mikäs tuolla oli vikana?
http://mureakuha.com/keskustelut/2?11174
Olenko edes lähelläkään totuutta ? Toki tämäkää ei toimi...
<?php $filename ="admin/databases/tietokanta.csv"; if (file_exists($filename)) unlink ($filename); foreach(glob("hakemisto/") as $hakemisto){ foreach(glob($hakemisto."*.jpg") as $kuva){ echo $kuva; } } $content = "GROUP;hakemisto;\"$hakemisto\";\"$hakemisto\"; NAME;1;\"$kuva\"; PIC1;\"$kuva\"; END; "; $tt = fopen("admin/databases/tietokanta.csv", "a") or exit("Tiedoston avaus ei onnistunut!"); fwrite($tt, $content); fclose($tt); ?>
Sun täytyy hoitaa se kirjoitus teksitiedostoon tuolla silmukassa, missä tuo echo $kuva sijaitsee. Siellä on sen takia tulostus, että sen perusteella näät toimiiko nuo silmukat oikein. Kun saat nuo silmukat toimimaan, niin mieti sitten vasta sitä tiedostoon kirjoittamista.
Ja en voi mitään, mutta nään aina punaista, kun näitä ongelmia ratkotaan kahdessa paikassa. Vähän ajan päästä joku toinen koodari kirjoittaa sinulle samat ohjeet tuonne kuhaan. Ei näin.
ok. Onkos tuo foreach- kohta kuitenkin oikein ? Eli suunta
on kohdallaan ?
Tällä pääsin taas eteen päin, mutta... Se looppi...
foreach(glob("hakemistonnimi/") as $hakemisto){
$polku = "$hakemisto";
foreach(glob($hakemisto."*.jpg") as $kuva){
$tuote = "$kuva";
}
}
$content = "GROUP;hakemistonnimi;$polku;
NAME;1;$tuote;
PIC1;$tuote;
END;
";
$tt = fopen("admin/databases/tietokanta.csv", "a") or exit("Tiedoston avaus ei onnistunut!");
fwrite($tt, $content);
fclose($tt);
Mitä siitä loopista? Toimiiko se jo? Jätin sen tuolla kotitehtäväksi selvittää toimiiko se. Ja suunnasta... Vertauskuvallisesti: jos ajatellaan että olet Helsingistä menossa Turkuun, niin nyt olet kyllä menossa jonnekkin Porin suuntaan aikamoista kärrypolkua pitkin... :)
hmmm...
printillä tuo tulosti kaikki kylläkin näytölle:
foreach(glob("hakemistonnimi/") as $hakemisto){
print "$hakemisto\n";
foreach(glob($hakemisto."*.jpg") as $kuva){
print "$kuva\n";
joten looppi lienee toimii, ainakin tuossa kohtaan ?
Noniin, eli sitten kannattaisi yrittää vaikka muodostaa noista kuvista ja hakemistoista sellanen rivi, kun haluat sinne tiedostoon kirjoitettavan:
<?php $hakemistot = NULL; $kuvat = NULL; foreach(glob("hakemistonnimi/") as $hakemisto){ // huomaa .= -operaattori, jolla voi lisätä merkkejä merkkijonon perään $hakemistot .= $hakemisto.';'; foreach(glob($hakemisto."*.jpg") as $kuva){ $kuvat .= $kuva.';'; } } echo $hakemistot; echo $kuvat; ?>
Ollaan menossa jo Rauman suuntaan. Tosin tuo tietokantarakenteesi näyttää aika ihmeelliseltä....
tämmöstä kokeilin ja taas eteni, toki nyt täytyy lähtee töihin :=(
$hakemistot .= 'GROUP;hakemistonnimi;'.$hakemisto.';';
Tällaisella lähti toimimaan, ja joo, enpä sitä itse ratkaissut :=(
<?php function rglob( $sDir, $sPattern, $nFlags = NULL ) { $sDir = escapeshellcmd($sDir); $aFiles = glob("$sDir/$sPattern", $nFlags); foreach( glob( "$sDir/*", GLOB_ONLYDIR ) as $sSubDir ) { $aSubFiles = rglob( $sSubDir, $sPattern, $nFlags ); $aFiles = array_merge( $aFiles, $aSubFiles ); return $aFiles; } $tt = fopen( "admin/databases/tietokanta.csv", "a" ) or exit( "Tiedoston avaus ei onnistunut!" ); foreach( rglob( "*", "*.jpg" ) as $kuva ) { $content = sprintf( "GROUP;%s;\nNAME;1;%s;\nPIC1;%s;\nEND;\n", dirname( $kuva ), basename( $kuva, ".jpg"), $kuva ); fwrite( $tt, $content ); } fclose($tt); ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.