Скрипт для обработки всех файлов файлов и папок в папке.

Статус
В этой теме нельзя размещать новые ответы.

roland76

Постоялец
Регистрация
8 Ноя 2007
Сообщения
124
Реакции
13
Добрый день всем.

Я начинающий php программер, ищу скрипт который бы получал на входе имя фолдера и потом в цикле сканировал все вложенные в него папки и обрабатывал в них файлы (на жестком диске локального компа).

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

Может есть у кого готовый скриптик?

Заранее спасибо.

P.S. в идеале мне потом нужно будет парсить найденные файлы....:thenks:
 
Только сейчас попался на глаза какой-то код. В приниципе - должен работать (не проверял). Из этого сможешь собрать file-сканер ;)

PHP:
<?php 
function printTree($level=1) {

  $d = @opendir("."); 
  if (!$d) return;

  while (($e=readdir($d)) !== false) {

    if ($e=='.' || $e=='..') continue;

    if (!@is_dir($e)) continue;

    for ($i=0; $i<$level; $i++) echo "  ";

    echo "$e\n";

    if (!chdir($e)) continue;

    printTree($level+1);

    chdir("..");

    flush();

  }

  closedir($d);

}



echo "<pre>";

echo "/\n";

chdir($_SERVER['DOCUMENT_ROOT']);

PrintTree();

echo "</pre>";

?>
 
Спасибо, скрипт отлично выводит файловую структуру, сейчас буду думать куда всунуть поиск всех файлов в каждой папке.
Еще раз спасибо, приятно обрадован, что на этом форуме можно так оперативно получить помощь!
 
Пользовался бы CakePHP, написал бы просто
$folder = new Folder('/usr/home/test');
pr($folder->findRecursive());

А можно даже так:
pr($folder->findRecursive('.*\.html?', true)); // найти все html-файлы и отсортировать.

pr($s) - это <pre><?=print_r($s)?></pre> (чтобы удобнее читать было)
 
Пользовался бы CakePHP, написал бы просто
$folder = new Folder('/usr/home/test');
pr($folder->findRecursive());

А можно даже так:
pr($folder->findRecursive('.*\.html?', true)); // найти все html-файлы и отсортировать.

pr($s) - это <pre><?=print_r($s)?></pre> (чтобы удобнее читать было)

А это чего за зверь такой CakePHP?
findRecursive('.*\.html?', true) - вернет массив с именами файлов?
а если их будет скажем 200 000, это нормально отработает?
 
PHP:
function processDir( $sDirname = "", $sPattern = "", $isRecursion = true )
{
	$sDirname = ($sDirname == "") ? "." : $sDirname;
	$sDirname = (substr($sDirname, -1) == "/" ) ? $sDirname : $sDirname."/";
	$sPattern = ($sPattern == "") ? "*" : $sPattern;
	
	$aList = glob($sDirname.$sPattern, GLOB_BRACE);
	foreach( $aList as $uri )
	{
		if( is_dir($uri) )
		{
			continue;
		}
		else
		{
			processFile($uri);
		}
		
	}
	
	if( !$isRecursion )
	{
		return;
	}
	
	$aList = glob($sDirname."*", GLOB_ONLYDIR);
	foreach( $aList as $uri )
	{	
		if( $uri == "." || $uri == ".." )
		{
			continue;
		}
		else
		{
			processDir($uri, $sPattern);
		}
	}
}
function processFile( $sFilePath )
{
	//Вполняем действия над файлом
	echo $sFilePath."<br />";
}

processDir("", "{*.php, *.js}"); 	//Поиск файлов с расширением .php и .js
processDir("images", "*.jpg");	 	//Поиск файлов в директории images с расширением .jpg
processDir("content", "*", false);	//Поиск всех файлов только в директории content
 
чтож ещё раз выложу
PHP:
<?
function ReadDirectory($dir, $offs) {
	if ($d=opendir($dir)) {
		while ($file=readdir($d)) {
			if (($file=='.') or ($file=='..')) {
				continue;
			}
			if (is_dir($dir."/".$file)) {
			print("<BR>$offs <B>$dir/$file</B>");
				ReadDirectory($dir."/".$file, $offs."-");
			}
			else {
				print("<BR> $offs $dir/$file") ;
			}
		}
	}
	closedir($d);
}
echo ReadDirectory (".", $offs="");
?>
 
А это чего за зверь такой CakePHP?
findRecursive('.*\.html?', true) - вернет массив с именами файлов?
а если их будет скажем 200 000, это нормально отработает?

Для просмотра ссылки Войди или Зарегистрируйся - фреймворк для обленившихся программистов вроде меня.
Если будет 200 000, то будет кушать много памяти. Если памяти хватит, но нормально отработает.

Но если столько файлов и памяти мало, но надо писать свою функцию. Абсолютно универсальных решений не бывает.
 
  • Заблокирован
  • #9
CakePHP не плохая вещь! работает нормально но как сказанно выше кушает много памяти.
Может кто подскажет альтернативу ей, что брабатывало при меньшей нагрузке на память?
 
Если грамотно использовать unbindModel, то можно сэкономить много памяти.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху