Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzenie czy xml jest zapisywany i ponowna próba
Forum PHP.pl > Forum > PHP
a79rtur
witam
pewne skrypty tworza pliki xml na serverze, inny skrypt odczytuje niektóre z xmli, czasem (podejrzewam ze gdy xml jest zapisywany) skrypt odczytujacy zwraca blad ze xml jest niepoprawny. czy moje podejrzenia sa sluszne ? czy xml jest zapisywany "od razu" czy w kawalkach ? czy mozna jakos sprawdzic czy plik jest zapisany poprawnie i w calosci i jesli nie to odczekac i spróbowac ponownie?
erix
Najprościej weryfikując rozmiar.

Pliki zapisywane są strumieniowo, paczkami wg rozmiaru bufora.
a79rtur
czyli jak to moge zrobic ? moge prosic o jakis przyklad
dr_bonzo
Masz cos takiego jak flock" title="Zobacz w manualu PHP" target="_manual. Blokuje ci dostep do pliku na czas odczytu/zapisu. poczytaj szczegoly w manualu.
erix
fopen" title="Zobacz w manualu PHP" target="_manual i później przechodzisz przez fseek" title="Zobacz w manualu PHP" target="_manual do pozycji będącej rozmiarem pliku - 1. Jeśli zwróci false, plik nie został w całości przesłany.

Tylko musisz znać rozmiar pliku.
a79rtur
to nie rozwiaze problemu, poniewaz nawet jesli przy zapisie zablokuje plik to musze jakos sprawdzic czy jest zablokowany. nie sadze zeby domxml->load() to sprawdzalo albo czekalo.
po drugie z tego co slyszalem flock() nie dziala na serverach za dobrze, bo gdyby dzialalo serwer mialby powazny problem z
nagromadzeniem zadan dostepu gdy ktos nie zwolni uchwytu
erix
Ale nie chodzi mi o to, abyś blokował. winksmiley.jpg
a79rtur
Cytat(erix @ 10.03.2009, 18:18:23 ) *
fopen" title="Zobacz w manualu PHP" target="_manual i później przechodzisz przez fseek" title="Zobacz w manualu PHP" target="_manual do pozycji będącej rozmiarem pliku - 1. Jeśli zwróci false, plik nie został w całości przesłany.

Tylko musisz znać rozmiar pliku.


no tak, ale skad go wziasc smile.gif ? pliki xml laduje za pomoca metody DOMXML->load()
dr_bonzo
DOM mozna wczytac ze stringa - a wiec mozesz uzyc flock() i ew. wyprintowac sobie ta czesc XMLa, ktora juz udalo sie odczytac (ta "bledna").
a79rtur
czyli filesize() sprawdzic rozmiar pliku, wczytac plik do stringu i porownac rozmiary ? czy aby napewno filesize() zwroci mi wlasciwy rozmiar pliku? czy tylko tyle ile jest w danej chwili zapisane ?
erix
Nie polecam filesize" title="Zobacz w manualu PHP" target="_manual, gdyż rozmiar pobiera z TOC systemu plików. Poza tym, wynik funkcji jest cache'owany, o czym można przeczytać w dokumentacji.

A może mieć miejsce sytuacja, że system alokuje niezbędny rozmiar docelowy, a zawartość pliku może być dopiero dopisywana. Dlatego piszę o fopen" title="Zobacz w manualu PHP" target="_manual+fseek" title="Zobacz w manualu PHP" target="_manual.
a79rtur
moglbys wstawic prosze kawalek kodu, bo nadal nie rozumiem jak moglo by mi to pomóc, w sytuacji gdzie interesuje mnie tylko wczytanie pelnego pliku.
erix
A jak otwierasz pliki w PHP? Otwierasz tak samo plik XML i sprawdzasz za pomocą fseek" title="Zobacz w manualu PHP" target="_manual konkretny offset (czyli w tym wypadku - rozmiar w bajtach). Jeśli zwróci false, to nie został kompletnie skopiowany.
a79rtur
no tak, ale skads musze wziasc ten offset

  1. <?php
  2. int fseek  ( resource $handle  , int $offset  [, int $whence  ] );
  3. ?>


pytanie, jaka funkcja?
erix
Cytat
pewne skrypty tworza pliki xml na serverze

Myślałem, że znasz offset. winksmiley.jpg

Skoro jest nieznany, to przychodzi mi tylko to jedyne na myśl. Zakładam, że dane są objęte np. tak:
Kod
<root>
</root>


to sprawdzenie wyglądałoby mniej więcej tak:
  1. <?php
  2. $valid = false;
  3. while(!feof($p)){
  4.    $l = fgets($p);
  5.    if(strpos($l, '</root>')!==false){
  6.      $valid = true;
  7.      break;
  8.   }
  9. }
  10. ?>
a79rtur
jest to jakies rozwiazanie. dzieki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.