il problema erano gli * all'interno della preg. Perché gli asterischi hanno un significato particolare (che significano "0 o più occorrenze"), quindi se vuoi farli interpretare come caratteri e non come modificatori di criterio devi anteporgli uno backslash:

Codice PHP:
$testo="prova /* INIZIO */ciao mamma, come stai?/* FINE */ fine delle prova";
echo 
"Testo prima delle sostituzioni:
"
.$testo."
"
;
echo 
"
Testo DOPO le sostituzioni: 
"
;
echo 
preg_replace("#(.*)(/\* INIZIO \*/)(.+)(/\* FINE \*/)(.*)#s","\${1} \${2} qui metti il testo che vuoi sostituire \${4} \${5}",$testo); 

così funziona, l'ho provato.