Login   Register  
PHP Classes
elePHPant
Icontem

File: examples/Compiler.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Warren Smith  >  The (sort of) PHP Compiler  >  examples/Compiler.php  >  Download  
File: examples/Compiler.php
Role: Example script
Content type: text/plain
Description: An example to serve as a command line front-end for the class
Class: The (sort of) PHP Compiler
Obfuscate PHP code using filters and compression
Author: By
Last change:
Date: 2006-07-12 08:56
Size: 6,784 bytes
 

Contents

Class file image Download
#/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);
}

?>