Login   Register  
PHP Classes
elePHPant
Icontem

File: phpizer.proc.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Asher Wolfstein  >  phpizer  >  phpizer.proc.php  >  Download  
File: phpizer.proc.php
Role: Auxiliary script
Content type: text/plain
Description: Equiv. Procedures for PHP3
Class: phpizer
Load and adapt class to current PHP version (3.x+)
Author: By
Last change: updated script to match others
Date: 7 years ago
Size: 9,365 bytes
 

Contents

Class file image Download
<?php

/* Advanced Versioning Procedures ( FOR PHP 3 )
 * Written by Asher Holley ( http://www.wolfoxinc.com/opensource/ )
 * Released under the GNU General Public License ( http://www.opensource.org/licenses/gpl-license.html )
 * Copyright  2006 Asher Holley
 *
 * These procedures are useful for determining what version of PHP you are running,
 *   as well as filtering included classes and function libraries so that the
 *   appropriate lines are executed for the appropriate PHP version.  Due to
 *   the scope of eval inside of a method/function global variables must be
 *   assigned using either the keyword global (not recommended) or through
 *   $GLOBALS (recommended) within the filtered file.
 *
 * PLEASE NOTE!!! THESE PROCEDURES ASSUME YOU ARE RUNNING PHP >= 3.0.9.  FOR PHP 4+
 *   PLEASE INCLUDE/REQUIRE THE .class.php FILE INSTEAD!
 *
 * In order to make this class 'compatible' or in the least parseable without
 *   errors, 'vars' were avoided along with any constructor.  You can use
 *   This class without making an instance of it.    */

require_once( 'phpizer.define.php' );
// require_once( 'filebase.class5.php' );

function include_file$filepath$options ) {
    if ( 
$options V_FILEBASE ) {
        
$filepath Filebase::inc_path() . DIR_SEP $filepath;
    }
    
    if ( 
$options V_INC_PATH ) {
        
$code file$filepath);
    } else {
        
$code file$filepath );
    }
        
    if ( !( 
$options V_TRUNC_PHP ) ) {
        
$code[0] = substr$code[0], );
        
$codecount$code ) - ] =
            
substr$codecount$code ) - ], 0, -);
        
$code join''$code );
    }
    
    
preg_match_allVL_FIND_PHP$code$l_matchesPREG_SET_ORDER PREG_OFFSET_CAPTURE );
    
preg_match_allVB_FIND_PHP$code$b_matchesPREG_SET_ORDER PREG_OFFSET_CAPTURE );
    
    
$matches array_merge$l_matches$b_matches );
    foreach ( 
$matches as $match ) {
        for ( 
$a 2$a 9$a++ ) {
            if ( !isset( 
$match[$a] ) ) {
                
$match[$a] = null;
            }
        }
            
        unset( 
$v1$v2$v1_1$v1_2$v1_3$v2_1$v2_2$v2_3 );
        if ( 
$v1_1 $match[2][0] ) {
            
$v1 $v1_1;
            if ( 
$v1_2 $match[3][0] ) {
                
$v1 .= ".$v1_2";
                if ( 
$v1_3 $match[4][0] ) {
                    
$v1 ".$v1_3";
                }
            }
        } else {
            
trigger_error'Phpizer::include_file range without start',
                        
E_USER_ERROR );
        }
        
        if ( 
$r $match[5][0] ) {
            if ( 
$match[6][0] ) {
                
$v2 $v2_1 $match[6][0];
                if ( 
$v2_2 $match[7][0] ? $match[7][0] : ) {
                    
$v2 ".$v2_2";
                }
                
                if ( 
$v2_3 $match[8][0] ? $match[8][0] : ) {
                    
$v2 ".$v2_3";
                }
            }
        }
            
        
$chg_set false;
        if ( isset( 
$v1_2 ) ) {
            if ( isset( 
$v1_3 ) ) {
                if ( !
$r ) {
                    if ( 
check_version$v1true ) ) {
                        
$chg_set true;
                    }
                } elseif ( isset( 
$v2 ) ) {
                    if ( 
check_version$v1 ) &&
                            ( 
check_version$v2true ) ||
                                !
check_version$v2 ) ) ) {
                        
$chg_set true;
                    }
                } else {
                    if ( 
check_version$v1 ) ) {
                        
$chg_set true;
                    }
                }
            } else {
                    if ( !
$r ) {
                        if ( 
check_version$v1 '.0' ) &&
                                !
check_version(
                                    
implode'.', array( $v1_1$v1_2 1'0' ) ) ) ) {
                            
$chg_set true;
                        }
                    } elseif ( isset( 
$v2 ) ) {
                        if ( 
check_version$v1 ) &&
                                ( 
check_version$v2true ) ||
                                    !
check_version$v2 ) ) ) {
                            
$chg_set true;
                        }
                    } else {
                        if ( 
check_version$v1 '.0' ) ) {
                            
$chg_set true;
                        }
                    }
                }
        } else {
            if ( !
$r ) {
                if ( 
check_version$v1 '.0.0' ) &&
                        !
check_version$v1 '.0.0' ) ) {
                    
$chg_set true;
                }
            } elseif ( isset( 
$v2 ) ) {
                    if ( 
check_version$v1 ) &&
                            ( 
check_version$v2true ) ||
                                !
check_version$v2 ) ) ) {
                        
$chg_set true;
                    }
            } else {
                if ( 
check_version$v1 '.0.0' ) ) {
                    
$chg_set true;
                }
            }
        }
        
        if ( 
$chg_set ) {
            
$chg[] = array( 'loc' => $match[0][1],
                            
'len' => strlen$match[0][0] ),
                            
'aft' => $match[1][0] );
        }
    }
    
    
$adjust 0;
    
usort$chg'cmp_rpl' );
    foreach ( 
$chg as $change ) {
        
$l strlen$code );
        
$code substr$code0$change['loc'] - $adjust ) .
                
$change['aft'] .
                
substr$code$change['loc'] - $adjust $change['len'] );
        
$adjust += $l strlen$code );
    }
    
    
$code preg_replace( array( VB_COMMENTVL_COMMENT ), ''$code );
    
$offlimits get_outer_sections$code );
    
$v_matches = array();
    
preg_match_all'/\$[a-zA-Z_][a-zA-Z0-9_]*/'$code$v_matchesPREG_OFFSET_CAPTURE );
    
$adjust 0;
    foreach( 
$v_matches[0] as $match ) {
        if ( 
$match[0] == '$GLOBALS' ) {
            break;
        }
        
        
$outer true;
        foreach ( 
$offlimits as $limit ) {
            if ( 
$match[1] >= $limit['s'] && $match[1] <= $limit['e'] ) {
                
$outer false;
                break;
            }
        }
        
        if ( 
$outer ) {
            
$code substr_replace$code'$GLOBALS[\'' $match[0] . '\']',
                        
$match[1] + $adjust 12strlen$match[0] ) );
            
$adjust++;
        }
    }
    
    if ( !( 
$options V_NOT_TRUNC_PHP ) ) {
        
$ret = eval( $code );
        return array( 
$ret$code );
    }
        
    return 
$code;
}
    
function 
get_outer_sections$code ) {
    
$l_matches $r_matches $c_matches $f_matches = array();
    
preg_match_all'/class\s*\w+\s*(extends.*)?\s*\{/Uis',
                
$code$c_matchesPREG_OFFSET_CAPTURE );
    
preg_match_all'/function\s*\w+\s*\(.*\)\s*\{/Uis',
                
$code$f_matchesPREG_OFFSET_CAPTURE );
    
preg_match_all'/(?<!\\\\)([\'"]).*(?<!\\\\)\\1/Uis',
        
$code$q_matchesPREG_OFFSET_CAPTURE );
    for ( 
$a 0$a count$q_matches[0] ); $a++ ) {
        if ( 
strlen$q_matches[0][$a][0] ) == ) {
            unset( 
$q_matches[0][$a] );
        }
    }
    
    
preg_match_all'/\{/'$code$l_matchesPREG_OFFSET_CAPTURE );
    
preg_match_all'/\}/'$code$r_matchesPREG_OFFSET_CAPTURE );
    
$mast array_merge$l_matches[0], $r_matches[0] );
    foreach ( 
$q_matches[0] as $loc ) {
        for ( 
$a 0$a count$mast ); $a++ ) {
            if ( ( 
$end_char $loc[1] + strlen$loc[0] ) ) < $mast[$a][1] ) {
                break;
            }
            
            if ( !
in_array$a$g ) ) {
                if ( 
$mast[$a][1] >= $loc[1] &&
                        
$mast[$a][1] <= $end_char ) {
                    unset( 
$mast[$a] );
                    
$g[] = $a;
                }
            }
        }
        
        
$c = array();
        if ( 
preg_match_all'/\\\\\\$[a-zA-Z_][a-zA-Z0-9_]*/',
                
$loc[0], $cPREG_OFFSET_CAPTURE ) ) {
            foreach ( 
$c[0] as $m ) {
                
$ret[] = array( 's' => $m[1] + $loc[1],
                                
'e' => ( $m[1] + $loc[1] ) + strlen$m[0] ) );
            }
        }
    }
    
    
$mast array_merge$c_matches[0], $f_matches[0], $mast );
    
usort$mast, array( 'Phpizer''cmp_tok' ) );
    
reset$mast );
    while ( ( 
$e_tok each$mast ) ) !== false ) {
        
$tok $e_tok[1];
        
$s = array( 's' => 0'e' => );
        
$bcount 0;
        if ( 
substr$tok[0], 0) == 'class' ) {
            
$s['s'] = $tok[1];
            
$e_tok each$mast );
            if ( 
$e_tok[1][0] != '{' ) {
                
trigger_error'Phpizer::get_outer_sections class token not ' .
                            
'followed by bracket'E_USER_ERROR );
            } else {
                
$bcount++;
            }
            
            while ( ( 
$e_tok each$mast ) ) !== false ) {
                
$tok $e_tok[1];
                if ( 
$tok[0] == '{' ) {
                    
$bcount++;
                } elseif ( 
$tok[0] == '}' ) {
                    
$bcount--;
                }
                
                if ( 
$bcount == ) {
                    
$s['e'] = $tok[1];
                    break;
                }
            }
        } elseif ( 
substr$tok[0], 0) == 'function' ) {
            
$s['s'] = $tok[1];
            
$e_tok each$mast );
            if ( 
$e_tok[1][0] != '{' ) {
                
trigger_error'Phpizer::get_outer_sections class token not ' .
                            
'followed by bracket'E_USER_ERROR );
            } else {
                
$bcount++;
            }
            
            while ( ( 
$e_tok each$mast ) ) !== false ) {
                
$tok $e_tok[1];
                if ( 
$tok[0] == '{' ) {
                    
$bcount++;
                } elseif ( 
$tok[0] == '}' ) {
                    
$bcount--;
                }
                
                if ( 
$bcount == ) {
                    
$s['e'] = $tok[1];
                    break;
                }
            }
        }
        
        
$ret[] = $s;
    }
    
    return 
$ret;
}
    
// Sorting algorithm for outer sections code
function cmp_tok$a$b ) {
    if ( 
$a[1] == $b[1] ) {
        return 
0;
    }
    
    return ( 
$a[1] < $b[1] ) ? -1;
}
    
// Sorting for replacements
function cmp_rpl$a$b ) {
    if ( 
$a['loc'] == $b['loc'] ) {
        return 
0;
    }
    
    return ( 
$a['loc'] < $b['loc'] ) ? -1;
}

    
/* from php.net anonymous
 * modified by Asher Holley
 * if $req is '>=' PHP_VERSION returns true else return false */
function check_version$req$opt false ) {
    list( 
$c_major$c_minor$c_edit ) = split'[/.-]'PHP_VERSION );
    list( 
$r_major$r_minor$r_edit ) = split'[/.-]'$req );

    
// Asher Holley modification
    
if ( $opt ) {
        if ( 
$c_major == $r_major ) {
            if ( 
$c_minor == $r_minor ) {
                if ( 
$c_edit == $r_edit ) {
                    return 
true;
                } else {
                    return 
false;
                }
            } else {
                return 
false;
            }
        } else {
            return 
false;
        }
    }
    
    if ( 
$c_major $r_major ) {
        return 
true;
    } else if ( 
$c_major $r_major ) {
        return 
false;
    }

    
// same major - check minor
    
if ( $c_minor $r_minor ) {
        return 
true;
    } else if ( 
$c_minor $r_major ) {
        return 
false;
    }

    
// same minor - check edit
    
if ( $c_edit $r_edit ) {
        return 
true;
    } else if ( 
$c_edit $r_edit ) {
        return 
false;
    }
    
    
// equal versions
    
return true;
}

?>