2012-11-13 10 views
14

Jeśli używam Ctrl + C aby wyjść skrypt PHP uruchomiony w CLI, ani funkcji zamykania, ani destruktory z instancji obiektów, ani bufor wyjściowy jest obsługiwany. Zamiast tego program po prostu umiera. To prawdopodobnie dobrze, ponieważ tak właśnie powinno być. Ale czy istnieje sposób, aby to zmienić? Czy można wymusić Ctrl C przejść przez funkcje wyłączania?destruktory i funkcje wyłączania gdy opuszczające przez Ctrl + C w PHP-CLI

Mówiąc dokładniej, chodzi o szeregowanie i zapisywanie danych po wyjściu ze skryptu, aby można go było ponownie załadować i wznowić przy następnym uruchomieniu skryptu. Okresowe zapisywanie danych może działać, ale nadal będzie tracić wszystko, począwszy od ostatniego zapisu. Jakie są inne opcje?

+0

Czy rozważałeś wykonanie Ctrl + Z? Nie wiem, czy to działa z PHP czy nie ... – Brad

+0

Nie jestem pewien, co powinien zrobić Ctrl + Z. Po prostu wypróbowałem to i nie wydaje się, aby cokolwiek zrobić, poza tym, że znak^Z pojawi się przy następnym wyświetlonym pytaniu (czy to jest 'fgets (STDIN)' lub nowy monit po Ctrl + C) –

+0

Nie zrobiłem PHP CLI od jakiegoś czasu, ale czy istnieje sposób na okresowe wyłapywanie wejścia CLI i słuchanie określonego polecenia "kill", a następnie inicjowanie dekonstruktora? Możesz również ustawić flagę "zabij" w pliku konfiguracyjnym skryptu i rutynowo sprawdzać tę flagę. –

Odpowiedz

10

Oczywiście jest PCNTL * nix tylko, ale ... Można zarejestrować teleskopowe dla wszystkich poszczególnych sygnałów bardziej niezawodne rozwiązanie, ale konkretnie coś zrobić, gdy CTL + Występuje przerwanie C:

<?php 
declare(ticks = 1); 

pcntl_signal(SIGINT, function() { 
    echo "Caught SIGINT\n"; 
    die; 
}); 

while (true) { 
    // waiting for your CTRL+C 
} 
+0

Ah, powinienem był wspomnieć, że jestem na Windowsie ... –

+1

Doh! Bill Gates cię nienawidzi! Nie jestem świadomy żadnego sposobu osiągnięcia tego w oknach ... – rdlowrey

Powiązane problemy