PHP - помогите разобраться
Мне допустим надо посчитать количество файлов в каталоге, который содержит несколькоуровневую древовидную структуру... пишу простенькую рекурсию
но она воспринимает только те каталоги которые лежат в корне если лезу дальше то говорит, неа не хочу я его открывать, не каталог....
Подскажите ктонить в чем может быть проблема... код выглядит так, по крайней мере в моем исполнении:
dir_read('');
function dir_read($dir){
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir($file))dir_read($file);
else if(is_file($file))$files++;
}
}
closedir($handle);
return;
}
Заранее благодарен.
Цитата:
Originally posted by Arnor
Проблема такая....
Мне допустим надо посчитать количество файлов в Подскажите ктонить в чем может быть проблема... код выглядит так, по крайней мере в моем исполнении:
Проблема такая....
Мне допустим надо посчитать количество файлов в Подскажите ктонить в чем может быть проблема... код выглядит так, по крайней мере в моем исполнении:
Конечно, потому что надо передавать не имя каталога, а полный путь.
Что-то типа этого:
Код:
function dir_read($dir){
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir($file)) dir_read($dir.$file."/");
else if(is_file($file))$files++;
}
}
closedir($handle);
return;
}
dir_read('./');
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir($file)) dir_read($dir.$file."/");
else if(is_file($file))$files++;
}
}
closedir($handle);
return;
}
dir_read('./');
Но тут есть одно но. У меня возникли траблы со временем, т.е. максимальное время исполнения скрипта 30 sec(в конфиге прописано)
В общем идея следующая, при входе в каталог меняем текущий каталог [chdir], при выходе, читаем до текущего места, опять же таки поменяв каталог, [Seek_Dir] и работаем дальше.
Вообще-то этот скрипт не пашет, ошибка в последней строке файла. Нет времени писать всё заново, т.к. у меня есть готовый скрипт. Я завтра его принесу, и отпралю. Он кажется пашет по такому же принципу.
Sorry, но приведённый ниже пример представлен скорее, как схематическое отображение работы скрипта, нежели готовый скрипт.
Код:
$StartDir="./";
dir_read($StartDir);
function dir_read($dir){
global $handle;
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir($file)){
chdir($file);
dir_read($file);
Seek_Dir($dir,$file);
}
else if(is_file($file))$files++;
}
}
closedir($handle);
return;
}
function Seek_Dir($path,$element){
global $handle;
chdir("../");
while(false !== ($file = readdir($handle)))
if($file==$element)break;
}
dir_read($StartDir);
function dir_read($dir){
global $handle;
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir($file)){
chdir($file);
dir_read($file);
Seek_Dir($dir,$file);
}
else if(is_file($file))$files++;
}
}
closedir($handle);
return;
}
function Seek_Dir($path,$element){
global $handle;
chdir("../");
while(false !== ($file = readdir($handle)))
if($file==$element)break;
}
Всем спасибо за помощь, попробую напишу что получилось....:)
system("ls -R");
все верно надо указывать полный путь, но не только при вызове функции, но и при проверки файла или каталога, чем он собственно является...
типа вот так:
Код:
function dir_read($dir){
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle)))
{
if($file!="."&&$file!=".."){
if(is_dir([color= red]$dir.$file[/color])) dir_read($dir.$file."/");
else if(is_file([color=red]$dir.$file[/color]))$files++;
}
}
}
closedir($handle);
return;
}
dir_read('./');
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle)))
{
if($file!="."&&$file!=".."){
if(is_dir([color= red]$dir.$file[/color])) dir_read($dir.$file."/");
else if(is_file([color=red]$dir.$file[/color]))$files++;
}
}
}
closedir($handle);
return;
}
dir_read('./');
Цитата:
Originally posted by ReDrum
как вариант без рекурсии
system("ls -R");
как вариант без рекурсии
system("ls -R");
Так мне не пойдет...
мне ж не только файлы считать надо... это я так утрированно выразился:)... Но все равно спасибо..
Цитата:
Originally posted by Arnor
Так мне не пойдет...
мне ж не только файлы считать надо... это я так утрированно выразился:)... Но все равно спасибо..
Так мне не пойдет...
мне ж не только файлы считать надо... это я так утрированно выразился:)... Но все равно спасибо..
ну параметры по вкусу
Я так понимаю, что мой пример здесь ни к месту, а потому я отваливаю...:)
Цитата:
Originally posted by Romik
Я так понимаю, что мой пример здесь ни к месту, а потому я отваливаю...:)
Я так понимаю, что мой пример здесь ни к месту, а потому я отваливаю...:)
:) Да нет почему все нормально, по твоему я тоже попробовал, но чтото действительно со временем траблы, не знаю почему не намного дольше должно быть по моему.... У меня получилось на выполнение моего скрипта потратилось около трети секунды в корне лежало 500 файлов..+генерация страницы