|
|
|
| Вот кусок кода
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е издание. | |
|
|
|
|
|
|
|
для: 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);
|
функция возвращает значение?
возвращает.
Вы его присваиваете куда или теряете?
теряете.
чего удивляться.
За определение функции внутри потока исполняемых операторов Вас нужно расстрелять отдельно. | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: .....
(11.09.2010 в 22:27)
| | даже если так...памяти минимум, а читабельность кода просто ужасная | |
|
|
|
|
|
|
|
для: psychomc
(11.09.2010 в 23:28)
| | при чем памяти потребуется еще меньше, если определения функций загнать в отдельный файл, а загрузку его поставить под условие. | |
|
|
|
|
|
|
|
для: Trianon
(11.09.2010 в 23:38)
| | да, пожалуй для данного случая самый верный подход | |
|
|
|