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

Eri*_*est 0 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
Run Code Online (Sandbox Code Playgroud)

你如何让两者都返回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

}
Run Code Online (Sandbox Code Playgroud)

这是正常行为吗?....还有其他人遇到过这种情况吗?

截图: 在此输入图像描述

Ale*_*rov 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))
  )                                                            
Run Code Online (Sandbox Code Playgroud)

修复是对运算符进行分组:

if( 
  ($view_loaded_url1 = @file_get_contents($check_url1)) &&
  ($view_loaded_url2 = @file_get_contents($check_url2))
  )                                                            
{
Run Code Online (Sandbox Code Playgroud)

  • 用书呆子的话说,逻辑和(`&&`)具有[优先级更高](http://php.net/manual/en/language.operators.precedence.php)而不是赋值(`=`). (3认同)