Доброго времени суток! Привожу сразу код с описанием, пытался собрать функцию, которая генерирует уникальное имя из представленных для неё параметров. Код (Text): <?php /* #Аргументы функции $ncc - количество символов в имени, если не указано, то используется значение заданное по умолчанию в переменной $dcc. $dir - адрес дирректории, в которой будет создан файл, используется только для проверки существования файла со сгенерированным именем, и в случае существования такого файла будет генерироваться новое имя пока оно не станет уникальным. $ext - расширение файла, используется при проверке на существование файла в директории. #Возвращаемые значения имя сгенерированного файла, если была указана дирректория для которой создаётся файл, то это имя будет уникальным. false , если указанной директории не существует. # */ function makeTmpName($ncc = null, $dir = null, $ext = null) { //var $dcc = 6;//default count chars - количество символов по умолчанию #log if (strlen($dir) >= 1) { if (opendir($dir)) { $dex = 'ok'; } else { return false; } } # if (strlen($ncc) >= 1 & $ncc >= 3) { $cnc = $ncc; } else { if (strlen($dcc) >= 1 & $dcc >= 3) { $cnc = $dcc; } else { $cnc = 3; } } # if (strlen($ext) >= 1) { $cxc = '.'.$ext; } else { $cxc = '.'; } # function step1($cnc, $cxc) { #var $a_ale = array(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, q, p, r, s, t, u, v, w, x, y, z); #func for ($counter=0;$counter<$cnc;$counter++) { $nfn1 = rand(0, $cnc); $doNot = rand(2, 3); if ($nfn1 > 25) { $nfn1 = rand(0, 25); } switch ($doNot) { case 2 : $nnwordname = $nnwordname.$a_ale[$nfn1]; break; case 3 : if (strlen($nfn1) > 1) { $nfn1 = rand(0, 9); } $nnwordname = $nnwordname.$nfn1; break; } } return $nnwordname.$cxc; $nnwordname = ''; } # $checkThatFileName = step1($cnc, $cxc); # if ($dex == 'ok') { while (@file_exists($dir.$checkThatFileName)) { $checkThatFileName = step1($cnc, $cxc); } } else { $checkThatFileName = step1($cnc, $cxc); } $cnc = ''; $cxc = ''; $ext = ''; return $checkThatFileName; } echo makeTmpName(3, './files/', 'txt'); ?> При вызове echo makeTmpName(3, './files/', 'txt'); , всё нормально, но если вызвать второй раз, то начинает ругаться следующим образом : Fatal error: Cannot redeclare step1() (previously declared in D:\www\t.pwon.pp.ua\docs\tests\fh\inx.php:94) in D:\www\t.pwon.pp.ua\docs\tests\fh\inx.php on line 94 94-ая строка здесь : function step1($cnc, $cxc) { Понимаю, что вопрос достаточно глупый, но всё таки обращаюсь за помощью. Нужно уместить всё это в одну функцию, ибо разделение ещё на несколько - не подходит для меня.
функцию step1 вынеси перед функцией makeTmpName PHP: <?php /* #Аргументы функции $ncc - количество символов в имени, если не указано, то используется значение заданное по умолчанию в переменной $dcc. $dir - адрес дирректории, в которой будет создан файл, используется только для проверки существования файла со сгенерированным именем, и в случае существования такого файла будет генерироваться новое имя пока оно не станет уникальным. $ext - расширение файла, используется при проверке на существование файла в директории. #Возвращаемые значения имя сгенерированного файла, если была указана дирректория для которой создаётся файл, то это имя будет уникальным. false , если указанной директории не существует. # */ function step1($cnc, $cxc) { #var $a_ale = array(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, q, p, r, s, t, u, v, w, x, y, z); #func for ($counter=0;$counter<$cnc;$counter++) { $nfn1 = rand(0, $cnc); $doNot = rand(2, 3); if ($nfn1 > 25) { $nfn1 = rand(0, 25); } switch ($doNot) { case 2 : $nnwordname = $nnwordname.$a_ale[$nfn1]; break; case 3 : if (strlen($nfn1) > 1) { $nfn1 = rand(0, 9); } $nnwordname = $nnwordname.$nfn1; break; } } return $nnwordname.$cxc; $nnwordname = ''; } function makeTmpName($ncc = null, $dir = null, $ext = null) { //var $dcc = 6;//default count chars - количество символов по умолчанию #log if (strlen($dir) >= 1) { if (opendir($dir)) { $dex = 'ok'; } else { return false; } } # if (strlen($ncc) >= 1 & $ncc >= 3) { $cnc = $ncc; } else { if (strlen($dcc) >= 1 & $dcc >= 3) { $cnc = $dcc; } else { $cnc = 3; } } # if (strlen($ext) >= 1) { $cxc = '.'.$ext; } else { $cxc = '.'; } # # $checkThatFileName = step1($cnc, $cxc); # if ($dex == 'ok') { while (@file_exists($dir.$checkThatFileName)) { $checkThatFileName = step1($cnc, $cxc); } } else { $checkThatFileName = step1($cnc, $cxc); } $cnc = ''; $cxc = ''; $ext = ''; return $checkThatFileName; } echo makeTmpName(3, './files/', 'txt'); ?>