Skrypt sprawdzający czy dana usługa jest jeszcze aktywna

0

Witam, robię skrypt, który sprawdza czy dana usługa jest dalej aktywna i mam takie pytanie czy dodanie jakiegoś js, który będzie odświeżał ten plik co kilka sekund jest prawidłowe, czy takie pliki "funkcyjne" mają jakieś specjalne funkcje w php?

Schemat na jakim działam wygląda tak:

//Baza danych przykład
['id'] = 1
['nazwa'] = test
['status'] = aktywny
['data'] = 06.04.2020 23:00:00
['data2'] = 07.04.2020 23:59:59

//plik php
session_start();
date_default_timezone_set('Europe/Warsaw');
try{
  $mysql = new mysqli($host, $user, $password, $db);
  if ($mysql->connect_errno!=0)
  {
    throw new Exception(mysqli_connect_errno());
  }
  else
  {
    unset($_SESSION['Status_error_db']);
    $rowR = $mysql->query("SELECT * FROM uslugi");
    if($rowR->num_rows > 0)
    {
      while($baza = $rowR->fetch_assoc())
      {
        $id = baza['id'];
        $nazwa_uslugi = $baza['nazwa'];
        $status = $baza['status'];
        $wygasa = $baza['data'];
        $usun = $baza['data2'];
        
        //Zmiana statusu na nieaktywny
        if(date("Y-m-d H:i:s") > $wygasa && date("Y-m-d H:i:s") < $usun)
        {
          if($mysql->query("UPDATE uslugi SET status='nieaktywne' WHERE id=1"))
          {
            echo "Zmieniono status";
          }
        }
        
        //Usunięcie usługi z bazy
        if(date("Y-m-d H:i:s") > $usun)
        {
          if($mysql->query("DELETE FROM uslugi WHERE id=1")
          {
          echo "Usunięto usługę";
          }
        }
      }
    }
  }
}catch(Exception $error){
  $_SESSION['Status_error_db'] = "Nie udało się połączyć z bazą danych";
}

1

A co miałoby powodować tą zmianę? Te "usługi" się mają same wyłączać czy czo?

0

W przyszłości po doładowaniu balansu na stronę, po zakupie usługi będzie się dodawał rekord do bazy wraz z datą jego wygaśnięcia. W tym samym czasie będzie się zmieniał inny rekord w tabeli dodając użytkownikowi dostęp do tej usługi i potrzebuję, aby w momencie wygaśnięcia usługi skrypt zmienił jej status na nieaktywną i po 3 dniach jak się nie odnowi ją usuną. Więc z tego co ja na obecną chwilę wiem o php, coś musi odświeżyć ten skrypt, aby zostało sprawdzone czy data się przestarzała czy nie i stąd też moje pytanie czy dodanie jakiegoś JS nie zamuli strony, przy odświeżaniu np. co 10sek albo 60sek.

Tego kodu, nic nie będzie wywoływać, on będzie takim "zapalnikiem" dla innych skryptów

0
Tamer- owski napisał(a):

W przyszłości po doładowaniu balansu na stronę, po zakupie usługi będzie się dodawał rekord do bazy wraz z datą jego wygaśnięcia. W tym samym czasie będzie się zmieniał inny rekord w tabeli dodając użytkownikowi dostęp do tej usługi i potrzebuję, aby w momencie wygaśnięcia usługi skrypt zmienił jej status na nieaktywną i po 3 dniach jak się nie odnowi ją usuną. Więc z tego co ja na obecną chwilę wiem o php, coś musi odświeżyć ten skrypt, aby zostało sprawdzone czy data się przestarzała czy nie i stąd też moje pytanie czy dodanie jakiegoś JS nie zamuli strony, przy odświeżaniu np. co 10sek albo 60sek.

Chodzi Ci o to żeby w momencie tego doładowania na stronie otwieraj się pokazało że był update takiego statusu? Bo jesli tak to websocket byłby najlepszy.

0

Może inaczej zadam pytanie. Jak najlepiej sprawdzić czy usługa jest jeszcze aktywna, czyli czy data zapisana w bazie danych jeszcze nie upłynęła, a jeżeli tak to zmieniamy rekord z aktywna na nieaktywna. Coś co będzie się odbywało w pliku poza ingerencją użytkownika na stronie (w backu)

Myślę nad rozwiązaniem, aby ten skrypt wrzucić do jakiejś pętli JS i niech się odświeża np. co 10min-20min (bo chyba 10 czy 60sek co wcześniej napisałem to bezsensu)

0

Mikroseriwsy w najbardziej kosztowny sposób?

3

Ale po co masz to w ogóle odświeżać, czy nawet po co masz coś zmieniać w bazie? A co jeśli ktoś nie wiejdzie na stronę przez 4 dni po wygaśnięciu tej usługi?
Żaden z opisanych mechanizmów nie zadziała przez 4 dni.
Opisz jeszcze raz, co masz, co chcesz uzyskać.

0

To tak, zacznijmy od tego co mam:
Bot query, który łączy całą siecią serwerów cs:go ze stroną, bierze on informacje z bazy danych strony o aktywnych usługach. Wraz z zakupem jak zmienia się status usługi na aktywny bot dodaje odpowiednią grupę do użytkownika, i potrzebuję teraz zrobić sprawdzenie czy usługa jest aktywna czy nie, jeżeli nie bot wyśle wiadomość steam z przypomnieniem o wygaśnięciu usługi.

Dlatego potrzebuję coś, żeby się odświeżało w backu bo biorę pod uwagę, że użytkownicy nie będą się logować codziennie, tylko jak będą potrzebować coś zrobić na koncie. Bot aktywuje się na widok zmian w bazie

Potrzebuję, aby serwer sam z siebie sprawdzał statusy, ze względu że będę potem rozwijał wszystko o serwery na wynajem, które znowu będą parowane przez ID64 steam i w momencie jak użytkownik nie wejdzie na stronę, to serwer nie wygaśnie sam z siebie

3

Czyli chcesz wykonywać jakąś czynność cyklicznie na serverze bez udziału klienta?

Cron?

0

No tak, niech się samo co jakiś czas sprawdza i czym to najlepiej zrobić oraz czy jak jest to jakaś pętla to jaki czas nie będzie zbytnio obciążał serwera.

0

@TomRiddle: Wykonałem to co było napisane w stackoverflow po wpisaniu cron run php every 10 minutes czyli:
crontab -e
dodanie linijki kodu: */1 * * * * /usr/bin/php /var/www/***/***/***/***/***.php
restart: /etc/init.d/cron reload
sprawdzenie: crontab -l
(wyskakuje to samo co dodałem ), lecz plik się nie odświeża (przynajmniej żadne zmiany w bazie nie zachodzą, a jak przechodzę pod link pliku i przeglądarce to wszystko się aktualizuje, czyli żadnego błędu w skrypcie nie ma)

0

A próbowałeś uruchomić na serverze ten kodzik?

/usr/bin/php /var/www/***/***/***/***/***.php

Bo coś mi mówi że on nie zadziała.

0

"A próbowałeś uruchomić na serverze ten kodzik?" - Tylko tyle co przy pisaniu sprawdziłem echo czy działa na stronie.
/usr/bin/php /var/www/***/***/***/***/***.php - a co do tego, to że nie zadziała odnosi się do samej ścieżki? Powinna jakoś inaczej wyglądać? Plik jest umieszczony kilka folderów po www (*** są po to, bo nie chce podawać dokładnej ścieżki jak plik ma być nie widoczny)

afgsdfgxcvb.PNG
obraz_2022-04-07_155201356.png

0
*/1 * * * * <tutaj>

W miejsce <tutaj> masz wstawić kawałek kodu który cron ma wykonać. Próbuje za pewne wykonać /usr/bin/php /var/www/***/***/***/***/***.php i tak samo jak Tobie prosto z terminala - nie udaje się .

Jakby, co by się miało stać. php /var/www/***/***/***/***/***.php nie znajdzie pliku, ale w jakiś magiczny sposób to samo odpalone z crona miałoby znaleźć?

0

Próbowałem odpalić z terminala ten plik i okazało się, że brakowało . przed /var, zrobiłem poprawkę i teraz wywala Could not open input file: ./var/.......
Jeszcze takie pytanie, czy jeżeli w tym pliku jest require_once "../dane_bazy.php";, to może być w tym formacie czy dodać lepiej po linku https://...../dane_bazy.php

2

CMD nie wie nic o HTTP. Pliki włączasz do projektu poprzez ścieżkę lokalną.

1

dodaj do crontab -e */10 * * * * php /var/www/***/***/***/***/***.php bez żadnej . przed /var i czas odświeżania sobie ustaw zmieniając 10 na inną liczbę minut

1 użytkowników online, w tym zalogowanych: 0, gości: 1