Does disappointment count?
After struggling my way through a broken MediaWiki upgrade today, I was reminded once again of just how awful PHP is, both to develop in it and to use applications written in it. What I had to deal with today would not have happened if it were written in a compiled language, because it isn't possible in compiled languages.
Specifically, my MediaWiki settings file contained:
require_once( "$IP/includes/DefaultSettings.php" );
Apparently, this was once required in MediaWiki settings files. After upgrading, though, its presence causes an extremely misleading error message:
Fatal error: Uncaught FatalError: $wgBaseDirectory must not be modified in settings files! Use the MW_INSTALL_PATH environment variable to override the installation root directory. in /path/to/mediawiki/includes/Setup.php:237
My settings file does not contain $wgBaseDirectory
. Moreover, adding $wgBaseDirectory = MW_INSTALL_PATH;
to my settings file does nothing.
Only after a lot of web searching (and a fair amount of profanity) did I finally find out that the above require_once
statement is the culprit.
See the problem here? Interpreted languages like PHP encourage the extremely irritating anti-pattern of using an executable code snippet as a configuration file, which inevitably results in this kind of nonsense. In a compiled language, on the other hand, the easiest way for an application to load settings is by reading them from a data-only format like JSON or TOML, parsers for such formats tend to produce better error messages than this, and the vast majority of such formats don't have an include directive at all.
Had MediaWiki been written in a compiled language instead of PHP, my morning would have been a whole lot less stressful. And this isn't the first time that this configuration-is-code anti-pattern has caused me grief.