Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
majcioszek
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 31 stycznia 2013, 16:13
Post
przez majcioszek » czwartek, 31 stycznia 2013, 16:16
Code: Zaznacz cały
<?php
$i=0;
foreach (glob("photo/*.*") as $filename)
{
$tab[$i]['nazwa'] = $filename;
$tab[$i]['rozmiar'] = filesize($filename);
$i++;
$num = $i;
}
$id = 0;
while($num>0)
{
$num--;
$mode = $tab[$id]['nazwa'];
$plik="foto.xml";
$czytanie=@fopen($plik,"r+");
$tekst="";
while(!feof($czytanie)) {
$tekst.=fread($czytanie,500);
}
$nowe_dane=" <galeria>
<foto>$mode</foto>
</galeria>";
fseek($czytanie,0);
fwrite($czytanie, $nowe_dane.$tekst);
fclose($czytanie);
$id++;
}
?>
Program odczytuje wszystkie nazwy plików z folderu "photo" a następnie zapisuje wyniki w pliku foto.xml
Lecz problem leży w tym, że za każdym włączeniem pliku nadpisuje wartość nowa d statym pliku nawet jeśli ma te same wartości.
Prosze o mała pomoc:D
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » czwartek, 31 stycznia 2013, 21:12
A co ma robić w tym nowym pliku? Rozumiem, że to problem, ale nie znam założenia.
majcioszek
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 31 stycznia 2013, 16:13
Post
przez majcioszek » czwartek, 31 stycznia 2013, 22:11
w pliku "foto.xml" ma wpisać wartość
Code: Zaznacz cały
<galeria>
<foto>photo/romek.jpg</foto>
</galeria>
i ją wpisuje dobrze.
romek.jpg = jest to plik ktory znajduje sie w folderze photo/
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » czwartek, 31 stycznia 2013, 22:58
Nie zrozumiałeś mojego pytania.
Napisałeś:
"Lecz problem leży w tym, że za każdym włączeniem pliku nadpisuje wartość nowa w starym pliku nawet jeśli ma te same wartości."
a jak ma być? jak otworzysz plik to ma dopisać tylko nowe?Gdy są te same ma nie nadpisać? Co ma w ogóle zrobić? Bo rozumiem, że to co napisałeś przed chwilą to już robi, ale jakie jest założenie poprawności. Dla jednego coś może być poprawne, dla drugiego już nie
majcioszek
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 31 stycznia 2013, 16:13
Post
przez majcioszek » czwartek, 31 stycznia 2013, 23:00
1.włączenie
Code: Zaznacz cały
<galeria>
<foto>photo/romek.jpg</foto>
</galeria> <galeria>
<foto>photo/photo.zip</foto>
</galeria> <galeria>
<foto>photo/index.php</foto>
</galeria>
2.drugie włączenie
Code: Zaznacz cały
<galeria>
<foto>photo/romek.jpg</foto>
</galeria> <galeria>
<foto>photo/photo.zip</foto>
</galeria> <galeria>
<foto>photo/index.php</foto>
</galeria> <galeria>
<foto>photo/romek.jpg</foto>
</galeria> <galeria>
<foto>photo/photo.zip</foto>
</galeria> <galeria>
<foto>photo/index.php</foto>
</galeria>
i tak dalej się powoduje
lordviader
Nowicjusz
Posty: 3 Dołączył(a): czwartek, 31 stycznia 2013, 23:03
Post
przez lordviader » czwartek, 31 stycznia 2013, 23:10
Witam.
Się wtrącę gdyż razem z Majcioszkiem kminimy nad tym problemem.
więc są 2 sprawy.
1)
powyższy kod generuje
Code: Zaznacz cały
" <galeria>
<foto>foty/Zdjęcie(10).jpg</foto>
</galeria> <galeria>
<foto>foty/PIC207.jpg</foto>
</galeria> <galeria>
<foto>foty/PIC206.jpg</foto>
</galeria> <galeria>
<foto>foty/PIC205.jpg</foto>
</galeria>
a nam zależy żeby wyraz "<galeria>" był na początku wszystkiego a "</galeria>" na samym końcu.
2)
żeby pliki nie były za każdym razem dopisywane ale po ponownym uruchomieniu nadpisane w całości
myslałem o kodzie który b zaczynał czyścić cały dokument przed wykonaniem reszty
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » czwartek, 31 stycznia 2013, 23:54
Code: Zaznacz cały
<?php
$i=0;
foreach (glob("photo/*.*") as $filename)
{
$tab[$i]['nazwa'] = $filename;
$tab[$i]['rozmiar'] = filesize($filename);
$i++;
$num = $i;
}
$id = 0;
$nowe_dane ="<galeria>";
while($num>0)
{
$num--;
$mode = $tab[$id]['nazwa'];
$plik="foto.xml";
$czytanie=@fopen($plik,"r+");
$tekst="";
while(!feof($czytanie)) {
$tekst.=fread($czytanie,500);
}
$nowe_dane .="
<foto>$mode</foto>
";
$id++;
}
$nowe_dane .="</galeria>";
fseek($czytanie,0);
fwrite($czytanie, $nowe_dane.$tekst);
fclose($czytanie);
?>
lordviader
Nowicjusz
Posty: 3 Dołączył(a): czwartek, 31 stycznia 2013, 23:03
Post
przez lordviader » piątek, 1 lutego 2013, 00:08
Działa
Jesteś naprawdę zajebisty w tym co robisz.
Naprawdę wielkie dzięki
uratowałeś mi tym tyłek.
A jeszcze jakbyś dał radę wykminić jak zrobić by nie dodawał za każdym razem danych tych samych. Tylko by nadpisywał już istniejący plik albo czyścil go na samym początku to byłby już szczyt wszystkiego
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » piątek, 1 lutego 2013, 02:04
Musisz wykorzystać inny tryb otwarcia zamiast r+ skorzystaj z w+.
lordviader
Nowicjusz
Posty: 3 Dołączył(a): czwartek, 31 stycznia 2013, 23:03
Post
przez lordviader » piątek, 1 lutego 2013, 10:08
Morfidon napisał(a): Musisz wykorzystać inny tryb otwarcia zamiast r+ skorzystaj z w+.
No i również działa
. Normalnie mistrz jesteś
pozdrawiam i bardzo Ci dziękuję