Проверка файла ( file($add) ) на нfличие текстовой фразы

Гриша К.

Новичок
Проверка файла ( file($add) ) на нfличие текстовой фразы

Здравствуйте.
Сделал скрипт для проверки внешних ссылок на сайт:
скрипт открывает файл с результатом поиска на yandex.ru ($addr), и проверяет массив файла, ели там есть строка "Искомая комбинация слов нигде не встречается", значит обратной ссылки на сайт нету, если фразы такой нету,значит обратная ссылка есть.

PHP:
function display_backlinks($link, $site)
{
// адрес страницы
$addr = 'http://www.yandex.ru/yandsearch?ras=1&lang=all&Link='.$link.'&site='.$site.'&numdoc=10'; 
// идентификатор начала блока
$begblock = "Искомая комбинация слов нигде не встречается";
// массив строк результата
$result = array(); 

$screen = file($addr);
$i = 0;
while ($i<sizeof($screen) && strpos($screen[$i], $begblock) == false) {
$i++;
}

$No = '<a href="'.$addr.'" target="_blank" style="color: red;">Обратная ссылка не найдена</a>';
$Yes = '<a href="'.$addr.'" target="_blank" style="color: green;">Обратная ссылка найдена</a>';

$backlink = ( isset($screen[$i]) ) ? '<a href="'.$addr.'" target="_blank" style="color: red;">Обратная ссылка не найдена</a>' : '<a href="'.$addr.'" target="_blank" style="color: green;">Обратная ссылка найдена</a>';

return $backlink;
}
Я попытался, сделать так, чтобы если файл не открываестя, то функция к примеру выдавала результат false:

PHP:
if (!empty($screen))
{
//Все что идет после строки $screen = file($addr);
}
else
return false;
Но в итоге если услвоие выполняется, то еще отображается фраза "array"

и я даже не знаю, нужна ли в функции вот это строка: $result = array();
Потому, что я просто переделывал скрипт, который извлекал данные из файл.

Подскажите пожалуйста корректное составление этой функции. Я сам понимаю, что я написал ее, не учтя возможные отклонения от условия.
 

serglt

Анус, ой, Ахтунг
PHP:
    ....
    $content = file ($addr);
    $content_str = implode ("", $content);
    if ($content_str == "")
        return false;
    if (preg_match ("/Искомая\s+комбинация\s+слов\s+нигде\s+не\s+встречается/", $content_str))
       return false;
    else
         return true
 

Гриша К.

Новичок
serglt, спасибо большое за код.
nofx, спасибо большое за ссылки на справку и за дополнение, сейчас читаю, разбираюсь.

Только у меня сразу ошибка получается в этой строке:
$content = file_get_contents ($addr);
Fatal error: Call to undefined function: file_get_contents() in E:\home\link\www\proverka\baclink.php on line 7
Смотрю и непонимаю, что не так. Подскажите пожалуйста.
 

phprus

Moderator
Команда форума
Гриша К.
А какая у тебя версия php? Функция file_get_contents появилась только в версии 4.3.0
 

Гриша К.

Новичок
Вот блин, у меня 4.2.3
Я вот тут нашел у себя 4.3.0, щас буду ставить, так я это не люблю.
phprus, спасибо.

-~{}~ 04.02.06 17:40:

Все установил 4.3.0
Подскажите пожалуйста, вот как мне теперь сделать так, чтобы если файл не открывается, то функция возвращала false,
$content = file_get_contents ($addr);
$content_str = implode ("", $content);
Теперь выдается ошибка на вторую строчку ($content_str...)
Warning: implode() [function.implode]: Bad arguments. in E:\home\link\www\proverka\baclink.php on line 23

Почитав эту страницу я не смог понять почему такая ошибка http://ru.php.net/function.implode

-~{}~ 04.02.06 21:12:

Я понял, что file() возвращает массив, а file_get_contents () возвращает не массив, поэтому implode ("", $content) (она работает только с массивами, и в данном случае убирает все пробелы и все символы страницы становятся в строчку).

В итоге я сделал так
@ $content = file_get_contents ($addr);
if ($content == false)
return false;

Я вот только не вовсем понял
а если в искомом файле будет так

"/Искомая\s+комбинация\s+слов\s+\r\nнигде\s+не\s+встречается/"

и т.п. ?
Я например пробовал ссылаться на файл на своем компьютере, и изменял проверянемую фразу например так (не используя в шаблоне \r\n и условие было верно):
Искомая комбинация слов
нигде не встречается

Т.е. я не понимаю нжно ли мне использовать \n и \r.
 

phprus

Moderator
Команда форума
Гриша К.
Убери строку $content_str = implode ("", $content);. Она в данном случае не нужна так как функция file_get_contents возвращает либо файл в виде строки, либо, если файл открыть не удалось, возвращает false. (подробнее - http://ru2.php.net/file_get_contents)

И еще лучше обновить php до версии 4.4.2 так как эта самая последняя версия из линейки 4.х
 

Гриша К.

Новичок
phprus, спасибо за помощь, по поводу того что нужно убрать $content_str я уже узнал:
Я понял, что file() возвращает массив, а file_get_contents () возвращает не массив, поэтому implode ("", $content) (она работает только с массивами, и в данном случае убирает все пробелы и все символы страницы становятся в строчку).
Чуть попозже обязательно обновлю свйо PHP До 4.4.2

А незнаете ли вы ответа на вопрос, в предудщем сообщении, по поводу
а если в искомом файле будет так

"/Искомая\s+комбинация\s+слов\s+\r\nнигде\s+не\s+встречается/"

и т.п. ?
 
Гриша К.
читай ссылки которые я тебе дал.
также на сайте есть статьи по регулярным выражениям.

Warning: implode() [function.implode]: Bad arguments.
Почитав эту страницу я не смог понять почему такая ошибка
для начала, переведи с анг. эти слова "Bad arguments".
успехов.
 

Гриша К.

Новичок
Если я правильньно понимаю, то file_get_contents () возвращает данные в виде строки, а file() в виде массива,
implode() предназначен для работы с массивами.
Сделал так:
@ $content = file_get_contents ($addr);
if ($content == false)
return false;



Я пока ни прочитал все ваши ссылки, ответа в форум ни писал, но я так и не разобрался для чего нужно \r (возврат коректи) и \n (новая строка) в данном случае:
("/Искомая\s+комбинация\s+слов\s+нигде\s+не\s+встречается/
Я пока так и оставил.
 

SelenIT

IT-лунатик :)
Гриша К.
В данном случае они не нужны. Они уже учтены в метасимволе \s.
 

Гриша К.

Новичок
SelenIT, спасибо большое за разъяснение.
А то я пробовал текс на странице разрывать интером, и думал что \s. не должно подходить, а оно подходило и я запутался.
 
Сверху