php中for循环的奇特行为

时间:2015-04-30 09:20:48

标签: php arrays for-loop

我正面临着一种奇特的行为,或者你可以在php中说出for循环的幽灵态度。我正在使用API​​检索10000个产品。之后我将这些产品插入我的Database.Codes在localhost中正常工作但在生产服务器中产生问题。我在下面描述它。

$value_array = array();        
$counter=0;                
$time_start = microtime(true); 

for($j=0;$j<count($result);$j++)
{   
   if(isset($result->Item[$j]->itemID))
   {            
      $value_array[] = (int)$result->Item[$j]->itemID.','.(int)$result->Item[$j]->systemSku;  
      $counter++;
   }
   else
   {
       var_dump($result);
       die();                   
   }


   if($counter == 100)
   {
       echo $counter;
       $time_end = microtime(true);
       $execution_time = ($time_end - $time_start);
       echo '<br /><b>Total Execution Time:</b> '.$execution_time.' Sec';

       die();
   }   
} 

以上代码创建如下所示的输出

100
Total Execution Time: 39.075633049011 Sec

但如果我改变下面的代码,我会得到一个白页(没有输出)。

    $value_array = array();        
    $counter=0;                
    $time_start = microtime(true); 

    for($j=0;$j<count($result);$j++)
    {   
       if(isset($result->Item[$j]->itemID))
       {            
          $value_array[] = (int)$result->Item[$j]->itemID.','.(int)$result->Item[$j]->systemSku;  
          $counter++;
       }
       else
       {
           var_dump($result);
           die();                   
       }


       if($counter == 9000)  //I changed the code here 
       {
           echo $counter;
           $time_end = microtime(true);
           $execution_time = ($time_end - $time_start);
           echo '<br /><b>Total Execution Time:</b> '.$execution_time.' Sec';

           die();
       }   
    } 

我再次更改了下面的代码。

$value_array = array();        
$counter=0;                
$time_start = microtime(true); 

for($j=0;$j<count($result);$j++)
{   
  if(isset($result->Item[$j]->itemID))
  {            
    $value_array[] = (int)$result->Item[$j]->itemID.','.(int)$result->Item[$j]->systemSku;  
    $counter++;
  }
  else
  {
    var_dump($result);
    die();                   
  }

  echo $counter.'<br/>';  //I changed the code here

   if($counter == 9000)   
   {
      echo $counter;
      $time_end = microtime(true);
      $execution_time = ($time_end - $time_start);
      echo '<br /><b>Total Execution Time:</b> '.$execution_time.' Sec';

      die();
     }   
   }

我得到的输出如下

all counter values
9000
Total Execution Time: 562.96646595001 Sec

可能是什么问题?为什么第一个代码表现得很奇怪?

1 个答案:

答案 0 :(得分:3)

我认为脚本运行的时间限制仅在长时间没有生成输出时强制执行,因此定期回显某些内容有助于完成。但这只是猜测。

首先检查两台服务器的PHP设置的差异,可能是 max_execution_time 设置。

您可以使用phpinfo()

进行检查