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]);
?>