Skip to content
Runkit (official PECL PHP Runkit extension)
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests revert log_level, only ignore final output Oct 20, 2015
LICENSE Fix LICENSE by adding original author's name and contribution years. Oct 17, 2015
README Update README Oct 20, 2015 Update Oct 20, 2015
config.m4 fix building with old gcc Sep 23, 2015
config.w32 fixed windows build with all features disabled, added windows configu… Dec 10, 2011
package.xml eliminate warnings about type-punning Dec 8, 2015
php_runkit.h don't bother about the length of string on removing a leading slash b… Oct 11, 2015
php_runkit_hash.h fix years and emails in copyright info blocks Sep 25, 2015
php_runkit_sandbox.h fix years and emails in copyright info blocks Sep 25, 2015
php_runkit_zval.h fix years and emails in copyright info blocks Sep 25, 2015
runkit.c grammar fix Oct 1, 2015
runkit.dsp And might as well fix the PHP4/Win32 build while we're at it Jun 6, 2006
runkit_classes.c fix years and emails in copyright info blocks Sep 25, 2015
runkit_constants.c Use same helper function for normalizing constants' namespaces Oct 11, 2015
runkit_functions.c eliminate warnings about type-punning Dec 8, 2015
runkit_import.c fix years and emails in copyright info blocks Sep 25, 2015
runkit_methods.c Make runkit_methods.c use common helper macro to strip leading \ Oct 11, 2015
runkit_props.c fix years and emails in copyright info blocks Sep 25, 2015
runkit_sandbox.c eliminate warnings about type-punning Dec 8, 2015
runkit_sandbox_parent.c fix years and emails in copyright info blocks Sep 25, 2015
tsrm_5.0.diff Update PHP 5.0 tsrm interpreter context backpatch. Aug 30, 2005

Runkit extension for PHP

For all those things you.... probably shouldn't have been doing anyway.... but surely do!

Feel free to support Dmitry Zenovich via PayPal ( if Runkit serves you. By making donation you invest in the project's future, helping it to be compatible with current PHP versions and to have less bugs and more features.


Runkit has three groups of features outlined below:


A new .ini entry runkit.superglobal is defined which may be specified as a simple variable, or list of simple variables to be registered as superglobals. runkit.superglobal is defined as PHP_INI_SYSTEM and must be set in the system-wide php.ini.





function testme() {
  echo "Foo is $foo\n";
  echo "Bar is $bar\n";
  echo "Baz is $baz\n";
$foo = 1;
$bar = 2;
$baz = 3;



Foo is 1
Bar is 2
Baz is

Compatability: PHP 5.0 or greater


Userdefined functions and userdefined methods may now be renamed, delete, and redefined using the API described at

Examples for these functions may also be found in the tests folder.

Compatability: PHP5


With the introduction of TSRM based subinterpreter support a running PHP script may now generate a new thread and interactively switch contexts back and forth between it. THIS FEATURE DOES NOT PROVIDE FULL SCRIPT THREADING. This feature only allows you to run processes in a subinterpreter optionally with additional security.

First, create an instance of the Runkit_Sandbox object:

$php = new Runkit_Sandbox();

To read and write variables in this subinterpreter, just access the properties of the object:

$php->foo = 'bar';
$php->baz = 'boom';

Individual functions may also be called (executed within the newly created scope):


Or you can execute a block of arbitrary code:

$php->eval('echo "The value of foo is $foo\n";');

In this example, $foo will be interpolated as 'bar' since that's what you set it to earlier.

Certain INI Options which are ordinarily only modifiable in the system php.ini may be passed during instantiation and changed for your subinterpreter as well, these options are passed as an associative array to the Runkit_Sandbox constructor and include the following:

Setting Comment
safe_mode safe_mode may only be turned on for a Runkit_Sandbox interpreter using this option. It cannot be turned off, doing so would circumvent the setting specified by your system administrator in the system php.ini.
open_basedir Like safe_mode, you can only use this setting to make things more restrictive.
allow_url_fopen, allow_url_include In keeping with safe_mode, these can only be turned off (more restrictive than global environment)
disable_functions Any function names specified in this coma-delimited list will be disabled IN ADDITION TO already disabled functions
disable_classes Like disable_functions, this list is in addition to already disabled classes.

Sandboxing is ONLY AVAILABLE in PHP 5.1 (release version, or snapshot dated after April 28th, 2005) when thread safety has been enabled. To enable thread safety, just make sure that --enable-maintainer-zts is specified on your ./configure line. This doesn't necessarily mean that your SAPI will use PHP in a threaded manner, just that PHP is prepared to behave that way. If you're building for Apache2-Worker then you're already built for thread safety.

If you wish/need to use PHP 5.0.x, or a cvs snapshot of 5.1 which predates April 28th, you can apply the tsrm_5.0.diff patch included in this package:

cd /path/to/php-5.0.x/
cat /path/to/runkit/tsrm_5.0.diff | patch -p0

Then just rebuild using the --enable-maintainer-zts option specified above.

runkit_lint() and runkit_lint_file() also exist as a simpler approach to verifying the syntactic legality of passed code within an isolated environment.


pecl install runkit


git clone
cd runkit
make test
sudo make install


First, place source code of runkit into a temporary directory, for example "C:\runkit-source". Open your Windows SDK command prompt or Visual Studio Command prompt. Then change into the runkit's source code directory:

cd C:\runkit-source

After that, run phpize from your PHP SDK. This may be something like


Then configure your runkit module by executing "configure". You can view the full list of options by the command

configure --help

but in most cases, you probably will choose a simple command

configure --enable-runkit

After all run


Now you should have the "php_runkit.dll" file.

You can’t perform that action at this time.