2016-03-27 1 views
0

Я делал мягкий тест с file_get_contents. Цель состоит в том, чтобы проверить, существуют ли 2 urls, а затем посмотреть, есть ли у них в них string.В PHP, используя file_get_contents && file_get_contents, возвращает разные значения?

Что-то вроде:

$check_url1 = "www.example_1.com"; 
$check_url2 = "www.example_2.com"; 


if( 
$view_loaded_url1= @file_get_contents($check_url1)&& 
$view_loaded_url2= @file_get_contents($check_url2) )                
{ 

    var_dump($view_loaded_url1); //RETURNS boolean true 

    var_dump($view_loaded_url2); //Returns the Contents of the page i.e: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str.....etc 

Как сделать и вернуть contents страницы и не boolean?

Потому что есть второй if, чтобы проверить, содержат ли они оба string.

Что-то вроде:

if(stristr($view_loaded_url1, 'I am the String') && stristr($view_loaded_url2, 'I am the String') { 

//....This part cannot go through because $view_loaded_url1 and $view_loaded_url2 are returning different datatype 

} 

Это нормальное поведение .... Кто-нибудь еще столкнулся с этим?

SCREENSHOT: enter image description here

+2

Вы пробовали использовать кронштейны? – Phil

+0

@ Phil_1984_ Nop .... как? – ErickBest

ответ

5

file_get_contents никогда не возвращается true. Он возвращает содержимое файла (или URL) или false, если поиск содержимого не удался.

Причина, по которой $view_loaded_url1 получает значение true является то, что выражение вычисляется следующим образом (см круглых скобок):

if( 
    $view_loaded_url1 = (@file_get_contents($check_url1) && ($view_loaded_url2 = @file_get_contents($check_url2)) 
)                

Исправления к группе операторы:

if( 
    ($view_loaded_url1 = @file_get_contents($check_url1)) && 
    ($view_loaded_url2 = @file_get_contents($check_url2)) 
)                
{ 
+3

В словах nerd логические и ('&&') имеют [более высокий приоритет] (http://php.net/manual/en/language .operators.precedence.php), чем присвоение ('='). – bishop

+0

@Alex .... .Принял это человек! Спасибо! Хорошо работает при сгруппировании – ErickBest

+0

@ErickBest, ...если хотя бы один из URL-адресов может быть выбран, а извлеченное содержимое [не пусто, а не строка '" 0 "'] (http://php.net/manual/en/language.types.boolean.php) –

0

file_get_contents не является надежным способом проверки, если URL существует или нет. Эта функция возвращает логическое значение false для каждого отклика HTTP без ответа 2XX.

Лучше написать собственную функцию, которая будет подключаться к данному URL-адресу на порту 80 через сокет и анализировать выход или отвечать на таймаут соединения. Вы также можете использовать cURL.

+0

Это правда, и я согласен с вами, но этот ответ больше похож на комментарий без примера функции, которая реализует это предложение. – bishop

+0

@mike Am Interest! .... Не могли бы вы порекомендовать лучше, чем решение 'file_get_contents'? .. (обещание UpVote) – ErickBest

+0

Не могли бы вы пояснить, что вы подразумеваете под« url exists »? Например, URL-адрес может быть на 100% действительным, в то время как программное обеспечение на стороне сервера может указывать на то, что запрошенный ресурс недоступен, и ответьте 404 в ответ –