Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт выдает ошибку.Почему?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: цикл и рекурсивная функция
vitako
Отправлено: 02 Июня, 2010 - 10:59:32
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Написал скрипт, но выдает ошибку. Почему выдает ошибку? И можно ли оптимизировать код ?Я в php не профи, поэтому жду ценных сообщений.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $localdir = '/home/portal/Lamppdocs/red/folder'; // Путь до папки с другими папками
  5.  
  6.  
  7. /*------------------------------------------------------------------------------------------------------------------------------------*/
  8.  
  9.  
  10. $ls = dirname ("/swap_file");
  11.  
  12.  
  13. $text = 'qwerty;rita;123a;kistik;
  14. qazxc;katy;6d231a;bugaga;
  15. figase;tutaret;34534t3;morlak;';
  16.  
  17.  
  18. $text = preg_split("/[;]/",$text);
  19.  
  20.  
  21.  
  22.  
  23. for ($fertup = 0,$logaut = 1, $pitak = 2, $name = 3;
  24. $fertup < count($text),$logaut < count($text),$pitak < count($text),$name < count($text);
  25. $fertup = $fertup+4,$logaut = $logaut+4,$pitak = $pitak+4,$name = $name+4)
  26.         {
  27.  
  28.  
  29.                 $names = $text["$name"];        
  30.                 $fertups = $text["$fertup"];
  31.                 $fertups = ltrim ($fertups);
  32.  
  33.  
  34.  
  35. print <<<OK1
  36.              строка с названием  $fertups    <br>
  37.  
  38.        строка с названием {$text["$logaut"]}    <br>
  39.        строка с названием {$text["$pitak"]}   <br>
  40.  
  41.        строка с названием $names <br>
  42. OK1;
  43.  
  44.  
  45.  
  46. function rdir ($path2dir) {
  47.  
  48.           $d = dir ($path2dir);
  49.  
  50.    
  51.  
  52.          while (false !== ($entry = $d->read())) {
  53.  
  54.      
  55.  
  56.              if ($entry!='.' && $entry!='..' && $entry!='' ) {
  57.  
  58.           $all_path = $path2dir.$entry;
  59.  
  60.                  $new_path = go ($all_path, is_file($all_path));
  61.  
  62.      
  63.  
  64.                 if (!is_file($all_path)) {
  65.                    if (!rdir ($new_path)) {
  66.                           return false;
  67.                       }
  68.                  }
  69.  
  70.               }
  71.  
  72.          }
  73.  
  74.        
  75.           return true;
  76.  
  77.      }
  78.  
  79.        
  80.  
  81.       function go ($path2file, $is_file = true) {
  82.  
  83.        
  84.  
  85.           if ($is_file) {
  86.  
  87.  
  88.  
  89. echo  $path2file,"\n";
  90.  
  91.          
  92.             } else {
  93.          
  94.                 # выполняем операцию над папкой
  95.              $path2file = $path2file.'/';
  96.               # выведем относительный путь к обрабатываемой директории
  97.  
  98.               echo "\n\n",$path2file,"\n";
  99.             }
  100.          
  101.             return $path2file;
  102.         }
  103.          
  104.         # начинаем с текущей папки
  105.         $folder = "$localdir$ls$names$ls";
  106.          
  107.         # непосредственно вызываем функцию
  108.         ;
  109.  
  110. if (rdir ($folder)) {
  111.  
  112.           echo 'DONE';
  113.  
  114.      }
  115. else { echo "problema";}
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. }
  124. ?>
  125.  


исходный код браузера

CODE (htmlphp):
скопировать код в буфер обмена
  1.              строка с названием  qwerty    <br>
  2.  
  3.        строка с названием rita    <br>
  4.        строка с названием 123a   <br>
  5.  
  6.        строка с названием kistik <br>/home/portal/Lamppdocs/red/folder/kistik/seks-znakomstva-krasnodarskiy-kray-63.html
  7. /home/portal/Lamppdocs/red/folder/kistik/znakomstva-seks-love-125.html
  8.  
  9.  
  10. /home/portal/Lamppdocs/red/folder/kistik/css/
  11. /home/portal/Lamppdocs/red/folder/kistik/css/banner.png
  12. /home/portal/Lamppdocs/red/folder/kistik/css/style.css~
  13. /home/portal/Lamppdocs/red/folder/kistik/css/style.css
  14.  
  15. DONE             строка с названием  qazxc    <br>
  16.  
  17.        строка с названием katy    <br>
  18.  
  19.        строка с названием 6d231a   <br>
  20.  
  21.        строка с названием bugaga <br><b>Fatal error</b>:  Cannot redeclare rdir() (previously declared in /home/portal/Lamppdocs/123/script.php:45) in <b>/home/portal/Lamppdocs/123/script.php</b> on line <b>45</b><br />
 
 Top
altermann
Отправлено: 02 Июня, 2010 - 11:50:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




Что за ошибка?


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
toropss
Отправлено: 02 Июня, 2010 - 12:03:09
Post Id


Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




Переведите ошибку и все поймете
 
 Top
vitako
Отправлено: 02 Июня, 2010 - 16:05:30
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




я понял, что он не может повторно выполнить функцию rdir, так как она была ранее объявлена, но почему? И как решить эту проблему предложите пожалуйста.
 
 Top
altermann
Отправлено: 02 Июня, 2010 - 16:17:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




Цитата:
# непосредственно вызываем функцию
;

Зачем точка с запятой?

Ну ты и пишешь, пока отступы не задал не понял в чем дело.

У тебя функции объявляются в цикле, и при повторном выполнении цикла он матерится что они уже объявлены. Вынеси объявление функций вне цикла for. Или в начало, или в конец скрипта.

(Отредактировано автором: 02 Июня, 2010 - 16:24:22)



-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
vitako
Отправлено: 02 Июня, 2010 - 16:31:20
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




так ведь в цикле каждый раз новое значение переменной $localdir$ls$names$ls меняется, а именно меняется $names, то есть название папки. А за ";" не углядел.

ТО есть если я функцию уберу из цикла, то переменная $localdir$ls$names$ls будит менятся?
 
 Top
altermann
Отправлено: 02 Июня, 2010 - 16:36:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




vitako пишет:
ТО есть если я функцию уберу из цикла, то переменная $localdir$ls$names$ls будит менятся?

Вот этого я не знаю, я только синтаксис просмотрел. Откуда ты получаешь значения $localdir, $ls, $names, $ls? разве из функций?


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
vitako
Отправлено: 02 Июня, 2010 - 16:41:20
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




4. $localdir = '/home/portal/Lamppdocs/red/folder'; // Путь до папки с другими папками


10. $ls = dirname ("/swap_file"); // показывает "\" в виндоус, "/" в unix

29. $names = $text["$name"]; это внутри цикла.
(Добавление)
$localdir$ls$names$ls до функции , то есть это аргумент, который каждый раз меняется (т.к $names меняется в цикле)
 
 Top
altermann
Отправлено: 02 Июня, 2010 - 16:50:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




Должно работать, пробуй.
Я подозреваю что ты не понимаешь смысл функций, и поэтому впихнул их в цикл. Функции объявляются один раз и потом сколько угодно раз вызываются и выполняют код заключенный в них.


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
vitako
Отправлено: 02 Июня, 2010 - 17:01:35
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Да вы были правы! я совершенно забыл то, что функцию нужно один раз объявлять, а вызывать как раз нужно было в цикле.

Огромное спасибо за помощь altermann!
Я вам очень благодарен.
 
 Top
JustUserR
Отправлено: 03 Июня, 2010 - 18:09:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




vitako пишет:
Да вы были правы! я совершенно забыл то, что функцию нужно один раз объявлять, а вызывать как раз нужно было в цикле.
При желании функцию можно переобъявлять и изменять несколько раз при выполнении PHP-скрипта - для этой цели служат специальные функции из встроенной библиотеки runkit http://php.su/functions/?cat=runkit


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB