дерево сайта php

psics
На сайте с 02.04.2009
Offline
130
778

Хочу создать скрипт, который проходит по хостингу и получает все папки и подпапки и файлы. И проверяет их на изменение.

Но возникла проблема с самовызовом функции (я только знакомлюсь с ООП).

Или возможно вы подскажете решение...



<?php


class Scanhost
{
public function get_dir($dirname)
{
$files2 = scandir($dirname, 1); //сканирование папки
$folders = $files = array();

foreach ($files2 as $components):
if(is_dir( $components )): //проверка если папка
if($components == "." || $components == "..")
continue;
$folders[] = $components; //помещаем все папки в массив
//echo $components . "- <span style='color: red;'>папка</span> <br>";


else: //если файл
$files[] = $components; //помещаем все файлы в массив
//echo $components . "- <span style='color: green;'>файл</span> <br>";
endif;
endforeach;

$count = count($folders); //число папок
while($count):
$dirname = $folders[($count-1)];
echo $dirname."<br>";
$count --;
endwhile;
/* $count = count($files); //число файлов
while($count):
$filename = $files[($count-1)];
echo $filename."<br>";
$count --;
endwhile;*/
}
}


$dirname = $_SERVER['DOCUMENT_ROOT']; //начальная папка
$scan = new Scanhost; //создание класса Scanhost
$scan->get_dir($dirname); //вызов функции get_dir класса Scanhost


?>

echo $dirname."<br>"

надо заменить на самовызывающуюся функцию, как я понимаю...

---------- Добавлено 31.01.2015 в 09:07 ----------

и сразу же тут вопрос, как лучше отследить изменения файлов?

ДП
На сайте с 23.11.2009
Offline
203
#1

1. Вызывайте это же метод $this->get_dir($dirname);

2. Чтобы узнать, что что-то изменилось - надо как-то хранить предыдущее значение, с которым будете сравнивать. Ну или хеш там можно, если новый и старый не совпали - значит содержимое изменилось.

З.Ы. можно консольной командой узнать все файлы, измененные за последние сутки. Вот так, например:

exec("find ".$INFO['base_dir']."/templates/email -type f -mtime -1 -print", $output, $status);

В подпапках тоже найдет.

psics
На сайте с 02.04.2009
Offline
130
#2

и на хостинге?

ДП
На сайте с 23.11.2009
Offline
203
#3
psics:
и на хостинге?

что на хостинге?

Если вы про команду консольную - то если хостинг на линуксе (а скорее всего да) и разрешен exec (а тут бывает, что и нет) - то будет работать.

Тут отталкиваясь от задачки, у меня этот скрипт шлет на почту список измененных файлов. По идее в таком случае можно вообще без php обойтись (в cron добавить команду эту), письмо наверняка можно и из консоли отправить, просто я не настолько этим владею, поэтому сделал как умею.

psics
На сайте с 02.04.2009
Offline
130
#4

тот вариант пока отпадает.



<?php


class Scanhost
{
public function get_dir($dirname)
{
$files2 = scandir($dirname, 1); //сканирование папки
$folders = $files = array();

foreach ($files2 as $components):
if(is_dir( $components )): //проверка если папка
if($components == "." || $components == ".."): //игнорируем подъемы на уровень выше
continue;
endif;
$folders[] = $components; //помещаем все папки в массив
else: //если файл
$files[] = $components; //помещаем все файлы в массив
endif;
endforeach;

$count = count($folders); //число папок
while($count):
$dirname = $folders[($count-1)];
$count --;
$this->get_dir($dirname);
echo $dirname;
endwhile;

/* $count = count($files); //число файлов
while($count):
$filename = $files[($count-1)];
echo $filename."<br>";
$count --;
endwhile;*/
}
}


$dirname = $_SERVER['DOCUMENT_ROOT']; //начальная папка
$scan = new Scanhost; //создание класса Scanhost
$scan->get_dir($dirname); //вызов функции get_dir класса Scanhost


?>

а этот вариант выводит только папки первого уровня...

ДП
На сайте с 23.11.2009
Offline
203
#5

У вас в первый раз в get_dir() передается полный путь папки, а когда ижет рекурсивный вызов - то только одно название.


$dirname1 = $folders[($count-1)];
$count --;
$this->get_dir($dirname.DIRECTORY_SEPARATOR.$dirname1);

вот как-то так вызывать надо - т.е. полный путь передавать

SeVlad
На сайте с 03.11.2008
Offline
1609
#6
psics:
Хочу создать скрипт, который проходит по хостингу и получает все папки и подпапки и файлы. И проверяет их на изменение.

Держи, велосипедист :) (ссылка в 6м посте)

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
psics
На сайте с 02.04.2009
Offline
130
#7

спасибо, так в принципе рабочий, но с кодировкой траблы)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий