akick
letter to god
Незнаю как правильно сказать, но может ктото из пользователей среды Юникса решает какието прикладные задачи для себя програмным способом дабы обгечить ети самые задачи.... вот начну с себя....
- Мне никогда не нравилось писать полный путь для перезапуска сервисов тоесть /etc/init.d/ /etc/rc.d/ и т.д. потому я для себя написал простенький скриптик на пхп, но т.к. в чистой консоли пхп отказывается пускаццо пришлось оформить на баше:
	
	
	
		
также... когдато мне очень нужно было перекодировать огромное количество файлов из одной кодировки в другую при етом заменить символ конца строки в юникс формат \r\n на \n я не думаю, что я выбрал самый рациональный способ, но моё пристрастие к пхп привело меня к написанию данной программы:
	
	
	
		
кто следующий ?  думаю что будет интересно увидеть труды других людей
 думаю что будет интересно увидеть труды других людей 
								- Мне никогда не нравилось писать полный путь для перезапуска сервисов тоесть /etc/init.d/ /etc/rc.d/ и т.д. потому я для себя написал простенький скриптик на пхп, но т.к. в чистой консоли пхп отказывается пускаццо пришлось оформить на баше:
		Код:
	
	#!/bin/bash
status=1             # correct program status#
spath="/etc/init.d/" #path to system services#
function helpr () 
{ 
echo 'This function exec when not correct uses of program !!!'
echo 'Uses: '
echo '      '$0' <service> <code>'
echo 'Codes: '
echo '       0 - stop;'
echo '       1 - start;'
echo '       2 - status;'
echo '       3 - restart;'
echo '       4 - reload (default);'
exit; 
}
if [ "$1" = "" ]; then
  status=0;
fi
case "$2" in
0) cmd='stop';;
1) cmd='start';;
2) cmd='status';;
3) cmd='restart';;
4) cmd='reload';;
*) cmd='reload';
esac
if [ $status -eq 0 ]; then
helpr;
fi
$spath$1 $cmd
		Код:
	
	#!/usr/bin/php -q
<?
  Class RecodeMaker
  {
    /** Декларация глобальных переменных класса */
    var $lFrom;
    var $lTo;
    var $lDir;
    var $fArr;
    var $SysLNG='this is your locale';
    var $MyLNG='CP1251';
    var $msg; //Массив сообщений
    var $LineLength=80; // длинна рамок
    /** Установка локальных параметров системы перекодирования файлов.... */
    
    function __construct($lFromIn=NULL,$lToIn=NULL,$lDirIn=NULL)
    {
      $this->getSysLANG();
      if($lFromIn==NULL)
            {
            $this->Help();
            $this->errorRecode("__construct()",$this->msg[0][0]);
            }
            else
            $this->lFrom=$lFromIn;
      if($lToIn==NULL)
            {
            $this->Help();
            $this->errorRecode("__construct()",$this->msg[0][1]);
            }
            else
            $this->lTo=$lToIn;
      if($lDirIn==NULL)
            $this->lDir=getcwd().'/';
            else
            $this->lDir=$lDirIn.'/';
      $this->infoRecode("__construct()",$this->msg[1][8]);
      $this->getFiles();
      $this->recodeFiles();
    }
    
    /** Создание сообщений системы */
    
    function createMSG()
    {
      /** msg[0][X] - массив ошибок, msg[1][X] - массив сообщений (информационных) msg[2][X] - массив частей помощи ;)
      	  Хелп(msg[2][X] можно расширять без каких либо внесений изменений в код...... */
      $this->msg[0][0]	=	'Исходная кодировка файлов не задана !!!';
      $this->msg[0][1]	=	'Выходная кодировка файлов не задана !!!';
      $this->msg[0][2]	=	'файл не может быть загружен в массив !!!'."\n".'die(\'Read Error\');';
      $this->msg[0][3]	=	'файл не может быть записан данными !!!'."\n".'die(\'Write Error\')';
      //-------------------------------------------------------------------------
      $this->msg[1][0]	=	'Файл успешно перекодирован, переходим к следующему !            )';
      $this->msg[1][1]	=	'Последний файл успешно перекодирован !                          )';
      $this->msg[1][2]	=	'Locale successfully received '.$this->SysLNG;
      $this->msg[1][3]	=	'всё файлы перекодированы ;-)';
      $this->msg[1][4]	=	'Директория прочитана, файлы внесены, распознаны. Приступаем к работе...'."\n\n";
      $this->msg[1][5]	=	'Все сообщения перекодированы из '.$this->MyLNG.' в '.$this->SysLNG."\n";
      $this->msg[1][6]	=	'System messages successfully generated';
      $this->msg[1][7]	=	'Кодировка моих сообщений идентична с вайшей локалью ('.$this->MyLNG.')';
      $this->msg[1][8]	=	'агрументы удачно получены';
      $this->msg[1][9]	=	'спасибо, что воспользовались мной.';
      //-----------------------------------------------------------------------
      $this->msg[2][0]	=	"\t ****************************************\n";
      $this->msg[2][1]	=	"\t(**              Программа             **)\n";
      $this->msg[2][2]	= 	"\t(** массового перекодирования файлов,  **)\n";
      $this->msg[2][3]	=  	"\t(** а также замена кода \\r\\n на \\n     **)\n";
      $this->msg[2][4]	=  	"\t(** тоесть символа конца строки в Unix **)\n";
      $this->msg[2][5]	=  	"\t(**    разработал akick ©2006-2007     **)\n";
      $this->msg[2][6]	=  	"\t ****************************************\n\n";
      $this->msg[2][7]	=  	"Использовать:\n";
      $this->msg[2][8]	=  	"\tmrecode [вх_код] [вых_код] [путь]\n";
      $this->msg[2][9]	=  	"\tвх_код - начальная кодировка файлов(в которой они);\n";
      $this->msg[2][10]	=  	"\tвых_код - кодировка в какой они должны быть в результате;\n";
      $this->msg[2][11]	=  	"\tпуть - путь к файлам (по умолчанию getcwd(); определяет текущий);\n";
      $this->msg[2][12]	=  	"Пример использования:\n";
      $this->msg[2][13]	=  	"\tmrecode cp1251 utf8 /home/akick/files/\n\n";
      //-----------------------------------------------------------------------
      $this->infoRecode("createMSG()",$this->msg[1][6]);
    }
    
    /** Вывод на екран помощи по использованию программы */
    
    function Help()
    {
	$help_count=count($this->msg[2])-1;
	for($i=0;$i<=$help_count;$i++)
	{
		echo $this->msg[2][$i];
	}      
    }
    
    /** Получение списка файлов в дирректории */
    
    function getFiles()
    {
       $d = dir($this->lDir);
        $c=0;
                  echo $d->handle;
        while (false !== ($entry = $d->read())) 
        {
          if($dirin>1 && (filetype($this->lDir.$entry) == file))
	  {
          	$this->fArr[$c]=$entry;
          	$c++;
	  }
          $dirin++;
        }
        $d->close();
      $this->infoRecode("getFiles()",$this->msg[1][4]);
    }
    
    /** Непосредственно функция перекодирования файлов. */
    
    function recodeFiles()
    {
      $arr_size=count($this->fArr)-1;
      for($i=0;$i<=$arr_size;$i++)
      {
        $of=$i+1;
        $all=$arr_size+1;
        echo $this->headGen('{'.$of.'/'.$all.'}={'.$this->fArr[$i].'}');
        if(!(@$recodeFile=file($this->lDir.$this->fArr[$i])))
                          $this->errorRecode("recodeFiles()",$this->msg[0][2]);
        $recodeFileLineCount=count($recodeFile)-1;
        for($j=0;$j<=$recodeFileLineCount;$j++)
        {
          $recodeFile[$j]=iconv($this->lFrom,$this->lTo,$recodeFile[$j]);
          $recodeFile[$j]=ereg_replace("\r\n","\n",$recodeFile[$j]);
        }
        if(!(@$recodeWrite=fopen($this->lDir.$this->fArr[$i],"wb")))
                          $this->errorRecode("recodeFiles()",$this->msg[0][3]);
        foreach($recodeFile as $LineNum => $LineStr)
        {
          fwrite($recodeWrite,$LineStr);
        }
        fclose($recodeWrite);
        if($i<$arr_size)
              $this->infoRecode('recodeFiles()',$this->msg[1][0]);
              else
              $this->infoRecode('recodeFiles()',$this->msg[1][1]);
        echo $this->EndOfLineGen();
      }
      $this->infoRecode("recodeFiles()",$this->msg[1][3]);
    }
    
    /** Генерация рамки вывода статистики перекодирования {{{
    	Генерирует строчку заголовка над каждым файлом */
    
    function headGen($str)
    {
      $headMin=1;
      $realGen=$this->LineLength-strlen($str);
      $line='='.$str;
      for($i=1;$i<=$realGen-1;$i++)
      {
        $line.='=';
      }
      return $line."\n";
    }
    
    /** Генерирует строчку завершения действий
        под каждым перекодированным файлом */
    
    function EndOfLineGen()
    {
      $line='';
      for($i=1;$i<=$this->LineLength;$i++)
      {
        $line.='=';
      }
      return $line."\n\n\n";
    }
    
    /** рамка перекодирования }}}
    
    	Получение текущей локали системы, в которую нужно перекодировать сообщения на русском...... */
    	
    function getSysLANG()
    {
      ob_start();
      system('echo $LANG');
      $lang=trim(ob_get_contents());
      ob_end_clean();
      $lang=explode(".",$lang);
      $this->SysLNG=$lang[1];
      $this->createMSG();
      $this->infoRecode("getSysLNG()",$this->msg[1][2]);
      $this->msgRecode();
    }
    /** Перекодировка сообщений в кодировку системной локали */
    
    function msgRecode()
    {
      if($this->MyLNG != $this->SysLNG)
      {
        $ctype=count($this->msg)-1; // колво типов (номера 1 - сообщения 0 - ошибки)
        for($i=0;$i<=$ctype;$i++)
        {
          $subType=count($this->msg["$i"])-1;
          for($j=0;$j<=$subType;$j++)
          {
            $this->msg["$i"]["$j"]=iconv($this->MyLNG,$this->SysLNG,$this->msg["$i"]["$j"]);
          }
        }
        $this->infoRecode("msgRecode()",$this->msg[1][5]);
      }
      else
      $this->infoRecode("msgRecode()",$this->msg[1][7]);
    }
    /** Вывод информационных сообщений */
    
    function infoRecode($modName,$infoStr)
    {
      print("\033[1;32;1m\ \r$modName : $infoStr\n");
    }
    /** Вывод на еркан некой ошибки.. */
    
    function errorRecode($modName,$errStr)
    {
      print("\033[1;31;1m\ \r$modName : $errStr\n");
      exit(0);
    }
    
    /** Деструктор */
    
    function __destruct()
    {
	$this->infoRecode("__destruct()",$this->msg[1][9]);
    }
  }
  
  /** Вызов обработки методом екземпляризации класса */
  
  $DoRecode = new RecodeMaker($argv[1],$argv[2],$argv[3]);
?> думаю что будет интересно увидеть труды других людей
 думаю что будет интересно увидеть труды других людей 
 
				 
 
		 
 
		 . Почему выкрутился вот так:
. Почему выкрутился вот так:  
 
		
