It's not easy t odebug this just by looking at it, but I have some questions for you:
Look at this line
if (strlen($cuttext) == $len and $cuttext{$len - 1} != ' .') {
I'm not terribly clear on what you are trying to achieve here, but I would imagine that those curly brackets (or braces) around "$len - 1" should probably be square brackets.
Also, you appear to be checking if a character is not equal to a string, which will always be true if that string contains more than one character. Your string ' .' contains two characters - "space dot".
Also:
$last_blank = strrpos($cuttext, '.');
doesn't locate the last blank, it locates the last full stop (or decimal point, or period, or "dot" in a web or email address).
//remove last word
$cuttext = substr($cuttext, $cutfrom, $last_blank);
Shouldn't this now be cutting only from the end? You're chopping off stuff at the start here as well. I would suggest that $cutfrom here should be replaced with 0.
Finally, I think your design is over complicated. You should just be able to achieve this by passing a news id and page number to your script. It should then be able to calculate the start and end points of the cut itself.
Best of luck!