GZIP/delate will be better from Apache than GZIP from PHP, simply because PHP is a slow language and the compression can be intensive.
Although to be honest, this isn’t super important any more. You should put far-future expire headers on image files that never change, for better optimization.
While I’m not using Apache much anymore I would let Apache handle all the compress. For myself I use IIS which provides this functionality. I let IIS handle because it can be setup to cache selected compressed sections of my site, ones that do not change often. Saving processing cycles for more visitors.
It really depends on the specifc content being compressed, but all the times where I’ve measured, there’s generally very minimal increase in compression when going over about level 5-6 or so.