Рассмотрим простой пример использования регулярных выражений, а так же cURL-а, для извлечения всех ссылок с веб-страницы (либо файла). Для этих целей необходимо чтобы на вашем сервере была включена поддержка cURL, в ином случае будут использоваться функции fopen/fget/fclose. Использование cURL-а в для этих целей предпочтительнее, так как он по шустрее в работе, и способен имитировать браузер пользователя, посредством отправки HTTP заголовков, что весьма немаловажно.
Стоит обратить внимание на то, что ниже описанный код возвращает все ссылки, в том числе и ссылки на изображения, на файлы стилей и т.п.
Код:
<?php
$url = 'https://href.kz';
$var = fread_url($url);
preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+".
"(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/",
$var, &$matches);
$matches = $matches[1];
$list = array();
foreach($matches as $var)
{
print($var."<br>");
}
// Функция fread_url вернет содержимое веб-страницы
// В случае, если CURL не установлен будут использованы функции fopen / fgets
function fread_url($url,$ref="")
{
if(function_exists("curl_init")){
$ch = curl_init();
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; ".
"Windows NT 5.0)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt( $ch, CURLOPT_HTTPGET, 1 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION , 1 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION , 1 );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_REFERER, $ref );
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
$html = curl_exec($ch);
curl_close($ch);
}
else{
$hfile = fopen($url,"r");
if($hfile){
while(!feof($hfile)){
$html.=fgets($hfile,1024);
}
}
}
return $html;
}
?>
Есть и другой способ получения всех ссылок на странице, для реализации которого используется класс DOMDocument. Класс DOMDocument находится в расширении DOM для PHP, начиная с версии PHP5, возможности его использования так же хорошо задокументированы в документации.