#/usr/bin/php -q
<?php
//+----------------------------------------------------------------------+
//| The (sort of) PHP Compiler v0.1 |
//+----------------------------------------------------------------------+
//| Copyright (c) 2006 Warren Smith ( smythinc 'at' gmail 'dot' com ) |
//+----------------------------------------------------------------------+
//| This library is free software; you can redistribute it and/or modify |
//| it under the terms of the GNU Lesser General Public License as |
//| published by the Free Software Foundation; either version 2.1 of the |
//| License, or (at your option) any later version. |
//| |
//| This library is distributed in the hope that it will be useful, but |
//| WITHOUT ANY WARRANTY; without even the implied warranty of |
//| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
//| Lesser General Public License for more details. |
//| |
//| You should have received a copy of the GNU Lesser General Public |
//| License along with this library; if not, write to the Free Software |
//| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
//| USA |
//+----------------------------------------------------------------------+
//| Simple is good. |
//+----------------------------------------------------------------------+
//
/*
+----------------------------------------------------------------------+
| This is a command line application to serve both as a command line |
| front-end for, and an example of how to use, The (sort of) PHP |
| Compiler. Please refer to the PHP documentation for more information |
| on how to use PHP from the command line for your system. |
+----------------------------------------------------------------------+
*/
/*-----------------*/
/* I N C L U D E S */
/*-----------------*/
include_once('../Compiler.class.php');
/*---------------*/
/* D E F I N E S */
/*---------------*/
define('BANNER', 'The (sort of) PHP Compiler v0.1');
/*------------------*/
/* M A I N C O D E */
/*------------------*/
// If we have arguments
if ($argc > 1){
// This is the array of input files for the compiler
$InputFiles = array();
// Loop through each argument in the argv array because getopt() doesn't work on Windows
for($i = 1; $i < $argc; $i++){
// If this argument isn't a command
if ($argv[$i][0] != '-'){
// If we have no last command
if (!$LastCommand){
// Then we assume this is an input file
array_push($InputFiles, $argv[$i]);
} else {
// Use the $LastCommand as the variable name and this argument as the value
$$LastCommand = $argv[$i];
// We're done with this
unset($LastCommand);
}
} else {
// Switch through the commands
switch ($argv[$i][1]){
// Help command
case '-':
case '?':
case 'h':
// Show the usage instructions and exit
Usage();
break;
// Output file
case 'o':
// Make sure we set this variable on the next iteration
$LastCommand = 'OutputFile';
break;
// Filter command
case 'f':
// Make sure we set this variable on the next iteration
$LastCommand = 'Filter';
break;
// Number of characters per line command
case 'n':
// Make sure we set this variable on the next iteration
$LastCommand = 'CharsPerLine';
break;
// Setting the name of the variable that holds the obfuscated source
case 'v':
// Make sure we set this variable on the next iteration
$LastCommand = 'VariableName';
break;
// Custom shebang line
case 's':
// Make sure we set this variable on the next iteration
$LastCommand = 'ShebangLine';
break;
// Custom header comment
case 'c':
// Make sure we set this variable on the next iteration
$LastCommand = 'HeaderComment';
break;
// The version information
case 'V':
// Output the banner and exit
exit(BANNER."\n");
break;
}
}
}
// If we have no input files
if (!count($InputFiles)){
// Tell the user
exit('No input files specified. Do `'.$argv[0].' -h` for usage instructions'."\n");
}
// Instantiate the compiler object
$Compiler = new Compiler;
// If we have a valid alternative for the default number of chars per line, use it
if ($CharsPerLine && is_numeric($CharsPerLine)) $Compiler->CharsPerLine = $CharsPerLine;
// If we have an alternative for the default variable name, use it
if ($VariableName) $Compiler->VariableName = $VariableName;
// If we have a shebang line, use it
if ($ShebangLine) $Compiler->ShebangLine = $ShebangLine;
// If we have a header file (containing a comment block), use it
if ($HeaderComment && file_exists($HeaderComment)) $Compiler->HeaderComment = file_get_contents($HeaderComment);
// Compile our files and collect the output
$Output = $Compiler->Compile($InputFiles, $OutputFile, $Filters);
// If no output file was specified, output the output directly
if (!$OutputFile) echo $Output;
} else {
// Show the usage information
Usage($argv[0]);
}
// This is the usage function to show the user how to use this script
function Usage($appName){
// This is our usage information
echo BANNER."\n";
echo 'Copyright (c) 2006 Warren Smith ( smythinc \'at\' gmail \'dot\' com ). All rights reserved.'."\n";
echo ''."\n";
echo 'Usage: '.$appname.' [input files] [options]'."\n";
echo '-h'."\n";
echo ' This help.'."\n";
echo '-o'."\n";
echo ' The output file, if none is specified the compiled source is output to STDOUT.'."\n";
echo '-f'."\n";
echo ' The name of the extra filter to use, either "leet" or "octal".'."\n";
echo '-n'."\n";
echo ' The number of characters (not including indentation) to have per line.'."\n";
echo '-v'."\n";
echo ' The name of the variable to put the obfuscated code into.'."\n";
echo '-s'."\n";
echo ' The shebang line to put into the final file, eg. "#/usr/bin/php -q".'."\n";
echo '-c'."\n";
echo ' The name of the file containing the header comment block to add to the final code.'."\n";
echo '-V'."\n";
echo ' Show the version information'."\n";
echo ''."\n";
// Stop code execution
exit(-1);
}
?>
|