2011-04-16 71 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)。