在PHP中,使用file_get_contents&& file_get_contents返回不同的值?

时间:2016-03-27 18:06:48

标签: php string if-statement boolean file-get-contents

我正在使用file_get_contents进行温和测试。目的是测试2 urls是否存在,然后查看它们是否都有string

类似:

$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

}

这是正常的行为吗?....还有其他人遇到过这个吗?

截图: enter image description here

2 个答案:

答案 0 :(得分: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))
  )                                                            
{

答案 1 :(得分:0)

file_get_contents不是检查网址是否存在的可靠方法。此函数为每个非2XX http响应返回false布尔值。

您最好编写自己的函数,它将通过套接字连接到端口80上的给定URL并分析输出或响应连接超时。您也可以使用cURL。