Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка на валидность url
Форумы портала PHP.SU » PHP » Программирование на PHP » Проверка на валидность url

Страниц (1): [1]
 

1. AlexGreF - 27 Мая, 2009 - 20:18:51 - перейти к сообщению
Народ, подскажите плиз функцию или способ как можно проверить существование url..
Например, мой скрипт находится по адресу http://phpscripts.ru/script.php, ему передаётся параметр типа 'http://domain.ru/index.php?dir=23&fak=3', и вот нужно проверить существует ли такая страница, либо нет(код 404 или другой).
3. AlexGreF - 27 Мая, 2009 - 20:34:47 - перейти к сообщению
vitaliy_mad пишет:
http://forum.php.su/topic.php?forum=62&topic=31

Такой способ я прекрасно знаю, но я думал может есть что попроще, какая-нибудь одна функция, которая бы проверяла url..
4. valenok - 27 Мая, 2009 - 20:55:20 - перейти к сообщению
Проверять url нужно тогда двумя этапами..
Во первых это проверить что домен куда то ведет (наличие A record ) и наличие сервера который обрабатывает эти запросы (хотя проще уже сразу отправить запрос к нужному url, чем проверять эти записи). Во вторых это проверить что на твой запрос сервер не возвращает ошибке 404
5. AlexGreF - 28 Мая, 2009 - 11:04:40 - перейти к сообщению
Вот нашёл функцию для проверки валидности url:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function check_url($url) {
  4.  if (eregi( '^http://', $url)) {
  5.     $urlArray = parse_url($url);
  6.        if (!$urlArray[port]) $urlArray[port] =  '80';
  7.        if (!$urlArray[path]) $urlArray[path] =  '/';
  8.        $sock = fsockopen($urlArray[host], $urlArray[port], &$errnum, &$errstr);
  9.        if (!$sock) $res =  'DNS';
  10.        else {
  11.           $dump .=  "GET $urlArray[path] HTTP/1.1\r\n";
  12.           $dump .=  "Host: $urlArray[host]\r\nConnection: close\r\n";
  13.           $dump .=  "Connection: close\r\n\r\n";
  14.           fputs($sock, $dump);
  15.           while ($str = fgets($sock, 1024)) {
  16.              if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", $str))
  17.                $res[code] = trim(eregi_replace('^http/[0-9]+.[0-9]+
  18. ([0-9]{3})
  19. [a-z ]*',  "\\1", $str));
  20.              if (eregi("^Content-Type: ", $str))
  21.                $res[contentType] = trim(eregi_replace("^Content-Type: ",
  22. "",
  23. $str));
  24.           }
  25.           fclose($sock);
  26.           flush();
  27.           return $res[code];
  28.        }
  29.  } else $res = "N/A";
  30.  return $res;
  31. }
  32. ?>
6. goodier - 06 Июля, 2012 - 01:08:11 - перейти к сообщению
Самый простой способ узнать ответ от сервера
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $url = 'http://www.example.com';
  4.  
  5.  
  6. ?>


Результатом выполнения данного примера будет что-то подобное:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => HTTP/1.1 200 OK
  4.     [1] => Date: Sat, 29 May 2004 12:28:13 GMT
  5.     [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
  6.     [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
  7.     [4] => ETag: "3f80f-1b6-3e1cb03b"
  8.     [5] => Accept-Ranges: bytes
  9.     [6] => Content-Length: 438
  10.     [7] => Connection: close
  11.     [8] => Content-Type: text/html
  12. )

 

Powered by ExBB FM 1.0 RC1