2013-06-01 6 views
5

Mam skrypt cli php, który jest wykonywany za każdym razem, gdy wiadomość e-mail dotrze pod konkretny adres.Czy skrypt php będzie czekał, jeśli chce odczytać z zablokowanej tabeli?

Po nadejściu nowej wiadomości e-mail zostanie wykonane nowe wystąpienie skryptu, ale ponieważ odczytuje/zapisuje do tych samych tabel DB, czasami zapisywane są nieprawidłowe dane.

Moje pytanie brzmi, czy pierwszy skrypt blokuje wszystkie potrzebne tabele i czy jest uruchamiana druga/trzecia itd. Skryptu, czy będą czekać na odblokowanie tabel przez pierwszy wykonany skrypt? Jeśli tak, to jak długo?

W końcu staram się, aby skrypty wykonywały swoje zapisy/zapisy jeden po drugim w sposób seryjny, aby uniknąć powielania i błędów.

+0

Należy podać konkretne przykłady, sposób implementacji bazy danych i to, co dokładnie jest napisane na db i jak. również "błędne dane są zapisywane" proszę określić. – Sharky

Odpowiedz

3

Tak, będzie czekać. Odbywa się to przez serwer bazy danych, aplikacja kliencka jest całkowicie nieświadoma tego, co się dzieje - o ile jest to możliwe, baza danych po prostu powoli robi zapytanie.

0

Skrypt PHP wykorzystuje bibliotekę mysql (mysql, mysqli, pdo), która jak każdy klient mysql łączy się z serwerem mysql i zleca wykonanie zapytania. Serwer mysql może zająć cały czas, jaki chce.

Jednak PHP można ustawić tak, aby całkowity czas wykonania skryptu (z uwzględnieniem dowolnego zapytania mysql) był ograniczony. Jeśli ten limit zostanie przekroczony, PHP zabije uruchomiony proces. Maksymalny czas wykonania wynosi domyślnie 30 sekund, a dla cli nawet 300 sekund, jeśli się nie mylę. Możesz ustawić to w pliku php.ini. Możesz nawet ustawić maksymalny czas wykonania CLI na nieograniczony.

+2

Kwerendy bazy danych nie są uwzględniane w czasie wykonywania, z wykorzystaniem systemów operacyjnych Windows. Zobacz notatkę na stronie podręcznika: http://php.net/manual/en/function.set-time-limit.php – Nanne

Powiązane problemy