Extension:PHPTemplates

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual - list
Crystal Clear action run.png
PHPTemplates

Release status: experimental

Implementation Tag
Description allows execution of PHP code embedded in pages
Author(s) Tim.landscheidttalk
Latest version 0.1dev
MediaWiki 1.19svn
PHP 5.2.13
License GNU General Public License 3.0
Download Project page

Git [Help]
Commit history
Note:
No localisation updates are provided by translatewiki.net.

Tags
phpcode
Hooks used
ParserFirstCallInit

Translate the PHPTemplates extension if possible

Check usage and version matrix; code metrics

What can this extension do?[edit | edit source]

This extension allows you to embed white-listed PHP code in pages. Why the misnomer "PHPTemplates"? Because ultimately for reviewing code similar to Extension:FlaggedRevs, it would be nice to limit PHPTemplates's scope to templates starting with <?php. However, it is much easier at this time to plug into the MediaWiki parser via the general tag hook.

Usage[edit | edit source]

<phpcode>$a=$b+$c;echo($a);</phpcode>

That's all at this moment (yes, it will output "0"). The PHP grammar is rather complex, and trimming it down takes time.

Download instructions[edit | edit source]

Please copy and paste the code found at GitHub and place it under $IP/extensions/PHPTemplates/. Note: $IP stands for the root directory of your MediaWiki installation, the same directory that holds LocalSettings.php.

Installation[edit | edit source]

To install this extension, add the following to LocalSettings.php:

require_once("$IP/extensions/PHPTemplates/PHPTemplates.php");

Limiting your users' freedom[edit | edit source]

You can enhance PHPTemplates to somewhat cap the resources used. Duly note that enhancing in this context means amending the grammar and generating a new parser.

Validation[edit | edit source]

While parsing the source, you can count the number of statements and their levels of nesting and require that certain limits are not exceeded.

Runtime[edit | edit source]

Instead of just validating the source, you can amend it on the fly and transform for example:

while (true);

to:

while (wfAbortIfResourcesLimitExceeded () && (true));

There will probably be some bombs that cannot be guarded against this way, but it should cover most common mistakes.

See also[edit | edit source]

Language: English  • 日本語