За последние 24 часа нас посетили 32782 программиста и 1821 робот. Сейчас ищет 1741 программист ...

Вызов нескольких функций в функции в цикле=)

Тема в разделе "PHP для новичков", создана пользователем htaccess, 12 май 2011.

  1. htaccess

    htaccess Активный пользователь

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Доброго времени суток! Привожу сразу код с описанием, пытался собрать функцию, которая генерирует уникальное имя из представленных для неё параметров.
    Код (Text):
    1. <?php
    2. /*
    3. #Аргументы функции
    4.     $ncc - количество символов в имени,
    5.         если не указано, то используется значение
    6.         заданное по умолчанию в переменной $dcc.
    7.     $dir - адрес дирректории, в которой будет создан
    8.         файл, используется только для проверки существования
    9.         файла со сгенерированным именем, и в случае
    10.         существования такого файла будет генерироваться
    11.         новое имя пока оно не станет уникальным.
    12.     $ext - расширение файла, используется при проверке
    13.         на существование файла в директории.
    14. #Возвращаемые значения
    15.         имя сгенерированного файла, если была указана
    16.         дирректория для которой создаётся файл, то это имя
    17.         будет уникальным.
    18.     false , если указанной директории не существует.
    19. #
    20. */
    21. function makeTmpName($ncc = null, $dir = null, $ext = null) {
    22.     //var
    23.     $dcc    =   6;//default count chars - количество символов по умолчанию
    24.     #log
    25.     if (strlen($dir) >= 1) {
    26.         if (opendir($dir)) {
    27.             $dex    =   'ok';
    28.         } else {
    29.             return false;
    30.         }
    31.     }
    32.     #
    33.     if (strlen($ncc) >= 1 & $ncc >= 3) {
    34.         $cnc    =   $ncc;
    35.     } else {
    36.     if (strlen($dcc) >= 1 & $dcc >= 3) {
    37.         $cnc    =   $dcc;
    38.     } else {
    39.         $cnc    =   3;
    40.     }
    41.     }
    42.     #
    43.     if (strlen($ext) >= 1) {
    44.         $cxc    =   '.'.$ext;
    45.     } else {
    46.         $cxc    =   '.';
    47.     }
    48.     #
    49.     function step1($cnc, $cxc) {
    50.         #var
    51.         $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);
    52.         #func
    53.         for ($counter=0;$counter<$cnc;$counter++) {
    54.             $nfn1   =   rand(0, $cnc);
    55.             $doNot  =   rand(2, 3);
    56.             if ($nfn1 > 25) { $nfn1 = rand(0, 25); }
    57.             switch ($doNot) {
    58.                 case 2 :
    59.                         $nnwordname = $nnwordname.$a_ale[$nfn1];
    60.                         break;
    61.                 case 3 :
    62.                         if (strlen($nfn1) > 1) { $nfn1 = rand(0, 9); }
    63.                         $nnwordname = $nnwordname.$nfn1;
    64.                         break;
    65.             }
    66.         }
    67.         return $nnwordname.$cxc;
    68.         $nnwordname =   '';
    69.     }
    70.     #
    71.     $checkThatFileName  =   step1($cnc, $cxc);
    72.     #
    73.     if ($dex == 'ok') {
    74.         while (@file_exists($dir.$checkThatFileName)) {
    75.             $checkThatFileName  =   step1($cnc, $cxc);
    76.         }
    77.     } else {
    78.         $checkThatFileName  =   step1($cnc, $cxc);
    79.     }
    80.     $cnc = '';
    81.     $cxc = '';
    82.     $ext = '';
    83.     return $checkThatFileName;
    84. }
    85.  
    86. echo makeTmpName(3, './files/', 'txt');
    87.  
    88. ?>
    При вызове 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) {

    Понимаю, что вопрос достаточно глупый, но всё таки обращаюсь за помощью.

    Нужно уместить всё это в одну функцию, ибо разделение ещё на несколько - не подходит для меня.
     
  2. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    функцию step1 вынеси перед функцией makeTmpName
    PHP:
    1.  
    2. <?php
    3. /*
    4. #Аргументы функции
    5.    $ncc - количество символов в имени,
    6.       если не указано, то используется значение
    7.       заданное по умолчанию в переменной $dcc.
    8.    $dir - адрес дирректории, в которой будет создан
    9.       файл, используется только для проверки существования
    10.       файла со сгенерированным именем, и в случае
    11.       существования такого файла будет генерироваться
    12.       новое имя пока оно не станет уникальным.
    13.    $ext - расширение файла, используется при проверке
    14.       на существование файла в директории.
    15. #Возвращаемые значения
    16.       имя сгенерированного файла, если была указана
    17.       дирректория для которой создаётся файл, то это имя
    18.       будет уникальным.
    19.    false , если указанной директории не существует.
    20. #
    21. */
    22.    function step1($cnc, $cxc) {
    23.       #var
    24.      $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);
    25.       #func
    26.      for ($counter=0;$counter<$cnc;$counter++) {
    27.          $nfn1   =   rand(0, $cnc);
    28.          $doNot   =   rand(2, 3);
    29.          if ($nfn1 > 25) { $nfn1 = rand(0, 25); }
    30.          switch ($doNot) {
    31.             case 2 :
    32.                   $nnwordname = $nnwordname.$a_ale[$nfn1];
    33.                   break;
    34.             case 3 :
    35.                   if (strlen($nfn1) > 1) { $nfn1 = rand(0, 9); }
    36.                   $nnwordname = $nnwordname.$nfn1;
    37.                   break;
    38.          }
    39.       }
    40.       return $nnwordname.$cxc;
    41.       $nnwordname   =   '';
    42.    }
    43. function makeTmpName($ncc = null, $dir = null, $ext = null) {
    44.    //var
    45.    $dcc   =   6;//default count chars - количество символов по умолчанию
    46.    #log
    47.   if (strlen($dir) >= 1) {
    48.       if (opendir($dir)) {
    49.          $dex   =   'ok';
    50.       } else {
    51.          return false;
    52.       }
    53.    }
    54.    #
    55.   if (strlen($ncc) >= 1 & $ncc >= 3) {
    56.       $cnc   =   $ncc;
    57.    } else {
    58.    if (strlen($dcc) >= 1 & $dcc >= 3) {
    59.       $cnc   =   $dcc;
    60.    } else {
    61.       $cnc   =   3;
    62.    }
    63.    }
    64.    #
    65.   if (strlen($ext) >= 1) {
    66.       $cxc   =   '.'.$ext;
    67.    } else {
    68.       $cxc   =   '.';
    69.    }
    70.    #
    71.  
    72.    #
    73.   $checkThatFileName   =   step1($cnc, $cxc);
    74.    #
    75.   if ($dex == 'ok') {
    76.       while (@file_exists($dir.$checkThatFileName)) {
    77.          $checkThatFileName   =   step1($cnc, $cxc);
    78.       }
    79.    } else {
    80.       $checkThatFileName   =   step1($cnc, $cxc);
    81.    }
    82.    $cnc = '';
    83.    $cxc = '';
    84.    $ext = '';
    85.    return $checkThatFileName;
    86. }
    87.  
    88. echo makeTmpName(3, './files/', 'txt');
    89.  
    90. ?>
     
  3. htaccess

    htaccess Активный пользователь

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Так я пробовал, а в одну функцию это можно объединить?