• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzenie czy dany URL istnieje. PHP, Symfony, PrestaShop

Cloud VPS
+1 głos
401 wizyt
pytanie zadane 25 lipca 2023 w PHP przez Beginner555 Bywalec (2,090 p.)
Cześć,

Chcę zrobić pewną funkcjonalność do mojego modułu do przekierowań. Funkcjonalność polega na tym, że przekierowujemy z starych url-i na nowe url-e, stare i nowe url-e przechowywane są w bazie danych. I chcę dodać taką funkcjonalność, która przed przekierowaniem będzie sprawdzała czy podany nowy url nie zwraca kodu 404, jeśli zwraca to w tabeli bazy danych jest jeszcze możliwość opcjonalnego zapisu id_produktu, do którego odnosi się url, jeśli podane id_produkty już nie istnieje w bazie, to przekierowuje nas na stronę kategorii po id_category, jeśli podane id_category nie istnieje przekierowanie jest po prostu na główną stronę sklepu. Ogólnie mi chodzi ,czy można jakoś sprawdzić czy podany URL na którego mamy być przekierowani istnieje i czy da się to zrobić jakoś aby nie robić podwójnych zapytań aby nie obciążyć serwera? Mam nadzieję, że zrozumiecie mi o co chodzi, za każdą cenną wskazówkę dziękuję :)

1 odpowiedź

+2 głosów
odpowiedź 25 lipca 2023 przez Pabllo26 Obywatel (1,280 p.)
wybrane 25 lipca 2023 przez Beginner555
 
Najlepsza
Witam.
Znalazłem pewną funkcje która może ci się przydać. Nazywa się ona get_headers (ref: https://www.php.net/manual/en/function.get-headers.php) generalnie z tego co wiem powinna ci zwrócić tablicę z parametrami witryny. Powinna więc też zwrócić 404 albo dać fałsz, więc polecam z tym pokombinować.
Pozdrawiam serdecznie :)
komentarz 25 lipca 2023 przez Beginner555 Bywalec (2,090 p.)

A czy taka funkcja by nie zadziała wydajniej? Tutaj wykorzystywane są funkcje z biblioteki curl które robią zapytania HEAD, które chyba w przeciwieństwie do funkcji get_headers nie robią pełnych zapytań GET. 

        function urlExists($url) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_NOBODY, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_exec($ch);
            $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            return $statusCode >= 200 && $statusCode < 300;  
        }

 

komentarz 25 lipca 2023 przez Pabllo26 Obywatel (1,280 p.)
Owszem zadziała wydajniej, ale w tym przypadku myślę że w tym celu nawet pełne zapytanie nie jest wielkim obciążeniem. Mimo to jeżeli nie będziesz używał reszty info z GET'a to użyj twojej funkcji
komentarz 25 lipca 2023 przez Beginner555 Bywalec (2,090 p.)
Dzięki za pomoc ;)

Podobne pytania

+1 głos
0 odpowiedzi 58 wizyt
pytanie zadane 26 listopada 2024 w PHP przez Beginner555 Bywalec (2,090 p.)
0 głosów
0 odpowiedzi 108 wizyt
pytanie zadane 5 maja 2020 w PHP przez tgv Użytkownik (890 p.)
0 głosów
1 odpowiedź 941 wizyt
pytanie zadane 9 listopada 2018 w Inne języki przez luna22 Obywatel (1,420 p.)

93,457 zapytań

142,452 odpowiedzi

322,722 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...