There are a few ways to get there:
$short = array_shift(explode(PHP_EOL, wordwrap($s, $iChrs, PHP_EOL, false)));
Is probably the easiest where $s is the string, $iChrs is the number of characters give or take, and $short is the cut string to the next shortest length.
You can also do it with substr, but it takes more work since you have to deal with potentially shorter strings, false results, etc etc.
$iChrs += strlen($s) > $iChrs ? (($c = strpos($s, ' ', $iChrs - 1)) ? ($c - $iChrs) : 0) : 0;
print substr($s, 0, $iChrs);
Assuming a word ends on a space.
I can probably come up a with a few other ideas as well. I'm sure I've done this simpler than this whilst still using substr in the past.