/ / Jak upewnić się, że dojście do pliku jest zamknięte, jeśli skrypt php przekroczy limit czasu? - php, buforowanie

Jak zapewnić, że uchwyt pliku zostanie zamknięty, jeśli skrypt php wygaśnie? - php, buforowanie

Mam wbudowany system buforowania w phpprzechowuje wyniki zapytania mysql w formacie xml. Blokuję pamięć podręczną podczas budowania, tworząc plik blokady z wyłącznym uchwytem do zapisu, a następnie usuwam go po zakończeniu tworzenia pliku pamięci podręcznej.

Jednak zdarzają się sytuacje, w których skrypt przekracza limit czasu lub zatrzymuje się w trakcie wykonywania, pozostawiając plik blokujący na miejscu, co powoduje, że podczas kolejnych uruchomień skryptu pamięć podręczna jest zawsze aktualizowana.

Próbowałem sprawdzić, czy plik jest liczbąminut i próbuję uzyskać wyłączny dostęp do zapisu do pliku, aby odświeżyć blokadę i rozpocząć wykonywanie, jednak wydaje się, że plik jest nadal otwarty z poprzednim uchwytem i nie mogę otworzyć nowego uchwytu, aby upewnić się, że bieżący proces jest jedynym jeden z dostępem i ponownie zablokuj plik.

Czy istnieje sposób, aby upewnić się, że jeśli skrypt zostanie zatrzymany w trakcie wykonywania, wszelkie otwarte uchwyty plików zostaną zamknięte, a zaangażowane pliki będą dostępne dla przyszłych procesów?

Dzięki

Odpowiedzi:

3 dla odpowiedzi № 1

Kiedy interpreter PHP kończy pracę, wywołuje fclose() na wszystko otwierać pliki, zwalniając w ten sposób wszelkie blokady. Może jeszcze nie znalazłeś odpowiedniego problemu.

Jeśli jednak musisz coś wyczyścić przed zakończeniem działania skryptu - użyj register_shutdown_function(). Zarejestrowana funkcja zostanie wywołana nawet wtedy, gdy skrypt zakończy się błędem.