Login   Register  
PHP Classes
elePHPant
Icontem

File: tiny_php_package_installer.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Robert Kummer  >  package  >  tiny_php_package_installer.php  >  Download  
File: tiny_php_package_installer.php
Role: Application script
Content type: text/plain
Description: tiny php-package maker is used for the self extracting .phx.php files
Class: package
php package maker and installer
Author: By
Last change: bugs fixed
Date: 2002-09-04 14:00
Size: 4,362 bytes
 

Contents

Class file image Download
<?php
/*
    package::i.tools
    tiny installer
    
    php-packages    v1.0    -    www.ipunkt.biz
    
    (c)    2002 - www.ipunkt.biz (rok)
*/
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
class 
phi_package
{
    var 
$package_files;
    var 
$files;
    var 
$is_phx false;
    function 
phi_package($file '')    {
        if ( 
defined("PHX_STREAM") )    $this->is_phx true;
        if ( !
$this->is_phx )    {
            if ( 
$file == '')    $this->package_files $this->_getPHIPackages();
            else    {
                if ( 
is_array($file) )    $this->package_files $file;
                else    
$this->package_files = array($file);
            }
            if ( empty(
$this->package_files) )    die('no package files found');
        }
    }
    function 
extract()    {
        if ( !
$this->is_phx )    {
            foreach ( 
$this->package_files as $package_file )    {
                
$fp fopen($package_file'rb');
                if ( 
$fp )    $package_string fread($fpfilesize($package_file));
                
fclose($fp);
                
$this->files[] = unserialize($package_string);
            }
        }    else    {
            
$this->files[] = unserialize(PHX_STREAM);
        }
        if ( 
$this->_decodeFiles() )
            if (
$this->writeFiles() )    {
                
$this->_do();
                
$this->_cleanup();
                return 
true;
            }
            else return 
false;
        else
            return 
false;
    }
    function 
writeFiles()    {
        
$p 0;
        foreach ( 
$this->files as $file )    {
            for (
$f=0$f $this->_getFileCountForPackage($p); $f++)    {
                if ( 
$file[$f]['path'] != '' )    $this->_mkdir($file[$f]['path']);
                
$path_to_file = ($file[$f]['path'] == '') ? $file[$f]['file'] : $file[$f]['path'].$file[$f]['file'];
                
$fp fopen($path_to_file'wb');
                if ( 
$fp )    fwrite($fp$file[$f]['string'], $file[$f]['size']);
                else    return 
false;
                
fclose($fp);
            }
            
$p++;
        }
        return 
true;
    }
    function 
_mkdir($path)    {
        if ( !
is_dir($path) )    {
            if ( !
is_dir(dirname($path)) )    $this->_mkdir(dirname($path));
            
mkdir$path0755);
        }
    }
    function 
_getPHIPackages($ext ".phi")    {
        
$dir = @opendirdirname(__FILE__) );
        
$phi_files = array();
         while ( 
false !== ( $file = @readdir($dir) ) )    {
            if ( 
strstr($file$ext) )    $phi_files[] = $file;
        }
        @
closedir($dir);
        return 
$phi_files;
    }
    function 
_decodeFiles()    {
        for (
$p=0$p count($this->files); $p++)    {
            for (
$f=0$f $this->_getFileCountForPackage($p); $f++)    {
                
$this->files[$p][$f]['string'] = base64_decode$this->files[$p][$f]['string'] );
                if ( 
$this->files[$p]['package']['config']['compress'] == 'gzip' )    {
                    if ( !
function_exists("gzuncompress") || !extension_loaded('zlib') )    die("FATAL ERROR: missing zlib");
                    
set_time_limit(5);
                    
$this->files[$p][$f]['string'] = gzuncompress$this->files[$p][$f]['string'] );
                    if ( 
$this->files[$p][$f]['string'] === false )    die("FATAL ERROR: could not uncompress");
                }
            }
        }
        return 
true;
    }
    function 
_getFileCountForPackage($p)    {
        
$keys array_keys($this->files[$p]);
        foreach( 
$keys as $k => $v)
            if ( !
is_numeric($v) )    unset($keys[$k]);
        return 
count($keys);
    }
    function 
_do()    {
        
$do_files '';
        for (
$f=0$f count($this->files); $f++)    {
            if ( 
is_array($this->files[$f]['package']['config']['do']) )    {
                foreach ( 
$this->files[$f]['package']['config']['do'] as $file )    {
                    
$do_files[] = $file;
                }
            }
        }
        if ( 
is_array($do_files) )    {
            echo 
'<body onload="javascript:';
            
$i 0;
            foreach( 
$do_files as $do_file )    {
                echo 
'f'.$i.'=window.open(\''.$do_file.'\', \'f'.$i.'\', \'\'); ';
                
$i++;
            }
            echo 
'">';
        }    else
            echo 
'<body>';
    }
    function 
_cleanup()    {
        
$do_cleanup '';
        for (
$f=0$f count($this->files); $f++)    {
            if ( 
is_array($this->files[$f]['package']['config']['cleanup']) )    {
                foreach ( 
$this->files[$f]['package']['config']['cleanup'] as $file )    {
                    if ( 
$file === 'package' )    $do_cleanup[] = ( $this->is_phx ) ? __FILE__ $this->package_files[$f];
                    elseif ( 
$file === 'installer' )    $do_cleanup[] = __FILE__;
                    else    
$do_cleanup[] = $file;
                }
            }
        }
        if ( 
is_array($do_cleanup) )    {
            foreach( 
$do_cleanup as $do_file )    {
                
unlink($do_file);
            }
        }
    }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>php-package-installer v1.0</title>
</head>
<?
$phi 
= new phi_package();
if ( 
$phi->extract() )    echo "well done";
else    echo 
"error occured";
?>
</body>
</html>