Phc-win
From wiki.swiftlytilting.com
phc-win is an open source PHP compiler for Windows. It compiles PHP scripts to PHP-native bytecode and then produces an EXE file containing your compiled code.
Contents |
How phc-win works
phc-win works in two stages, like many compilers. The first stage is the compilation stage, and the second stage is the actual exe building stage. The PHP extension bcompiler is used to compile PHP script code into PHP bytecode. This bytecode can be included just like any php file as long as the bcompiler extension is loaded. Once all the bytecode files have been created, a modified Embeder is used to pack all of the project files into the program exe.
Compiling a single PHP file
To compile a single file, select Compile single file from the File menu. Then select the file to compile.
Compiling a project folder
To build an EXE containing all files in a directory and all sub directories, choose Compile directory from the File menu. You will be prompted to select the project folder. Once you choose the project folder, you will be asked to choose the main program file.
phc-win will then scan all the files in the directory specified and all subdirectories. All files with php anywhere in the extension will be compiled into .phb files. These .phb files, along with all other files in directory and subdirectories will be added to the project exe.
Accessing embedded files - exe_resource
The files stored inside of the exe can be accessed via one of the following versions of the exe_resource wrapper function. When called from an uncompiled script, it returns the file location on the drive. Add one of the following function definitions to the top of your main program code, before any file access or includes:
Simple - Relative paths only
This is the most basic version of exe_resource. Only relative paths may be used, and the path is always relative to the main program file. $file must be in the format: ./filename.php or ./directory/filename.php
function exe_resource($file)
{ return defined('EMBEDED') ? 'res:///PHP/'.strtoupper(md5($file)):(getcwd() . "/$file");
}
Complex - Most path formats accepted
This function should properly convert all windows paths to the type expected by phc-win.
function exe_resource($file)
{ $file = str_replace('\\','/',$file);
$notembeded = $file;
if (!strpos($file, ':'))
{ if ($file[0] != '.' && $file[0] != '/')
{ $file = './'.$file;
}
$notembeded = getcwd() . ($file[0] != '/' ? '/' : '') . $file;
}
return defined('EMBEDED') ? 'res:///PHP/'.strtoupper(md5($file)):$notembeded;
}
Support files needed
The EXE files created with phc-win require the following support files:
- php5ts.dll
- php_win32std.dll
- php_bcompiler.dll
- php-embed.ini
All of these files are also needed to run phc-win, so you can simply copy the from the phc-win program folder. Once you have copied the support files, you will need to open php-embed.ini and comment out line which includes php_winbinder.dll.
Examples
For examples, see the source folder inside the phc-win program folder. The code there is all formatted to be compiled with phc-win.
Download
RSS Updates are available via SwiftlyTilting blog posts

