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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Определение размера папки (пример из книги)
 
 автор: toproot   (11.09.2010 в 21:17)   письмо автору
 
 

Вот кусок кода
  elseif($service == "folder_size")
  {
     $a = $_GET['a'];
     function size_dir($directory, $size = 0) {
         $dir = opendir($directory);
         while(($file = readdir($dir)))
         {          
             if(is_file("$directory/$file")) { $size += filesize("$directory/$file"); }
             if(is_dir("$directory/$file") && $file != "." && $file != "..")
             {
                size_dir("$directory/$file", $size);
             }
           
         }
         closedir($dir);
         
         return $size;
     }
     echo size_dir($a); 
  }

Папки есть и файлы тоже, и оно их видит и щитает. Но
Какимто чудесным образом некоторые части кода не работают, и $size становится = 0;
Перед рекурсивным вызовом size_dir() $size = 0; после него тоже.

вобщем не могу найти ошибку. пример взял из книги Головоломки на пхп для хакеров 2е издание.

  Ответить  
 
 автор: Trianon   (11.09.2010 в 21:52)   письмо автору
 
   для: toproot   (11.09.2010 в 21:17)
 

>Вот кусок кода
>
  elseif($service == "folder_size")
>  {
>     $a = $_GET['a'];
>     function size_dir($directory, $size = 0) {
>         $dir = opendir($directory);
>         while(($file = readdir($dir)))
>         {          
>             if(is_file("$directory/$file")) { $size += filesize("$directory/$file"); }
>             if(is_dir("$directory/$file") && $file != "." && $file != "..")
>             {
>                size_dir("$directory/$file", $size);

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

За определение функции внутри потока исполняемых операторов Вас нужно расстрелять отдельно.

  Ответить  
 
 автор: toproot   (11.09.2010 в 22:12)   письмо автору
 
   для: Trianon   (11.09.2010 в 21:52)
 

Да, действительно теряю.
просто если б я сам писал, может и присвоил бы size = size_di...
а так в книжке написано, я внимания не обратил. Спасибо!

>За определение функции внутри потока исполняемых операторов Вас нужно расстрелять отдельно.

так я почти всегда так делал, когда нужно. ну теперь буду знать..

  Ответить  
 
 автор: .....   (11.09.2010 в 22:27)
 
   для: Trianon   (11.09.2010 в 21:52)
 

>определение функции внутри потока исполняемых операторов

но если условные операторы от которых зависит определение функции не выполняются и функция остаётся неопределённой значит не тратится время на её компиляцию и в памяти её не остаётся совсем.

Из разряда догадок конечно :) но например почему-то различается время выпоолнения
просто script.php и script.php?1
<?php
header
('content-type: text/plain');

$HEADTIME 0;
function 
g_t($bool=false){ 
    global 
$HEADTIME;
    list(
$m$s) = sscanf(microtime(), '%f %u');
    if(
$bool){
     
printf("<hr/>%.7f\xa\xa", (($m $s) - $HEADTIME));
     
flush();
    } 
$HEADTIME $m $s;
}
g_t();


function 
f_global(){ 
    static 
$x 5000;
    static 
$txt;
     
$txt str_repeat("text\n"500);
    return --
$x;    
}

if (
$_SERVER['QUERY_STRING'] != '') {

  function 
f_local(){
    static 
$x 5000;
    static 
$txt;
     
$txt str_repeat("text\n"500);
    return --
$x;    
  }
  while(
f_local());

} else {

  while(
f_global());
}

g_t(1);
?>

  Ответить  
 
 автор: psychomc   (11.09.2010 в 23:28)   письмо автору
 
   для: .....   (11.09.2010 в 22:27)
 

даже если так...памяти минимум, а читабельность кода просто ужасная

  Ответить  
 
 автор: Trianon   (11.09.2010 в 23:38)   письмо автору
 
   для: psychomc   (11.09.2010 в 23:28)
 

при чем памяти потребуется еще меньше, если определения функций загнать в отдельный файл, а загрузку его поставить под условие.

  Ответить  
 
 автор: psychomc   (11.09.2010 в 23:44)   письмо автору
 
   для: Trianon   (11.09.2010 в 23:38)
 

да, пожалуй для данного случая самый верный подход

  Ответить  
Rambler's Top100
вверх

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