Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Не работает рекурсия

Сообщения:  [1-4] 

 
 автор: Trianon   (08.11.2006 в 09:25)   письмо автору
 
   для: Hatred   (07.11.2006 в 23:50)
 

Указанный набор файлов лежит у Вас в каталогах

C:/Webservers
C:/Webservers/etc
C:/Webservers/etc/scripts
C:/Webservers/etc/scripts/init.d


Рекурсия не работает потому, что на каждом шагу Вы изменяете общую переменную $this->dOpen

   
 
 автор: Hatred   (07.11.2006 в 23:50)   письмо автору
 
   для: cheops   (07.11.2006 в 22:50)
 

У меня стоит набор "Денвер". Установлен он в каталог по умолчанию - "C:/Webservers". Когда ввожу этот путь, например, то получаю следующее:


.
..
.
..
CONFIGURATION.txt
README.txt
Restart.exe
Run.exe
.
..
Control.bat
Control.pl
.
..
apache.pl
hosts.pl
mysql.pl
vdisk.pl
_stub.pl


Это не состав этой директории с поддиректориями. "Эхал" по-разному и пришёл к выводу, что криво работает рекурсия. $path в функциях изменяется, похоже.

Так же не работает вот эта строчка, точнее её часть:
if(is_dir($path)&&(isset($_POST['action']))) //Не работает проверка isset
То есть если пользователь ни разу не сабмитил форму, то скрипт не будет запускаться. Всё элементарно, но не работает. Много раз использоват такой приём в других приложениях, но тут что-то не соображу.

Я переработал пример, приведённый в Вашей книге. Просто использовал класс для тренировки работы с классами; ну, и исключение засунул дял тех же целей.

   
 
 автор: cheops   (07.11.2006 в 22:50)   письмо автору
 
   для: Hatred   (07.11.2006 в 19:18)
 

А в чём "не работа" заключается? (Запустил на локальной машине - работает).

   
 
 автор: Hatred   (07.11.2006 в 19:18)   письмо автору
 
 

В общем, скрипт должен выводить все содержимое вводимого каталога. А не хочет.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Тест</title>
</head>
<body>
<h2><center>Список файлов</center></h2>
<hr>
<form method="post">
  <input name="path_" size="150" maxlength="150">&nbsp;
  <input type="submit" value="Отправить">&nbsp;
  <input type="hidden" name="action" value="1">
</form>
<?
class PrintFiles
{
  private 
$dOpen;
  private 
$countDirs=array();

  function 
consrtuct($path)
  { if(isset(
$_POST['action'])) echo("Ok!");
    if(
is_dir($path)&&(isset($_POST['action'])))   //Не работает проверка isset
    
{
      
$this->readDirect($path);
    }
    else
    {
      throw new 
Exception("<h3>Ошибка открытия каталога</h3>",1);
    }
  }

  function 
readDirect($path)
  {
      
$this->dOpen=openDir($path);

      while(
$this->current=readDir($this->dOpen))
      {
        if(
is_dir($path."/".$this->current)&&($this->current!=".")
                                           &&(
$this->current!=".."))
        {
          
$this->readDirect($path."/".$this->current);
        }
        else
        {
          
$this->countDirs[]=$this->current;
        }
      }
  }

  function 
mainAction()
  {
    foreach(
$this->countDirs as $this->key)
    {
      echo(
$this->key."<br>");
    }
  }

  function 
__destruct()
  {
    
closeDir($this->dOpen);
  }
}

try
{
  
$obj=new PrintFiles();
  
$obj->consrtuct($_POST['path_']);
  
$obj->mainAction();
}

catch(
Exception $e)
{
  echo(
"Исключение: ".$e->getCode()."<br>");
  echo(
$e->getMessage());
}
?>
</body>
</html>


Код простой, но никак не могу понять, в чём дело.

   

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования