PDA

Просмотр полной версии : Полезная функция копирования файлов. Оцените пожалуйста


cosmo
06.08.2004, 11:24
$filesdir="img";
function rusConv($filename) {
global $i,$filesdir;
$tlcfn=strtr($filename,"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ","абвгдеёжзийклмнопрстуфхцчшщъыьэюя_");
$tlcfn=str_replace("а","a",$tlcfn);
$tlcfn=str_replace("б","b",$tlcfn);
$tlcfn=str_replace("в","v",$tlcfn);
$tlcfn=str_replace("г","g",$tlcfn);
$tlcfn=str_replace("д","d",$tlcfn);
$tlcfn=str_replace("е","e",$tlcfn);
$tlcfn=str_replace("ё","yo",$tlcfn);
$tlcfn=str_replace("ж","j",$tlcfn);
$tlcfn=str_replace("з","z",$tlcfn);
$tlcfn=str_replace("и","i",$tlcfn);
$tlcfn=str_replace("й","y",$tlcfn);
$tlcfn=str_replace("к","k",$tlcfn);
$tlcfn=str_replace("л","l",$tlcfn);
$tlcfn=str_replace("м","m",$tlcfn);
$tlcfn=str_replace("н","n",$tlcfn);
$tlcfn=str_replace("о","o",$tlcfn);
$tlcfn=str_replace("п","p",$tlcfn);
$tlcfn=str_replace("р","r",$tlcfn);
$tlcfn=str_replace("с","s",$tlcfn);
$tlcfn=str_replace("т","t",$tlcfn);
$tlcfn=str_replace("у","u",$tlcfn);
$tlcfn=str_replace("ф","f",$tlcfn);
$tlcfn=str_replace("х","h",$tlcfn);
$tlcfn=str_replace("ц","c",$tlcfn);
$tlcfn=str_replace("ч","ch",$tlcfn);
$tlcfn=str_replace("ш","sh",$tlcfn);
$tlcfn=str_replace("щ","sch",$tlcfn);
$tlcfn=str_replace("ъ","",$tlcfn);
$tlcfn=str_replace("ы","yi",$tlcfn);
$tlcfn=str_replace("ь","",$tlcfn);
$tlcfn=str_replace("э","ye",$tlcfn);
$tlcfn=str_replace("ю","yu",$tlcfn);
$tlcfn=str_replace("я","ya",$tlcfn);
while (file_exists($filesdir."/".str_replace(substr($tlcfn,0,strrpos($tlcfn,".")),substr($tlcfn,0,strrpos($tlcfn,".")).$i,$tlcfn))) {
$i++;
}
return str_replace(substr($tlcfn,0,strrpos($tlcfn,".")),substr($tlcfn,0,strrpos($tlcfn,".")).$i,$tlcfn);
}


Функция делает следующее:
1. Перекодирует имена картинок из русских в английские (полезно для глупых секретарш, которым не объяснишь, что русское название картинки и английское имеет большую разницу)

2. Если в папке есть файл с таким именем, то делает его копию.

Синтаксис такой:
copy($file,$filesdir."/".rusConv($file_name));

Crazy
06.08.2004, 11:54
Маниакальное количество str_replace....

cosmo
06.08.2004, 12:13
Это плохо или хорошо? Я хотел сделать strtr, но функция работает только с одиночными символами

Crazy
06.08.2004, 14:31
Оригинал написал(а) cosmo
Я хотел сделать strtr

Лично я и сейчас вижу в твоем коде strtr.

styx
06.08.2004, 14:43
А что мешает использовать strtr для одиночных, а для оставшихся букв - replace :)

juggy
06.08.2004, 16:36
гм. странная функция.

а про strtolwer мы не слышали?

Для транслита могу предложить свою функцию.
function translit($str){
$t[а]="a";
$t[б]="b";
$t[в]="v";
$t[г]="g";
$t[д]="d";
$t[е]="e";
$t[ё]="yo";
$t[ж]="zh";
$t[з]="z";
$t[и]="i";
$t[й]="j";
$t[к]="k";
$t[л]="l";
$t[м]="m";
$t[н]="n";
$t[о]="o";
$t[п]="p";
$t[р]="r";
$t[с]="s";
$t[т]="t";
$t[у]="u";
$t[ф]="f";
$t[х]="kh";
$t[ц]="ts";
$t[ч]="tch";
$t[ш]="sh";
$t[щ]="tsh";
$t[ь]="";
$t[ы]="y";
$t[ъ]="";
$t[э]="e";
$t[ю]="yu";
$t[я]="ya";
$t[Ё]="Yo";

$new="";
for ($i=0; $i<strlen($str);$i++) {
$ch=$str[$i];
if("А"<=$ch and $ch<="Я"){
$ch=chr(ord($ch)+32);
$new.=$t[$ch];
}
elseif(("а"<=$ch and $ch<="я") or $ch=="ё" or $ch=="Ё" ){
$new.=$t[$ch];
}
elseif("A"<=$ch and $ch<="Z"){
$new.=chr(ord($ch)+32);
}
elseif(("a"<=$ch and $ch<="z") or ("0"<=$ch and $ch<="9")){
$new.=$ch;
}

}
return($new);
}