PHP configuration

<- MediaWiki architecture

PHP is a web template system that accidentally grew up into a fairly general language. PHP's syntax, capabilities, and execution model bear vague similarities to Perl; scripts are loaded by an "interpreter", compiled to bytecode, and then executed. The PHP interpreter can be run from the command line / CGI-style, or more commonly as an in-process Apache module.

Installation
PHP can be a bitch to install in the traditional way. With modern Apache's dynamic modules, it can be fairly easy though. apxs or something. (more later)

Compile-time options
MediaWiki either needs or wants a number of optional features of PHP that need to be enabled at compile time:
 * iconv character set conversion library (but you may be able to fake around it)
 * zlib compression library, optionally to compress the file cache
 * sockets support for network communication, if using memcached

Runtime options
You have to turn on register_globals. If you don't, you'll be confused about why no matter what you click, you only see the main page. :)

Yes, we know it's bad form.

Opcode caching
If running a high-traffic site, it is highly recommended that a system be used to cache the compiled scripts; there are a number of such plugins for PHP, some free, some proprietary. Wikipedia currently uses the ionCube PHP Accelerator, which is free-to-use but not free software. For a totally free solution, there is Alternative PHP Cache, however we had more problems with it.


 * How about Turck MMcache? It's GPL, and it has nearly perfect performance with other complicated PHP applications such as phpBB and PHPNuke... I'm about to run a MediaWiki install on my machine with MMCache enabled, and I'll let all of you know how it goes. Yep, as suspected, MMCache has perfect performance with Phase 3, so I'd say it's safe to use on a production site. - user:ElizabethFong

Fortunately, these all seem to be easy to install as Zend plugins, you just drop in a library and change your php.ini. No fussy recompiling of the entire PHP!

Depending on the cache and options used, you may have to perform a special operation whenever updating script files.