This breaks $story into an array, and rejoins the first 15 words with a space between each one:
$short_story="";
$y = explode(" ",$story);
for ($i=0; $i<15 ; $i++) { $short_story .= $y[$i] . " "; }
There is a function for finding the position of the 15th space in a string. Then you could use that position to grab the substring from $story but I can't seem to find that function right now.
Edit: I just read bogu's solution and it's more efficient especially if the story is long.