Есть простой способы вывода первых 30-ти букв фразы вез разрыва слова или же первых 5-ти слов.
Вывод первых 30+ символов без разрыва слов
print preg_match("/^(.{30,}?)\s+/s", $text, $m) ? $m[1] . '...' : $text;
Вывод первых 5 слов
print preg_match("/^((\S+\s+){5})/s", $text, $m) ? $m[1] . '...' : $text;