Вход Регистрация
Файл: setuper.php
Строк: 555
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP Setuper</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<meta name="Description" content="PHP Setuper. Copyright (c) Sergey Stepanov AKA Xintrea, 2005."/>
</head>

<body bgcolor="#FFFFFF" text="#101010" topmargin="10" leftmargin="10" rightmargin="10">

&nbsp;<BR>

<center>
<table WIDTH=450 BORDER=1 CELLPADDING=5 CELLSPACING=5>

<tr><td bgcolor=#5080FF align=center>
<B>PHP Setuper v.1.18</B>
</td></tr>

<tr><td>

<?php

 
global $HTTP_POST_VARS$HTTP_GET_VARS;
 if(isset(
$HTTP_GET_VARS))     RegisterGlobalVariables($HTTP_GET_VARS);
 if(isset(
$HTTP_POST_VARS))    RegisterGlobalVariables($HTTP_POST_VARS);
 if(isset(
$_GET))              RegisterGlobalVariables($_GET);
 if(isset(
$_POST))             RegisterGlobalVariables($_POST);

 
$doc_name="setuper.php";

 if(isset(
$setupstart) and isset($packagename) and isset($packagefile) and isset($packageurl))
  {
   if(
$setupstart==1)createsetup($doc_name,$packagename,$packagefile,$packageurl);
  }
 else 
printconfirm($doc_name);


function 
printconfirm($doc_name)
{
 print 
'<BR>
        Программа PHP Setuper сейчас создаст файл инсталляции.
        Программа запомнит все файлы и дерево подкаталогов,
        аккуратно сложит эти данные в один php-скрипт.<BR>
        <BR>
        Сгенерированный инсталляционный файл
        можно запустить в другом месте, и все каталоги с файлами
        будут распакованы так, как будто были извлечены из архива.<BR>
        <BR>
        Процесс упаковки может занять продолжительное время, 
        до нескольких минут.<BR>
        <BR>
        <BR>
        <center>'
;
       
 print 
'<form name="confirm" action="'.$doc_name.'?&setupstart=1" method="post">
        <center>
        <table width=85% border=0 CELLPADDING=5 CELLSPACING=5>
        <tr><td valign="top">Название пакета</td>
        <td valign="top"> 
        <input type="text" size="32" name="packagename" value="Super Script by Author" class="inp"><BR><BR>
        </td></tr>
        <tr><td valign="top"><NOBR>Имя создаваемого</NOBR> файла</td>
        <td valign="top">
        <input type="text" size="32" name="packagefile" value="setup.php" class="inp"><BR><BR>
        </td></tr>
        <tr><td valign="top"><NOBR>Url первой страницы</NOBR></td>
        <td valign="top">
        <input type="text" size="32" name="packageurl" value="index.html" class="inp"><BR><BR>
        </td></tr>
        </table>
        <BR>
        <input type="submit" name="confirmbutton" value="Создать" class="btn">
        </center>
        </form>'
;

 print 
'</center>'

}

function 
createsetup($doc_name,$packagename,$packagefile,$packageurl)
{

 
$startpath=realpath("./");
 
$log="";

 
$uk=@fopen($packagefile,"wt");

 if(
$uk===false)
  {
   echo 
'Ошибка! Права на каталог, в котором находится файл <b>setuper.php</b>,
         не позволяют данному скрипту создать файл <b>setup.php</b><br/><br/>.
         Установите нужные права на каталог <b>'
.dirname(__FILE__).'</b>, 
         и снова в браузере запустите <b>setuper.php</b><br/><br/>'
;
   return;
  }

 
// Запись начала кода инсталляции
 
fputs($uk,setupcode_begin());

 
// Оформление данных как комментария
 
fputs($uk,"n<!--nn");

 
// Запись параметров пакета
 
fputs($uk,"[package]n");
 
fputs($uk,"name=".$packagename."n");
 
fputs($uk,"firsturl=".$packageurl."n");
 
fputs($uk,"setupfile=".$packagefile."nn");

 
// Запись дерева каталогов
 
fputs($uk,"[dirtree]n");

 
// Загрузка дерева каталогов и сразу вспоминание текущего каталога т.к.
 // текущий каталог был изменен в функции get_dir_tree()
 
$filesindirget_dir_tree(".");
 
chdir($startpath);

 
$log=$log."Saving directory tree...n";

 for(
$i=0;$i<count($filesindir);$i++)
  {
   
$log=$log.$filesindir[$i]."n";
   
$permit=substr(sprintf('%o'fileperms($filesindir[$i])), -4);
   
fputs($uk,"dir=".$permit." ".$filesindir[$i]."n");
  } 

 echo 
"<BR>n";
 
fputs($uk,"n");


 
// Чтение списка файлов и сразу вспоминание текущего каталога т.к.
 // текущий каталог изменяется в функции get_file_list()
 
$filesindirget_file_list(".");
 
chdir($startpath);

 
// Сохранение файлов и их содержимого
 
$log=$log."nnSaving all finding files...n";

 for(
$i=0;$i<count($filesindir);$i++)
  {
   
$fname=$filesindir[$i];
   
// $fname=preg_replace("/^./(.*?)/","\1",$fname);

   // Файлы генерации установки добавлять ненужно
   
if(strcmp($fname,"./".$packagefile)==or strcmp($fname,"./".$doc_name)==0)
    continue;

   
$log=$log.$fname."n";
   
// $data=base64_encode(fread(fopen($fname, "rb"), filesize($fname)));
   
$data=base64_encode(gzdeflate(fread(fopen($fname"rb"), filesize($fname))));
   
fputs($uk,"[filedata]n");

   
$permit=substr(sprintf('%o'fileperms($fname)), -4);
   
fputs($uk,"file=".$permit." ".$fname."n");

   
fputs($uk,"data=".$data."nn");
  }

 
// Оформление данных как комментария
 
fputs($uk,"-->n");

 
// Запись конца кода инсталляции
 
fputs($uk,setupcode_end());
 
 
fclose($uk);

 echo 
'Генерация инсталляционного файла '.$packagefile.'<BR>';

 echo 
'<center>
       <form name="result" action="'
.$doc_name.'" method="post"><BR>
       <textarea name="text" cols="50" rows="10" class="inp">'
.$log.'</textarea><BR><BR>
       </form>
       </center>'
;

 echo 
'Файл <B>'.$packagefile.'</B> сгенерирован.<br/><br/> 
       Он находится в том же каталоге, что и <B>'
.$doc_name.'</B>.<br/>
       <br/>
       <br/>
       <center>Спасибо, что воспользовались программой <nobr>PHP Setuper!</nobr><br/>
       &nbsp;</center>'
;
}


function 
get_file_list($dir) {
   
$arrfiles = array();
   if (
is_dir($dir)) {
       if (
$handle opendir($dir)) {
           
chdir($dir);
           while (
false !== ($file readdir($handle))) { 
               if (
$file != "." && $file != "..") { 
                   if (
is_dir($file)) { 
                       
$arr get_file_list($file);
                       foreach (
$arr as $value) {
                           
$arrfiles[] = $dir."/".$value;
                       }
                   } else {
                       
$arrfiles[] = $dir."/".$file;
                   }
               }
           }
           
chdir("../");
       }
       
closedir($handle);
   }
   return 
$arrfiles;
}


function 
get_dir_tree($dir
{
  
$arrfiles = array();
  if (
is_dir($dir)) 
   {
    if (
$handle opendir($dir)) 
     {
      
chdir($dir);
      while (
false !== ($file readdir($handle))) 
       { 
        if (
$file != "." && $file != ".."
     { 
          if (
is_dir($file)) 
           { 
            
$arr get_dir_tree($file);
        
$arrfiles[] = $dir."/".$file;
            foreach (
$arr as $value
         {
              
$arrfiles[] = $dir."/".$value;
             }
           } 
         }
       }

      
chdir("../");
 
     }

    
closedir($handle);

   }

  return 
$arrfiles;

}


function 
RegisterGlobalVariables($HTTP_VARS) {
 if (isset(
$HTTP_VARS)) {
  if (
count($HTTP_VARS) > 0) {

   if (
get_magic_quotes_runtime() || get_magic_quotes_gpc()) {
    for (
reset($HTTP_VARS); current($HTTP_VARS); next($HTTP_VARS)) {
     
$var_name key($HTTP_VARS);
     
$GLOBALS[$var_name] = stripslashes($HTTP_VARS[$var_name]);
    }
   }
   else {
    for (
reset($HTTP_VARS); current($HTTP_VARS); next($HTTP_VARS)) {
     
$var_name key($HTTP_VARS);
     
$GLOBALS[$var_name] = $HTTP_VARS[$var_name];
    }
   }

  }
 }
}


///////////////////////////////////////////////////////////////////////////////
// Код для инсталляции. Первая часть.
///////////////////////////////////////////////////////////////////////////////
function setupcode_begin()
{

 
$code='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP Setuper</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body bgcolor="#FFFFFF" text="#101010" topmargin="10" leftmargin="10" rightmargin="10">

&nbsp;<BR>

<center>
<table WIDTH=450 BORDER=1 CELLPADDING=5 CELLSPACING=5>

<tr><td bgcolor=#5080FF align=center>
<B>PHP Setuper v.1.18 (Setup module)</B>
</td></tr>

<tr><td>

<?php

 global $HTTP_POST_VARS, $HTTP_GET_VARS;
 if(isset($HTTP_GET_VARS))     RegisterGlobalVariables($HTTP_GET_VARS);
 if(isset($HTTP_POST_VARS))    RegisterGlobalVariables($HTTP_POST_VARS);
 if(isset($_GET))              RegisterGlobalVariables($_GET);
 if(isset($_POST))             RegisterGlobalVariables($_POST);

 $doc_name=basename(__FILE__);
 
 if(isset($setupstart))
  {
   if($setupstart==1)startsetup($doc_name);
  }
 else printconfirm($doc_name);


function printconfirm($doc_name)
{
 print "<BR>
        <center>
        Установка <B>".getoneparam($doc_name,"package","name")."</B>.<BR>
        </center>
        <BR>
        Сейчас будут созданы все необходимые файлы, 
        входящие в пакет <FONT COLOR=#757575>".getoneparam($doc_name,"package","name").".</FONT>
        Для начала распаковки нажмите кнопку "Установить".<BR>
        <BR>
        <BR>";
       
 print "<center>
        <form name=confirm action=".$doc_name."?&setupstart=1 method=post>
        <center>
        <input type=submit name=confirmbutton value=Установить class=btn>
        </center>
        </form>
        </center>";

 print "<BR>
        Процесс распаковки может занять продолжительное время, 
        до нескольких минут.<BR>
        <BR>
        <BR>";
}


function startsetup($doc_name)
{

 $log="";
 $is_error=false;

 $log=$log."Create directory tree...n";

 // Получение дерева директорий
 $dirtree=getsavetree($doc_name);
 if($dirtree===false)
  $is_error=true;

 // Создание дерева директорий
 for($i=0;$i<count($dirtree);$i++)
  {
   $line=preparestring($dirtree[$i]);
   $mode=substr($line,0,4);
   $dirname=substr($line,5,strlen($line)-5);

   $log=$log.$dirname."n";

   // Создание каталога
   // $result=@mkdir($dirname,octdec($mode));
   $result=@mkdir($dirname, 0777);

   if(!$result)
    {
     $log=$log."Каталог ".$dirname." не создан.nВозможно, этот каталог уже существует, или на каталог ".dirname(__FILE__)." заданы неправильные праваnn"; 
     $is_error=true;
    }
  }


 $log=$log."nCreate all files...n";

 $result=findandcreatefile($doc_name);
 $log.=    $result["log"];
 $is_error=$result["err"];


 $log.="nSet permit to directories...n";

 $log.=setpermittodir($dirtree);


 echo "Распаковка файлов и директорий <BR>";

 echo "<center>
       <form name=result action=".$doc_name." method=post><BR>
       <textarea name=text cols=50 rows=10 class=inp>".$log."</textarea><BR><BR>
       </form>
       </center>";

 if(!$is_error)
  {
   echo "Пакет <B>".getoneparam($doc_name,"package","name")."</B> установлен.
         Пожалуйста, не забудьте удалить файл инсталляции <B>".$doc_name."</B>.<BR>
         <BR>";

   // <input type=button name=confirmbutton value=Готово class=btn onClick="javascript:window.location.href=".getoneparam($doc_name,"package","firsturl")."">

   echo "<center>
         <BR>
         <a href=".getoneparam($doc_name,"package","firsturl").">Перейти на первую страницу</br>установленного пакета</a><BR>
         <BR>
         <BR>
         </center>";
  }
 else
  echo "<b>При установке возникли ошибки.</b> Пакет не установлен. Проанализируйте вышеприведенный лог, и устраните ошибки.<br/><br/>";

 echo "<center>Спасибо, что воспользовались программой <nobr>PHP Setuper!</nobr><BR>
       &nbsp;</center>";
}


function getoneparam($doc_name,$rasdelname,$valname)
{
 $uk=fopen($doc_name,"rt");

 // Поиск начала данных
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   if(strcmp(preparestring($line),"<!--")==0)
    {
     $findflag=1;
     break;
    }
  }

 // Если начало данных не найдено, печатается ошибка
 if($findflag==0)
  {
   echo "Error! Start signature not found.";
   fclose($uk);
   return;
  }

 // Поиск названия секции
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   if(strcmp(preparestring($line),"[".$rasdelname."]")==0)
    {
     $findflag=1;
     break;
    }
  }
  
 // Если название секции не найдено, печатается ошибка
 if($findflag==0)
  {
   echo "Error! Section ".$rasdelname." not found.";
   fclose($uk);
   return;
  }

 // Поиск названия параметра
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   $tmpline=substr(preparestring($line),0,strlen($valname)+1);
   // echo $tmpline."<BR>n";
   if(strcmp($tmpline,$valname."=")==0)
    {
     $findflag=1;
     break;
    }
  }

 // Если название параметра не найдено, печатается ошибка
 if($findflag==0)
  {
   echo "Error! Parameter ".$valname." in section ".$rasdelname." not found.";
   fclose($uk);
   return;
  }

 $line=substr($line,strlen($valname)+1,strlen($line)-strlen($valname));

 fclose($uk);

 return $line;
}


function getsavetree($doc_name)
{
 $uk=@fopen($doc_name,"rt");
 if($uk===false)
  {
   echo "Error! Can not open file ".basename(__FILE__)." for reading. May be web-server disable reading contents from PHP-script";
   return false;
  }

 // Поиск начала данных
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   if(strcmp(preparestring($line),"<!--")==0)
    {
     $findflag=1;
     break;
    }
  }

 // Если начало данных не найдено, печатается ошибка
 if($findflag==0)
  {
   echo "Error! Start signature not found.";
   fclose($uk);
   return false;
  }

 // Поиск названия секции
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   if(strcmp(preparestring($line),"[dirtree]")==0)
    {
     $findflag=1;
     break;
    }
  }
  
 // Если название секции не найдено, печатается ошибка
 if($findflag==0)
  {
   echo "Error! Section [dirtree] not found.";
   fclose($uk);
   return false;
  }

 // Поиск всех элементов dir
 $valname="dir";
 $i=-1;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   $tmpline=substr(preparestring($line),0,strlen($valname)+1);
   // echo $tmpline."<BR>n";
   if(strcmp($tmpline,$valname."=")==0)
    {
     $i=$i+1;
     $dirtree[$i]=substr(preparestring($line),strlen($valname)+1,strlen($line)-strlen($valname)-1);
    }

   // После секции dirtree обязательно должна следовать секция filedata
   // Если она найдена, поиск элементов прекращается
   if(strcmp(preparestring($line),"[filedata]")==0)break;
  }

 if($i<0)
  {
   echo "Error! Section [dirtree] is empty";
   fclose($uk);
   return false;
  }

 fclose($uk);
 
 return $dirtree;
}


function findandcreatefile($doc_name)
{
 $uk=fopen($doc_name,"rt");

 // Поиск начала данных
 $findflag=0;
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);
   if(strcmp(preparestring($line),"<!--")==0)
    {
     $findflag=1;
     break;
    }
  }

 // Если начало данных не найдено, печатается ошибка
 if($findflag==0)
  {
   fclose($uk);

   $result=array();
   $result["log"]="Error! Start signature not found.";
   $result["err"]=true;
   return $result;
  }

 // Последовательно ищутся все разделы [file] до конца данных
 $log="";
 while(!feof($uk))
  {
   $line=fgets($uk,1000000);

   // Если считана строка [filedata] то две следующие 
   // обязательно будут file и data
   if(strcmp(preparestring($line),"[filedata]")==0)
    {
     $linefile=preparestring(fgets($uk,1000000));
     $linedata=fgets($uk,1000000);

     $valname="file";
     $line=substr($linefile,strlen($valname)+1,strlen($linefile)-strlen($valname)-1);
     
     $mode=substr($line,0,4);

     $filename=substr($line,5,strlen($line)-5);

     // $log=$log."Mode ".$mode." File name ".$filename."n";
     $log=$log.$mode." ".$filename."n";

     $valname="data";
     $line=substr($linedata,strlen($valname)+1,strlen($linedata)-strlen($valname)-1);

     // $data=base64_decode($line);
     $data=gzinflate(base64_decode($line));

     // Создание файла
     $uk2=@fopen($filename,"wb");
     if($uk2===false)
      {
       $result=array();
       $result["log"]=$log."Ошибка. Невозможно создать файл ".$filename."nВозможно, на каталог ".dirname(__FILE__)." или ".dirname($filename)." установлены неправильные права.n";
       $result["err"]=true;
       return $result;
      }
     else
      {
       fwrite($uk2,$data);
       fclose($uk2);

       // Установка UNIX-прав на файл
       $result=@chmod($filename,octdec($mode));
       if(!$result)
        {
         $result=array();
         $result["log"]=$log."Ошибка установки прав на файл ".$filename."nВозможно, на сервере включен режим SAFE MODE.nn";
         $result["err"]=true;
         return $result;
        }
      }

    }
  }

 fclose($uk);

 $result=array();
 $result["log"]=$log;
 $result["err"]=false;
 return $result;
}


// Установка запомненных прав на директории
function setpermittodir($dirtree)
{
 $log="";
 
 // Генерируется массив имен директорий, упорядоченный по вложенности
 // И выясняется максимальная вложенность директорий
 $max_slash_count=0;
 $indent_dir_tree=array();
 for($i=0;$i<count($dirtree);$i++)
  {
   $line=preparestring($dirtree[$i]);
   $mode=substr($line,0,4);
   $dirname=substr($line,5,strlen($line)-5);

   $slash_count=0;
   if(strpos($dirname, "/")!==false)
    $slash_count=substr_count($dirname, "/");
   if(strpos($dirname, chr(92))!==false)
    $slash_count=substr_count($dirname, chr(92));

   if($slash_count > $max_slash_count) $max_slash_count=$slash_count;

   $indent_dir_tree[$slash_count][$dirname]=$mode;
  }


 // Права на директории выставляются с самых "дальних"
 for($i=$max_slash_count; $i>=0 ;$i--)
  {
   if(array_key_exists($i, $indent_dir_tree))
    {
     $directories=$indent_dir_tree[$i];

     foreach($directories as $dir=>$mode)
      {
       $result=@chmod($dir, octdec($mode));
       $log.=$mode." ".$dir."n";
      }
    }
  }

 return $log;
}


function preparestring($s)
{
 $s=str_replace(chr(13),"",$s);
 $s=str_replace(chr(10),"",$s);
 return trim($s);
}


function RegisterGlobalVariables($HTTP_VARS) {
 if (isset($HTTP_VARS)) {
  if (count($HTTP_VARS) > 0) {

   if (get_magic_quotes_runtime() || get_magic_quotes_gpc()) {
    for (reset($HTTP_VARS); current($HTTP_VARS); next($HTTP_VARS)) {
     $var_name = key($HTTP_VARS);
     $GLOBALS[$var_name] = stripslashes($HTTP_VARS[$var_name]);
     // echo $var_name." = ".$HTTP_VARS[$var_name]."<BR>";
    }
   }
   else {
    for (reset($HTTP_VARS); current($HTTP_VARS); next($HTTP_VARS)) {
     $var_name = key($HTTP_VARS);
     $GLOBALS[$var_name] = $HTTP_VARS[$var_name];
     // echo $var_name." = ".$HTTP_VARS[$var_name]."<BR>";
    }
   }

  }
 }
}

function setuperdata()
{
 /*

'
;

 return 
$code;
}


///////////////////////////////////////////////////////////////////////////////
// Код для инсталляции. Вторая часть.
///////////////////////////////////////////////////////////////////////////////
function setupcode_end()
{
 
$code='

*/

}

?>

<BR>
<center><font size=-2 color="#505050">
PHP Setuper<BR>Copyright Xintrea, 2005<BR>
<a href="http://webhamster.ru">http://webhamster.ru</a>
</font></center>

</td></tr></table>
</body>
</html>
'
;

 return 
$code;

}


?>

<BR>
<center><font size=-2 color="#505050">
Copyright Xintrea, 2005<BR>
<a href="http://webhamster.ru">http://webhamster.ru</a>
</font></center>

</td></tr></table>
</body>
</html>
Онлайн: 0
Реклама