Всем привет. Задача такова: получить количество внешних и внутренних ссылок с сайта, который вводит пользователь. Данные вводятся в форму <textarea> списком, каждый сайт через ENTER. Скрипт работает когда ввожу 1 сайт, иногда 2. А иногда ничего не подсчитывает. Я нашел в чем дело. Дело в том что parse_url не всегда вытягивает контент с сайта и пишет: Вот мой запрос: http://www.php.ru/forum/viewforum.php?f=27 http://www.php.ru/forum/viewforum.php?f=27 http://www.php.ru/forum/posting.php?mode=newtopic&f=13 http://habrahabr.ru/ http://www.php.ru/forum/viewtopic.php?t=28709 http://market.airsoft.ua/fl/31/ http://www.google.com.ua/ Если убрать в конце запроса http://www.google.com.ua/ , то все нормально. А если оставить то ошибка. Причем не с гуглом, а не находит ссылки на http://habrahabr.ru/ Исходный код файла index.php: PHP: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=cp1251 " /> <title>Поиск внешних и внутренних ссылок</title> </head> <body> <H2>Поиск внешних и внутренних ссылок</H2> <? if (isset ($_REQUEST["all_url"])) { $res = $_REQUEST["all_url"]; $res = trim($res); $res = explode("\n", $res); // начало работы с каждым адресом поочереди foreach ($res as $key => $url) { $home_site = parse_url($url); $home_site = $home_site['host']; // URL адреса по которому ищем ссылки /* $ch = curl_init (); // инициализация curl_setopt ($ch , CURLOPT_URL , $url); // адрес страницы для скачивания curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7"); // каким браузером будем прикидыватьсяs curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // нам нужно вывести загруженную страницу в переменную $content = curl_exec($ch); // скачиваем страницу curl_close($ch); // закрываем соединение */ $content = file_get_contents($url); if ($content) { // поиск ссылок в исходном коде $result = preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$content, $m); if ($result) { $count_url = count($m[1]); $i = 0; $j = 0; $d = 1; $count = 0; $count2 = 0; while($i<$count_url) { //$str1 = stristr($m[1][$i],"http://"); //$str2 = stristr($m[1][$i],"www."); //$str3 = stristr($m[1][$i],$home_site); echo ++$j.". ".$m[1][$i]."<br>"; // поиск внешних ссылок if ((stristr($m[1][$i],"http://") || stristr($m[1][$i],"www.")) && !stristr($m[1][$i],$home_site)) { $count = $d++; //echo "------->".$m[1][$i]."<br>"; } $i++; } $count2 = $count_url - $count; echo "<br><b>".$url."<br></b> Внешних: ".$count.". "; echo "Внутренних: ".$count2.".<br>------------------------------------<br>"; } else {echo "Не получены ссылки с сайта <b>".$url."</b><br><br>";} } else {echo "Не получен исходный код с сайта <b>".$url."</b><br><br>";} } } ?> <form id="checkform" name="checkform" action="index.php" method="post"> <table width="60%"> <tr> <td width="10%"> </td> <br> Введите адреса, каждый через Enter: <td> <textarea name="all_url" cols="40" rows="10"><?php echo $_REQUEST["all_url"]; ?></textarea> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="Найти"> </td> </tr> </table> </form> </body> </html>
Это предупреждение о том, что был получен заголовок HTTP/1.1 404 Not Found. То-есть удаленный сервер не смог найти документ соответствующий данному запросу.
Я просто не могу понять. Повторю. Если убрать в конце запроса http://www.google.com.ua/ , то все нормально. А если оставить то ошибка. И таких примеров много. Не обязательно гугл. Я хочу узнать, проблемы у меня или на стороне?
Перед file_get_contents поставьте @ PHP: <?php ... $content = @file_get_contents($url); ... ?> И вы больше никогда не увидите это предупреждение
И ещё как вариант в $url присутствует знак перевода строки("\n") или перевода каретки "\r" PHP: <?php echo file_get_contents("http://www.devzirom.ru/\r"); ?> +Или просто табуляция
Перед Код (Text): $content = file_get_contents($url); Попробуйте добавить Код (Text): $url = trim($url);
sobachnik Действительно помогло! Огромное спасибо. Devzirom Зачем добавлять @ перед file_get_contents? Что это даст?