/ / skrypt php dłuższy niż maksymalny czas wykonania (pasek postępu) - php, mysql, czas wykonania

skrypt php dłuższy niż maksymalny czas wykonania (pasek postępu) - php, mysql, czas wykonania

Obecnie pracuję nad małym projektem, w którym niektórzydane są gromadzone z sieci, a system tworzy między nimi pewne relacje. Oczywiście od samego początku nie był idealny, więc musiałem stworzyć skrypt, który aktualizuje wszystkie połączenia i relacje ze zaktualizowanymi skryptami, które stworzyłem.

Zasadniczo skrypt działa, ale ponieważ później będzie ładnie wyglądający backend, nie jest to naprawdę to, czego chcę.

Skrypt potrzebuje około 10 minut, a ponieważ janie chciałem po prostu ustawiać max_execution_time z php. Myślałem o innej metodzie. Zamiast wczytać 1000 wpisów na raz naraz, zmniejszyłem go do 200 na raz i po prostu powtórzę z następnymi 200, gdy zakończy się pierwsza runda. Dlatego użyłem php http_request. Po prostu pokazuję ci uproszczoną wersję skryptu:

require_once "HTTP/Request.php";
$max = $db->query("SELECT COUNT(id) as max FROM db_table");
$lower = $_POST["lower"] ? $_POST["lower"] : 0;
$plus = 250;
$entries = $db->query("SELECT * FROM db_table LIMIT {$lower},{$plus}");

foreach($entries as $entry){
DO SOME STUFF TO UPDATE THE RELATIONS BETWEEN THE DATA
}

$lower = $lower + $plus;

if($lower <= $max) {
$request = new HTTP_Request("path to the script");
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addPostData("lower", $lower);
$result = $request->sendRequest();
}

To jest to. Tak jak powiedziałem, działa, ponieważ jest to nowe żądanie, więc max_execution_time nie ma na niego wpływu. Ale przeglądarka właśnie ładuje się, ładuje i ładuje, a po pewnym czasie kończy. Ale oczywiście nie mogę wyświetlić odświeżonych danych dla czegoś takiego jak pasek postępu.

Widziałem wiele wpisów korzystających z php flush (), ale tonie działało dla mnie z powodu (chyba) głupiego sposobu, w jaki rozwiązałem swój problem. Jak byś to zrobił, gdybyś musiał zainstalować coś w przestrzeni sieciowej i nie masz możliwości zmiany maksymalnego czasu wykonania lub instalacji http_request?

Tak jak powiedziałem, powinien później wyglądać jak pasek postępu. Chyba muszę użyć ajax i po prostu przesunąć rundę, skrypt jest w każdej rundzie i zaktualizować pasek postępu za pomocą javascript.

Możesz mi pomóc?

Odpowiedzi:

0 dla odpowiedzi № 1

Nadal masz problemymax_execution_time, ponieważ strona żądana przez przeglądarkę internetową jest zawsze aktywna, nie kończy się do momentu zakończenia HTTPRequest. Spróbuj zlokalizować stronę na innej z parametrem niższym.

header("Location: myscript.php?lower=$lower");