За последние 24 часа нас посетили 16894 программиста и 1291 робот. Сейчас ищут 1479 программистов ...

не работает include (require) в цикле

Тема в разделе "Вопросы от блондинок", создана пользователем Alexandre, 20 сен 2006.

  1. Alexandre

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

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    почему возник этот вопрос
    1) формирую массив который записывается в файл
    PHP:
    1. <?
    2.  $name = array(1 => 'a',2 => 'b',3 => 'c',5 => 7,);
    3. ?>
    2) есть кусок скрипта (функция класса) который сканирует директорию и инклудит все скрипты
    PHP:
    1.  
    2.         $d = dir( SYSTEM_DIR);
    3.         while (false !== ($entry = $d->read())) {
    4.             if ( preg_match("/\w+\.cache\.php$/",$entry)) {
    5.                $include_name =  SYSTEM_DIR.$entry;
    6.                require $include_name;
    7.             }
    8.         }
    9.         $d->close();
    Однако после отработки скрипта, файл инклудится, но
    var_dump($name) пустой
     
  2. Alexandre

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

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    понял, $name = array(1 => 'a',2 => 'b',3 => 'c',5 => 7,); надо делать глобальной
     
  3. Anonymous

    Anonymous Guest

    Не понял, как связаны 1 и 2 ?
    Или то что написано в 1 подключается методом, указанным в 2, я верно понял?
     
  4. Alexandre

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

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    да, то что написано 1 подключаем методом 2
    PHP:
    1.    function saveCache($name, &$array){
    2.       if (trim($name)=='') return false;
    3.       $filename= SYSTEM_DIR."$name.cache.php";
    4.  
    5.       if (!is_array($array)) return false;
    6.  
    7.       $str = "<?\n global \$"."$name;\n\$"."$name = array(";
    8.      foreach($array as $key=>$data ){
    9.           if( is_string($data ) ) $data="'$data'";
    10.           if (is_string($key)) $key="'$key'";
    11.           $str.="$key => $data,";
    12.      }
    13.       $str.=");\n?>";
    14.  
    15.        $ret = file_put_contents( $filename, $str);
    16.        if ($ret >0) return true;
    17.  
    18.        return false;
    19.    }
    20.  
    формируем массив 1
    а кодом 2 его забираем
     
  5. Alexandre

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

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    ошибка оказалась в том, что инклудилось в классе, соответсвенно подинклуденные переменные очевидно стали локальными.

    Отдельное спасибо vb за подсказку.