Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze skasowaniem pliku
Forum PHP.pl > Forum > PHP
squasher
Witam,

Mam problem ze skasowaniem pliku graficznego. Sytuacja wygląda następująco:

program składa się z dwóch plików php. W pierwszym z nim wykonaj.php znajduje się kod:

echo '<IMG SRC="rysujobrazek.php">';
unlink( 'obrazek.png' );

drugi plik rysujobrazek.php który jest w funkcji IMG jak sama nazwa wskazuje rysuje obrazek i robi kilka rzeczy. Między innymi zapisuje ten obrazek do pliku obrazek.png

Problem w tym ze funkcja unlink() wykonuje się szybciej niz skrypt rysujobrazek.php jest w stanie stworzyć ten plik. Jak zmusić php aby poczekało na wykonanie się w całości skryptu rysujobrazek.php a dopiero po tej czynności wykonało kasowanie pliku.

Pozdrawiam.
Fifi209
Google -> callback
ADeM
Nie zadziała usuwanie grafiki, w pliku rysujobrazek.php, po wysłaniu go do przeglądarki?
squasher
FIFI209:
szukam callback'a po googlu. Znalazłem troszkę interesujących informacji o funkcji call_user_func() jednak nie zabardzo orientuję się jak te dwa pliki połączyć ze sobą.

ADEM:
Nie chciałbym zmieniać niczego w pliku rysujobrazek.php ponieważ usuwanie tego obrazka będzie wykonywane dosyć sporadycznie.
Crozin
Skoro jedyne co chcesz zrobić to wyświetlić ten obrazek użytkownikowi... po co go w ogóle zapisujesz na dysku?
squasher
Zapisuję go gdyż, plik rysujobrazek.php sprawdza czy obrazek.png istnieje. Jeśli tak to sprawdza czas utworzenia go. Jeśli ten czas jest większy niż 30 min tu rysuję nowy obrazek, a jeżeli nie to otwieram obrazek z pliku.

Teraz jeśli użyję wyżej wymienionej funkcji <IMG SRC....> zawsze wygeneruje się nowy obrazek który niekoniecznie jest taki jaki mi odpowiada. Muszę go więc skasować (wtedy odrazu rysujobrazek.php wygeneruje nowy dobry obrazek), albo czekać 30 minut. Nie chcę aby przez 30 minut był wyświetlany obrazek który może zawierać błędy.
ADeM
Może to przez wzgląd na godzinę, ale nie potrafię zrozumieć o co Ci chodzi. Możesz podać swój kod i powiedzieć co chcesz osiągnąć?
squasher
Poradziłem sobie inaczej.

echo '<IMG SRC="rysujobrazek.php?niezapisuj=1">';
unlink( 'obrazek.png' );

przekazałem jako parametr pliku rysujobrazek.php?niezapisuj=1.

Chciałem tego uniknąć gdyż niepotrzebne mi jest sprawdzanie czy ma zapisywać czy też nie.

Założenie było inne:
rysujobrazek.php zapisuje plik obraz.png zawsze wtedy gdy:
1) nie ma pliku obrazek.png (jest skasowany)
2) plik obrazek.png jest ale starszy niż 30 minut.
(czyli dokonują się wszystkie niezbędne sprawdzenia)

jeśli wykonam tą linię :
echo '<IMG SRC="rysujobrazek.php">';
w momencie gdy pliku obrazka nie ma na dysku to zostanie on utworzony.

I teraz:
Do następnego odświeżenia trzeba czekać więc 30 minut.
Ja nie chcę tyle czekać więc chcę skasować ten plik, aby kolejne wywołanie <IMG SRC="rysujobrazek.php"> utworzyło świeży obrazek.
Dla wyjaśnienia kolejne wywołania odbywają się cyklicznie z innych plików php.
fander
A nie możesz zrobić tak

obrazek.php
  1. echo "<img src="rysuj.php" />


rysuj.php
  1.  
  2. if(filemtime("obrazek.png")+30 >= time()+30*60*60){
  3. unlink("obrazek.png");
  4. wyslijnowyobrazek();
  5. }else{
  6. wyslijstaryobrazek();
  7. }
  8.  
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.