错误:在PHP脚本中“只能通过引用传递变量”

I am having the error "Fatal error: Only variables can be passed by reference" in the following lines of code.

$ag = array(M($forge[2][$i], NULL, TRUE), M($about[0]["text"], "Less", TRUE), M($address[0]["text"], NULL, TRUE), M($phone[0]["text"], NULL, TRUE), M($website[0]["text"], "...", TRUE));

if(CAT)
    array_push($ag, M($cat[1], NULL, TRUE));

$pf_args =  str_replace("%s, ", "", PLACEHOLDER, 4 - count($_POST['ad']));

file_put_contents("files/" . FILENAME . ".sql", vsprintf($pf_args, $ag), FILE_APPEND); 

The message shows error in the last line. Can any one suggest me the reason?

(Edit): M() is defined as:

function M($text, $str = NULL, $escape = FALSE) {
    if (!empty($str))
        $text = str_replace($str, "", $text);
    $text = str_replace("(Edit)", "", $text);
    $text = str_replace("More", "", $text);
    $text = str_replace("Less", "", $text);
    $text = str_replace("<br>", "
", $text);
    if ($escape)
        return mysql_escape_string(trimText(html_entity_decode(strip_tags($text))));
    else
        return trimText(html_entity_decode(strip_tags($text)));
}

The problem is this line:

$pf_args =  str_replace("%s, ", "", PLACEHOLDER, 4 - count($_POST['ad']));

The last argument is just for outputting the number of replacements. You have to pass a variable here, not the expression 4 - count($_POST['ad']). Just remove the last argument and it will work.

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

http://php.net/manual/en/function.str-replace.php

If you want to limit the number of replacements, there are implementations of str_replace_once in the comments of str_replace's manual page.