2) ? strtolower($item) : '';
}
//sw()
function go_to_dir($dir){
global $ifd, $extens, $closeddirs; # дескриптор ,расширения , закрытые папки
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
if (is_dir($dir . '/' . $file) && !in_array($file, $closeddirs)){
## если папка, и если имени нет в массиве запрещённых
go_to_dir($dir . "/" . $file);
}
else if ( in_array(strrchr($file, '.'), $extens)
&& (($fsize = filesize ($dir."/".$file)) > 0 && $fsize < 2000000)) {
### если файл, проверяется есть ли в массиве $extens такое расширение
### проверку размера файла можно убрать если нужно
$fd = fopen ($dir. '/' .$file, "r");
flock($fd, LOCK_EX);
$contents = split('[[:punct:][:space:]]+', fread($fd, $fsize));
array_walk($contents, 'sw');
$contents=array_unique($contents);
// разбиваем на слова, убираем слова короче 3х букв
// убираем повторяющиеся слова
fwrite( $ifd ,
$dir. '/' .$file . '|' . implode (" ", $contents) . "\n");
### Запись
echo $dir. '/' .$file . " проиндексирован
";
flush();
}
}
closedir($handle);
}
// go_to_dir()
$indexfile = "indexfile.txt"; //файл, в котором будет лежать индекс
$ifd = fopen($indexfile, "r+") OR exit('fopen ');
flock($ifd, LOCK_EX) OR exit( 'flock');
# Сразу получить дескриптор и заблокировать
ftruncate( $ifd, 0 ) OR exit( 'ftruncate');
# Усечь до нулевой длинны
$indexdir = "./forum"; //индексируемая директория
go_to_dir($indexdir);
flock($ifd, LOCK_UN);
fclose($ifd);
echo '