After calling the redirect function header, should I call exit or not?
You should, just like @rgroli explains. If you do not want to bother with brackets, you can also call header() IN exit():
if(sth) exit(header("Location: http://example.com"));
Location header in HTTP/1.1 always requires absolute path see the note here.
Note: This is not a hack, since the exit code is used only if the parameter is integer, while header() produces void (it exits with code=0, normal exit). Look at it as exit_header() function like it should be after Location header.