| 
<?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($fp, filesize($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( $path, 0755);
 }
 }
 function _getPHIPackages($ext = ".phi")    {
 $dir = @opendir( dirname(__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>
 |