This is not a comprehensive list, but these are some of the credentials that are likely to differ between systems:
database access credentials (db, user, password)
payment gateway credentials (e.g., paypal, authorize.net) Not only do we have production credentials and test credentials for www and dev, different devs might have different sandbox credentials they would use for development.
path to web root
path to special libraries and/or directories outside of web root (e.g., place to write sensitive log files which cannot live in the web root)
* domain used to access they website and generate links in emails that get sent, etc.
We've had problems in the past using environment variables. For example, references to $_SERVER["DOCUMENT_ROOT"] may work OK when you are dealing with a script accessed via apache, but it's not a good to reference this path in your include files. When you want to construct a cron job that needs access to your application environment, it won't be defined.
AFAIK, using environment variables probably won't help if you are talking about database credentials or payment gateway credentials.
I've seen the dynamic configuration file approach, but the configuration.php file is part of a framework and if we adjust it, we are deviating from the framework's codebase and will probably have to be extra careful when applying patches -- i.e., it makes the project harder to maintain when you customize it.