Оптимизация кода
1.Собственно вопрос в том, что хотелось бы оптимизировать код. Под оптимизацией понимаю защита скрипта, ну и возможно его уменьшение.
2.Возможно есть другое решение, но я его не знаю, мб подскажите.
Код:
<?php
//----------------------функция превода текста с кириллицы в траскрипт-----------------------
function encodestring($st)
{
/*if($reverse==">")
{*/
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_","abvgdeeziyklmnoprstufh'iei");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_","ABVGDEEZIYKLMNOPRSTUFH'IEI");
$st=strtr($st,
array(
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"," "=>"_"
)
);
return $st;
/*}
elseif($reverse=="<")
{
$st=strtr($st,"abvgdeeziyklmnoprstufh'iei","абвгдеёзийклмнопрстуфхъыэ_");
$st=strtr($st,"ABVGDEEZIYKLMNOPRSTUFH'IEI","АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_");
$st=strtr($st,
array(
"zh"=>"ж", "ts"=>"ц", "ch"=>"ч", "sh"=>"ш",
"shch"=>"щ", "yu"=>"ю", "ya"=>"я",
"ZH"=>"Ж", "TS"=>"Ц", "CH"=>"Ч", "SH"=>"Ш",
"SHCH"=>"Щ", "YU"=>"Ю", "YA"=>"Я",
)
);
}*/
}
$dblocation = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P>В настоящий момент база данных не доступна, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if($_GET['update']=="1")
{
//-------------------переименовывание файлов в папке------------------------
$dir = "6";//задаем директорию файлов неугодных буржуям
if (is_dir($dir)) {//если директория существует....
if ($dh = opendir($dir)) {//если мы её можем открыть...
while (($file = readdir($dh)) !== false) {//то начинаем считывать все файлы по одному
if(!($file==".."||$file=="."))//неибу почему но в $file за чем то вносится "."".."
{
$original_ba=$file;//оригинальное имя
$res=rename($dir."/".$file,$dir."/".encodestring($file));//собственно само переименовывание фаила
echo $res."; ";
$original_ba_xxx=encodestring($file);//имя на транслите
$first_letter=substr($file, 0,1);//первая буква слова
$ar[$file]=$dir."/".$file;//формируем путь для выводимого отчета
mysql_query("INSERT INTO `nestr_test` (`id` ,`lat_name` ,`trans_name` ,`first_char`)VALUES (NULL , '".$original_ba_xxx."', '".$original_ba."', '".$first_letter."');");//вставляем
}
}
closedir($dh);//закрываем нах папку
}
}
asort($ar);//и по челябински сортируем
//---------------------прорисовка на страничке результата-------------------
$dir = "/auto/6";
$i=1;
foreach($ar as $key => $val)
{
$newvar[$i]=$key;
$i++;
}
$i=1;
foreach($ar as $key => $val)
{
echo"<a href=".$dir."/".$key.">".$newvar[$i]."</a><br><hr>";
//$pezda[$i]="<a href=".$dir."/".$key.">".$newvar[$i]."</a><br><hr>";
$string = strpos($newvar[$i], "_");
$string = substr($newvar[$i], $string+1);
$string1 = substr($string, 0,1);
$string1 = strtoupper($string1);
$i++;
}
}
//----------------------функция превода текста с кириллицы в траскрипт-----------------------
function encodestring($st)
{
/*if($reverse==">")
{*/
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_","abvgdeeziyklmnoprstufh'iei");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_","ABVGDEEZIYKLMNOPRSTUFH'IEI");
$st=strtr($st,
array(
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"," "=>"_"
)
);
return $st;
/*}
elseif($reverse=="<")
{
$st=strtr($st,"abvgdeeziyklmnoprstufh'iei","абвгдеёзийклмнопрстуфхъыэ_");
$st=strtr($st,"ABVGDEEZIYKLMNOPRSTUFH'IEI","АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_");
$st=strtr($st,
array(
"zh"=>"ж", "ts"=>"ц", "ch"=>"ч", "sh"=>"ш",
"shch"=>"щ", "yu"=>"ю", "ya"=>"я",
"ZH"=>"Ж", "TS"=>"Ц", "CH"=>"Ч", "SH"=>"Ш",
"SHCH"=>"Щ", "YU"=>"Ю", "YA"=>"Я",
)
);
}*/
}
$dblocation = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P>В настоящий момент база данных не доступна, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if($_GET['update']=="1")
{
//-------------------переименовывание файлов в папке------------------------
$dir = "6";//задаем директорию файлов неугодных буржуям
if (is_dir($dir)) {//если директория существует....
if ($dh = opendir($dir)) {//если мы её можем открыть...
while (($file = readdir($dh)) !== false) {//то начинаем считывать все файлы по одному
if(!($file==".."||$file=="."))//неибу почему но в $file за чем то вносится "."".."
{
$original_ba=$file;//оригинальное имя
$res=rename($dir."/".$file,$dir."/".encodestring($file));//собственно само переименовывание фаила
echo $res."; ";
$original_ba_xxx=encodestring($file);//имя на транслите
$first_letter=substr($file, 0,1);//первая буква слова
$ar[$file]=$dir."/".$file;//формируем путь для выводимого отчета
mysql_query("INSERT INTO `nestr_test` (`id` ,`lat_name` ,`trans_name` ,`first_char`)VALUES (NULL , '".$original_ba_xxx."', '".$original_ba."', '".$first_letter."');");//вставляем
}
}
closedir($dh);//закрываем нах папку
}
}
asort($ar);//и по челябински сортируем
//---------------------прорисовка на страничке результата-------------------
$dir = "/auto/6";
$i=1;
foreach($ar as $key => $val)
{
$newvar[$i]=$key;
$i++;
}
$i=1;
foreach($ar as $key => $val)
{
echo"<a href=".$dir."/".$key.">".$newvar[$i]."</a><br><hr>";
//$pezda[$i]="<a href=".$dir."/".$key.">".$newvar[$i]."</a><br><hr>";
$string = strpos($newvar[$i], "_");
$string = substr($newvar[$i], $string+1);
$string1 = substr($string, 0,1);
$string1 = strtoupper($string1);
$i++;
}
}
Также есть функция scandir которая выбирает все файлы и директории в указанном каталоге, незнаю правда на сколько бистро никогда не проверял, но кода станет меньше. Кстати она ещё имеет возможность сортировать сразу же папки и файлы.
А как эти 3000 файлов загружаются на сервер?
2.scandir попробую, и наверное только пн. отпишусь что получилось.
1.Про инсерты не совсем понял....каким образом их количество можно сократить?
Цитата: CrazyTimon
1.Про инсерты не совсем понял....каким образом их количество можно сократить?
Вот как то так:
Код:
$Count=1;
$SQL=array();
if (is_dir($dir)) {//если директория существует....
if ($dh = opendir($dir)) {//если мы её можем открыть...
while (($file = readdir($dh)) !== false) {//то начинаем считывать все файлы по одному
if(!($file==".."||$file=="."))//неибу почему но в $file за чем то вносится "."".."
{
$original_ba=$file;//оригинальное имя
$res=rename($dir."/".$file,$dir."/".encodestring($file));//собственно само переименовывание фаила
echo $res."; ";
$original_ba_xxx=encodestring($file);//имя на транслите
$first_letter=substr($file, 0,1);//первая буква слова
$ar[$file]=$dir."/".$file;//формируем путь для выводимого отчета
$Count++;
$SQL[]="(NULL , '".$original_ba_xxx."', '".$original_ba."', '".$first_letter."')";
if($Count==100)
{
mysql_query("INSERT INTO `nestr_test` (`id` ,`lat_name` ,`trans_name` ,`first_char`)VALUES ".implode(",",$SQL));//вставляем
$Count=1;
$SQL=array();
}
}
}
closedir($dh);//закрываем нах папку
}
}
$SQL=array();
if (is_dir($dir)) {//если директория существует....
if ($dh = opendir($dir)) {//если мы её можем открыть...
while (($file = readdir($dh)) !== false) {//то начинаем считывать все файлы по одному
if(!($file==".."||$file=="."))//неибу почему но в $file за чем то вносится "."".."
{
$original_ba=$file;//оригинальное имя
$res=rename($dir."/".$file,$dir."/".encodestring($file));//собственно само переименовывание фаила
echo $res."; ";
$original_ba_xxx=encodestring($file);//имя на транслите
$first_letter=substr($file, 0,1);//первая буква слова
$ar[$file]=$dir."/".$file;//формируем путь для выводимого отчета
$Count++;
$SQL[]="(NULL , '".$original_ba_xxx."', '".$original_ba."', '".$first_letter."')";
if($Count==100)
{
mysql_query("INSERT INTO `nestr_test` (`id` ,`lat_name` ,`trans_name` ,`first_char`)VALUES ".implode(",",$SQL));//вставляем
$Count=1;
$SQL=array();
}
}
}
closedir($dh);//закрываем нах папку
}
}
по 3 п. можно их положить в архив и на сервере развернуть, это можно сделать всё через скрипт.
3к инсертов это немного (если не в секунду и не на шаред хостинг). Если этот скрипт разовый или будет запускаться раз в сутки, то я бы оставил его таким, какой он есть (если он работает конечно).
2 Werky: твой скрипт нерабочий. Потому что если файлом меньше 100 или, например 190 - твоё условие не сработает или сработает 1 раз. и куча запросов останутся невыполненными.