Ну, во-первых, вам не нужно "очищать" файл таким образом ... Опция "w" в fopen уже сделает это за вас.Кроме того, я бы не стал читать весь файл сразу, потому что, если он очень большой, он не будет работать без интенсивного использования памяти.
Что вам нужно сделать, это прочитать файл последовательно, что означаетВы всегда читаете фиксированное количество байтов и ищете ключевые слова.Чтобы избежать потери ключевых слов, которые сокращаются пополам вашим механизмом чтения, вы можете сделать так, чтобы ваши чтения немного перекрывались (длина самого длинного ключевого слова-1), чтобы решить эту проблему.Затем вам следует изменить цикл while, чтобы он также проверял, находитесь ли вы в конце файла (while (! Feof ($ fh))).
PS: уже упоминалось, что вы очищаете свой файлпрежде чем читать это.Что я понял, так это то, что ваш файл очень быстро получает много информации, поэтому вы ожидаете, что у него уже будет содержание, когда вы снова откроете его.Если это не так, вам действительно нужно переосмыслить свою логику;)
PPS: вам не нужно прерывать цикл while, увеличивая переменную-счетчик за пределы определенных вами границ.Вы также можете использовать ключевое слово break.