2011-04-16 92 views
0

此代码打开一个文本文件,然后检查文本文件中是否有每个单词 存在于另一个大的2MB字典文件中。代码正在工作,但突然停止工作

如果它确实存在,它将字典文件中的行存储到变量中。

代码工作,但后来开始生成服务器500错误,现在 它只列出大约7场比赛,然后永远不会加载任何东西。

它用来列出1000个匹配,然后停止。

$file_handle = fopen("POSdump.txt", "r"); 
while (!feof($file_handle)) { 
    $line = fgets($file_handle); 

    $words= explode(" ", $line); 

    foreach ($words as $word) { 

     $word = preg_replace('#[^\w+>\s\':-]#', ' ', $word);     

     $subwords= explode(" ", $word); 

     $rawword = $subwords[0]; 
     $poscode = $subwords[1]; 
     $rawword = strtoupper($rawword);  


      $handle = fopen("dictionary.txt","r"); // 

      if ($handle) { 
       while (!feof($handle)) 
          { 
         $buffer = fgets($handle, 4096); 

         if (preg_match('#\b'.$rawword.'\b#',$buffer)) { 


         echo $rawword; 
      echo "</br>"; 


       } 
      } 
     } 
    } 
} 

?> 
+1

“工作与不工作”之间有什么变化? – bmargulies 2011-04-16 19:20:41

回答

1

尝试在完成后关闭文件。

+0

我知道了!这些嵌套的文件操作正在破坏服务器。 – Graham 2011-04-16 19:23:04

+0

工作意味着它列出所有找到的文件并完成操作。 – Graham 2011-04-16 20:41:43

+0

不工作意味着它列出了大约7个文件,然后死在一个永远不会完成加载的循环,或者它给内部服务器错误500 – Graham 2011-04-16 20:42:15

0

这似乎是一个memory_limit错误。在开始进程之前使用ini_set('memory_limit',-1)。