Nagłówki nie zadziała (są nagłówki, więc oni przychodzą pierwszy)
ja nie znam żadnego sposobu, aby zakończyć połączenie http bez zakończenia skryptu, choć przypuszczam jest jakiś niejasny sposób robienia tego.
Poinformowanie nas, co chcesz zrobić po złożeniu wniosku, pomoże nam przedstawić lepsze sugestie.
Ale ogólnie, będę myśleć o jedną z następujących czynności:
1) Wykonaj jakiś prosty skrypt wiersza polecenia (przy użyciu exec()), która wygląda następująco:
#!/bin/sh
php myscript.php <arg1> <arg2> .. <argN> &
następnie zaczynał że się ze skryptu http związany jak:
<?PHP
exec('/path/to/my/script.sh');
?>
Lub:
2) Napisz anothe r program (prawdopodobnie ciągle działający demon lub tylko jakiś skrypt, który jest tak często używany) i sprawdź, w jaki sposób twój kod może przekazać mu instrukcje. Możesz mieć tabelę bazy danych, która działa w kolejce, lub spróbować, aby działała z płaskim plikiem jakiegoś rodzaju. Możesz również użyć skryptu sieciowego, wywołując komendę z wiersza polecenia, która spowoduje, że twój skrypt nieoczekiwany będzie kolejkowany do pracy.
Pod koniec dnia użytkownik nie musi chcieć, aby skrypt był wykonywany po żądaniu http. Zakładając, że używasz mod_php, oznacza to, że będziesz wiązał proces apache, dopóki skrypt się nie zakończy.
+1 Wspaniałe rozwiązanie! Dzięki za mądrość, której nie potrafili rozgryźć wszyscy jeźdźcy króla. –
Naprawdę fajny hak autorstwa Milana. Ale muszę się zastanawiać, co robisz, co wymaga przeżycia procesu serwera sieciowego po zakończeniu żądania webowego (z perspektywy klienta). Oczywiście mam nadzieję, że ta obrzydliwość nie zostanie tak bardzo skalowana! – timdev
Identyczne (do litery) do kodu na stronie podręcznika php powiązanego z odpowiedzią Lukmana, która została opublikowana dwa dni wcześniej. – GZipp