Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie czy URL istnieje
Forum PHP.pl > Forum > PHP
AoW
Witam,

chciałbym napisać skrypt, który sprawdzi na mojej stronie np. abc.pl czy dany link np http://forum.php.pl/index.php?showforum=27 przekierowuje do strony ktora istnieje, czy może przekierowuje do strony błędu np. link http://forum.php.pl/index.php?showforum=274 nie istnieje i przekierowuje do strony z informacja "Link który zaprowadził cię do tej strony jest zły lub nieaktualny."

Reasumujac, chcialbym na swojej stronie sprawdzic, czy dany link przekieruje mnie do strony z zawartoscia prawidlowa, lub do strony bledu.

Pozdrawiam
AoW
netmare
poczytaj o fsockopen() w php i metodzie HEAD w HTTP

Edit: W sumie kod kolegi powinien Ci pomóc Temat: Logowanie na forum skryptem

tylko zamień metodę POST na HEAD i w tym co odczytasz w odpowiedzi serwera sprawdź czy jest ten link czy go nie ma
AoW
Ok, dziekuje za nakierowanie,

zaczynam czytac i testowac. Pierwszy problem, to zastanawiam sie, czy funkcja fsockopen() działa dla podstron.

kiedy uruchamiam funkcje:
  1. <?php
  2. echo fsockopen("forum.php.pl/index.php?showforum=27", 80, $errno, $errstr, 30);
  3. ?>


Otrzymuję wynik:
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: hostname nor servname provided, or not known in /php/22/index.php on line 8

Warning: fsockopen() [function.fsockopen]: unable to connect to forum.php.pl/index.php?showforum=27:80 (Unknown error) in /php/22/index.php on line 8


kiedy uruchamiam funkcje:
  1. <?php
  2. echo fsockopen("forum.php.pl", 80, $errno, $errstr, 30);
  3. ?>


Otrzymuję wynik:
Resource id #2

Oczywiście na razie działam trochę po omacku. Ale wazne, ze mam jakis punkt zaczepienia.
netmare
nie, nie działa fsockopen nawiązuje połączenie z serwerem, a podstrony są obsługiwane przez metody HTTP
Cezar708
potestuj sobie z get_headers(), Myślę, że do Twoich potrzeb całkowicie wystarczy.
AoW
  1. <?php
  2. $url='forum.php.pl';
  3.  
  4. $arrHeaders = get_headers($url);
  5. if ( $arrHeaders[0] == 'HTTP/1.1 200 OK' ){
  6. echo "url $url jest jest dostępny";
  7. } else {
  8. echo "url $url nie jest dostępny błąd: `{$arrHeaders[0]}`";
  9. }
  10. ?>


Czy w takim razie powyższy kod powinien wykazywać, że url jest dostępny?

Umnie pokazuje błąd, nie wiem co jest nie tak.
Cezar708
tak dokładnie
HTTP status 200 oznacza że url istnieje i jest dostępny z tej lokalizacji, z której wykonywałeś sprawdzanie skryptem
AoW
a u mnie wynik wygląda taki:

  1. <?php
  2. Warning: get_headers() [function.get-headers]: This function may only be used against URLs. in /php/22/index.php on line 12
  3. url forum.php.pl nie jest dostępny błšd: ``
  4. ?>


Skrypt jest wykonywany z home.pl, gdzie jest php5, wiec chyba powinno grac.
netmare
pokaż KOD anie błąd winksmiley.jpg
AoW
w sumie kod pokazałem, wklejam całość:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5.  
  6. <?php
  7.  
  8. /* echo fsockopen("forum.php.pl", 80, $errno, $errstr, 30); */
  9.  
  10. $url='forum.php.pl';
  11.  
  12. $arrHeaders = get_headers($url);
  13. if ( $arrHeaders[0] == 'HTTP/1.1 200 OK' ){
  14. echo "url $url jest jest dostępny";
  15. } else {
  16. echo "url $url nie jest dostępny błąd: `{$arrHeaders[0]}`";
  17. }
  18.  
  19. ?>
  20.  
  21. </body>
  22. </hmtl>
Cezar708
Cytat
URL składa się z części określającej rodzaj zasobu/usługi (ang. scheme), dwukropka i części zależnej od rodzaju zasobu (ang. scheme-specific part). [źródło]



czyli adres url musi mieć podany protokół:

forum.php.pl -> nie jest poprawnym URL,

http://forum.php.pl -> to jest poprawny URL (z http:// na początku)

wtedy wszystko zadziała

Pozdrawiam
AoW
Warning: get_headers() [function.get-headers]: URL file-access is disabled in the server configuration in /php/22/index.php on line 12

Warning: get_headers() [function.get-headers]: This function may only be used against URLs. in /php/22/index.php on line 12
url http://forum.php.pl nie jest dostępny błšd: ``

  1. <?php
  2.  
  3. /* echo fsockopen("forum.php.pl", 80, $errno, $errstr, 30); */
  4.  
  5. $url='http://forum.php.pl';
  6.  
  7. $arrHeaders = get_headers($url);
  8. if ( $arrHeaders[0] == 'HTTP/1.1 200 OK' ){
  9. echo "url $url jest jest dostępny";
  10. } else {
  11. echo "url $url nie jest dostępny błąd: `{$arrHeaders[0]}`";
  12. }
  13.  
  14.  
  15. ?>


probowalem tez z www i bez


EDIT! Sprawdziłem na innym serwerze i zadziałało. Tak więc dziękuję, kombinuję dalej smile.gif
Cezar708
dokłądnie przekleiłem Twój kod i wynika mam taki:

Kod
url http://forum.php.pl jest jest dostępny


wynika z tego, że home ma zablokowane jakieś sprawdzanie z swojej konfiguracji. funkcja korzysta ze strumieni... być może jakaś tamtejsza polityka bezpieczeństwa na to nie pozwala. Napisz do nich i zapytaj dlaczego to nie działa. Może Ci to odblokują.

Pozdrawiam
netmare
chyba niestety musisz próbować przez fsockopen() sad.gif , @Cezar708 fajna ta funkcja get_headers()

  1. <?php
  2. $url=fsockopen("forum.php.pl",80);
  3. $header="HEAD /index.php HTTP/1.1r\n";
  4. $header.="Host: forum.php.plr\n";
  5. $header.="Connection: Closer\n";
  6. $header.="r\n"
  7. $reply=array();
  8. fwrite($url,$header);
  9. while(!feof($url)) $reply[]=fgets($url);
  10. ?>

i w reply[0] powinieneś mieć tą samą linię co po tych headers
Nie tesotwałem może coś wyskoczyć winksmiley.jpg

Edit: fsockopen również może być zablokowane na home.pl
AoW
NA innym serwerze poszło.
Teraz analizuję sekcję head w tych 2 różnych linkach. Widze różnicę w elemencie [5], tak więc jest światełko smile.gif

Zaraz przetestuję na serwisie, na którym chcę to wdrożyć i dam znać, czy uda mi się wykorzystać tą funkcję.
specialplan
A moze: checkdnsrr" title="Zobacz w manualu PHP" target="_manual?
netmare
@specialplan on chcę sprawdzić stonę a nie hosta
AoW
Wszystko gra, działa tak jak chciałem.

Dziękuję pięknie za pomoc.
Pozdrwiam
AoW
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.