La function strstr() y stristr(), toman la cadena desde donde indicas en el segundo parametro INCLUYENDO el parametro.
Ejemplo:
Si subes una imagen llamada hola.jpeg, al hacer strstr($imagen, '.');
Tomara: .jpeg
Pero luego en tu codigo cuando le asignas el nuevo nombre, pones otro PUNTO.
Entonces la imagen vendria llamandose asi: blahcasdas541..jpeg
Talvez por eso no se guarden correctamente.
Reemplaza:
Código PHP:
$nvo= $id. ".". $ext ;
Por:
Código PHP:
$nvo= $id. $ext ;