Autor | Zpráva | ||
---|---|---|---|
petrsev Profil |
#1 · Zasláno: 16. 1. 2012, 08:36:23
Ahoj,
potreboval bych poradit: snazim se docilit funkcionality overovani dostupne URL. Pouzivam nasledujici kod $sql = " select link from tabulka "; $result = mysql_query($sql,$db_spojeni); while ($zaznam = mysql_fetch_row($result)) { $url = $zaznam[0]; $headers = get_headers($url, 1); $code = substr($headers[0], 9, 1); if ( ($zaznam[1]=='') || (($code)<>2) || ($headers[0] == '404 Not Found')) { echo 'Url neni OK'; } else { echo 'Url OK';} Vyhodnocovani je zpravidla v poradku, mam ale problem v tom kdyz je v promenne $url napr. http://www.seznam.c tz. adrea je spatne zadana. vystupy jsou get_headers[0] = HTTP/1.1 200 $code = 2 coz znamena, ze funkce mi vrati platnost URL, coz neni pravda. V cem delam chybu nebo v cem je problem? Dekuji za pomoc. |
||
Davex Profil |
#2 · Zasláno: 16. 1. 2012, 23:06:30
Bylo by dobré kontrolovat, že volání funkce
get_headers() neskočilo chybou a stavový kód se skládá ze třech číslic, které je dobré přetypovat na číslo.
$headers = get_headers($url, 1); if ($headers) { $code = (int) substr($headers[0], 9, 3); // ... } Při požadavku na neplatnou adresu by měla být v proměnné $headers hodnota false . Existují ale situace, kdy tomu tak být nemusí, protože se neplatné jméno může překládat na nějakou funkční IP adresu - např. pokud používáš DNS servery OpenDNS.
|
||
petrsev Profil |
#3 · Zasláno: 17. 1. 2012, 09:10:40
Davex:
Diky za info. Zkousel jsem si ted vyjet celou funkci GET_HEADERS pro url napr. www.seznam.c vystup: 0: =HTTP/1.1 200 OK 1: =Date: Tue, 17 Jan 2012 07:36:12 GMT 2: =Server: Apache 3: =Connection: close 4: =Content-Type: text/html 5: = 6: = 7: = 8: = Vsimni si ze parametr 0 vypada ze stranka je platna...ocekaval jsem 404 Not Found. S temi servery OPEN DNS fakt nevim,jestli pouzivam. Jestli ano asi s tim nic neudelam. Spis me napadlo ze bych krom toho prvniho parametru mohl testovat jeste nejaky jiny parametr v GET_HEADERS. Napada me [connection], ale moc o nem nevim... [0] => HTTP/1.1 200 OK [Date] => Sat, 29 May 2004 12:28:14 GMT [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT [ETag] => "3f80f-1b6-3e1cb03b" [Accept-Ranges] => bytes [Content-Length] => 438 [Connection] => close [Content-Type] => text/html Nejaky napad? |
||
Davex Profil |
Pro neexistující adresu by měla funkce
get_headers() vrátit false . Případně s povoleným výpisem zobrazit varování:
Warning: get_headers() [function.get-headers]: php_network_getaddresses: getaddrinfo failed: No such host is known. in .../get_headers.php on line 3 Warning: get_headers(http://www.seznam.c) [function.get-headers]: failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known. in .../get_headers.php on line 3 Tobě se neplatné jméno přeloží na funkční IP adresu webového serveru. Nevím proč, ale možná je to hostingem nebo ISP. Co vypíše funkce echo gethostbyname('w>ww.seznam.c') ?
|
||
petrsev Profil |
#5 · Zasláno: 18. 1. 2012, 07:18:13
Davex:
Ahoj, funkce echo gethostbyname('www.seznam.c') mi vypise: IP adresu mych stranech. Tak asi opravu se to presmeruje na funkcni IP adresu. Myslis, ze to jde vyresit konzultacne s podporou hostingu,ze to mohou nastavit? Jeste me napadla jedna moznost. kdyz si dam vypsat neexistujici url adresu, tka se mi vzdy vyplni pouze 4 prvni atributy viz. 0: =HTTP/1.1 200 OK 1: =Date: Tue, 17 Jan 2012 07:36:12 GMT 2: =Server: Apache 3: =Connection: close 4: =Content-Type: text/html 5: = 6: = 7: = 8: = tak jsem tam pridal jeste podminku, ze pokud je 8 atribut GET_HEADERS prazdny, tak at to bere taky tak ,ze stranka neexistuje a zatim facha..ale moc se mi to reseni nelibi.. |
||
Davex Profil |
#6 · Zasláno: 19. 1. 2012, 18:21:42
petrsev:
„gethostbyname('w>ww.seznam.c') mi vypise: IP adresu mych stranech“ Tak to se nechová správně a mělo by se to řešit s technickou podporou hostingu. Počet položek v HTTP hlavičce může být pokaždé jiný a nedá se na to spoléhat. |
||
petrsev Profil |
#7 · Zasláno: 20. 1. 2012, 07:09:57
Davex:
Ano,neti to moc idealni reseni. napsal jsem jit podpore meho webhostingu tak uvidim co mi napisou.Kazdopadne moc diky za konzultaci. |
||
Časová prodleva: 11 let
|
0