Перейти к публикации
  • 0
Гость Михаил

Индексация файлов в папке

Вопрос

Гость Михаил

В общем делаю скрипт для сайта музыки, и столкнулся с такой проблемой:

Вот скрипт

 

<?php
// Spectator's Indexing Script
// (C) Spectator.ru
// Для работы требуется PHP 4 или выше.
// Если вы будете использовать этот скрипт, ссылка на Spectator.ru крайне желательна. Спасибо.
// ставим скрипт "на счетчик" (чтобы знать, как долго он выполнялся
$ttt=microtime();
$ttt=((double)strstr($ttt, ' ')+(double)substr($ttt,0,strpos($ttt,' ')));

$indexdir="Audio"; #индексируемая директория
$indexfile="Audio/indexmusic.txt"; #файл, в котором будет лежать индекс
// если вы хотите индексировать файлы в нескольких директориях, надо внести несколько махоньких добавлений...

// делаем так, чтобы не было таймаута из-за того, что скрипт будет долго выполняться (на всякий случай)
// и из-за того, что пользователь нажмет кнопку "стоп" в браузере
$abort = ignore_user_abort(1);
set_time_limit(600);
// Функция, удалающая слова, короче 3х букв. Пригодится дальше.
function sw (&$item1, $key) { if (strlen($item1)<3) $item1=""; }
// по очереди открываем все файлы в директории	и проверяем, можно ли их индексировать
// у меня можно индексировать только файлы, которые имеют вид "число.txt"
// то есть && (is_numeric(str_replace (".txt","", $file))) - это вам наверняка не понадобится.
$handle=opendir('./'.$indexdir); 
while (false!==($file = readdir($handle))): 
if ($file != "." && $file != ".." && (is_numeric(str_replace (".mp3","", $file))) ):
// открываем очередной файл 
$fd = fopen ($indexdir."/".$file, "r");
$contents = fread ($fd, filesize ($indexdir."/".$file));
Fclose ($fd);

// убираем переводы строк
$contents=str_replace ("n"," ", $contents);
$contents=str_replace ("r","", $contents);

// убираем хтмл-тэги
$contents=str_replace ('<br>', ' ', $contents);
$contents=str_replace ('<p>', ' ', $contents);
$contents=strip_tags ($contents);

// убираем знаки препинания	 и цифры
// все эти строки работают быстрей, чем один eregi_replace!
$contents=str_replace (' -', ' ', $contents);
$contents=str_replace ('.', ' ', $contents);
$contents=str_replace (',', ' ', $contents);
$contents=str_replace ('!', ' ', $contents);
$contents=str_replace ('?', ' ', $contents);
$contents=str_replace (':', ' ', $contents);
$contents=str_replace (';', ' ', $contents);
$contents=str_replace (')', ' ', $contents);
$contents=str_replace ('(', ' ', $contents);
$contents=str_replace ('"', ' ', $contents);
// убираем заглавные буквы
$contents=strtolower ($contents);
// разбиваем на слова, убираем слова, короче 3х букв
$contents=explode (" ", $contents);
// вот и функция пригодилась...
array_walk ($contents, 'sw');

// убираем повторяющиеся слова
$contents=array_unique ($contents);

// соединяем слова
$contents=implode (" ", $contents);

// формируем соответствующую строку в индексе.
$fullfile.=$file."| ".$contents." n";

// индекс-файл будет иметь вид:
// имя_файла|индекс_для_данного_файла n
// имя_файла|индекс_для_данного_файла n
// имя_файла|индекс_для_данного_файла n
echo ($file." проиндексирован<br>");
// переходим к следующему файлу
endif;
endwhile;
closedir($handle);
// убираем двойные пробелы
while (stristr($fullfile, " ")) $fullfile=str_replace (" "," ",$fullfile);
// индекс готов, сохраняем его
$fp = fopen($indexfile, "w+");
fwrite($fp, $fullfile);
fclose($fp);
// считаем, как долго работал скрипт
$ddd=microtime();
$ddd=((double)strstr($ddd, ' ')+(double)substr($ddd,0,strpos($ddd,' ')));
echo ("<br>Время индексации: ".(number_format(($ddd-$ttt),3))." секунд<br>");
echo ("Размер индекса: ".(number_format((round ((filesize($indexfile))/1024)) , 0, ".",".")))." Kb";
?> 

 

 

 

Но он что-то не выполняется, страница грузится бесконечно.

Помогите кто может  :pla4et:  Срочно надо.



оффтоп

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 ответа на этот вопрос

Рекомендованные сообщения

  • 0
iCast

Но он что-то не выполняется, страница грузится бесконечно.

В бесконечный цикл уходит.

c593f65ccdcfcbdaaae45d834135f7c2eed1fa2e

 

Путь неправильный.

 

$handle=opendir($indexdir);
И тогда вот так по моему

 

 

<?php
// Spectator's Indexing Script
// (C) Spectator.ru
// Для работы требуется PHP 4 или выше.
// Если вы будете использовать этот скрипт, ссылка на Spectator.ru крайне желательна. Спасибо.
// ставим скрипт "на счетчик" (чтобы знать, как долго он выполнялся
$ttt=microtime();
$ttt=((double)strstr($ttt, ' ')+(double)substr($ttt,0,strpos($ttt,' ')));
 
$indexdir="/home/andy/music"; #индексируемая директория
$indexfile="/home/andy/indexmusic.txt"; #файл, в котором будет лежать индекс
// если вы хотите индексировать файлы в нескольких директориях, надо внести несколько махоньких добавлений...
 
// делаем так, чтобы не было таймаута из-за того, что скрипт будет долго выполняться (на всякий случай)
// и из-за того, что пользователь нажмет кнопку "стоп" в браузере
$abort = ignore_user_abort(1);
set_time_limit(600);
// Функция, удалающая слова, короче 3х букв. Пригодится дальше.
function sw (&$item1, $key) { if (strlen($item1)<3) $item1=""; }
// по очереди открываем все файлы в директории	и проверяем, можно ли их индексировать
// у меня можно индексировать только файлы, которые имеют вид "число.txt"
// то есть && (is_numeric(str_replace (".txt","", $file))) - это вам наверняка не понадобится.
$handle=opendir($indexdir); 
while (false!==($file = readdir($handle))): 
if ($file != "." && $file != ".." && (is_numeric(str_replace (".mp3","", $file))) ):
// открываем очередной файл 
$fd = fopen ($indexdir."/".$file, "r");
$contents = fread ($fd, filesize ($indexdir."/".$file));
Fclose ($fd);
 
// убираем переводы строк
$contents=str_replace ("n"," ", $contents);
$contents=str_replace ("r","", $contents);
 
// убираем хтмл-тэги
$contents=str_replace ('<br>', ' ', $contents);
$contents=str_replace ('<p>', ' ', $contents);
$contents=strip_tags ($contents);
 
// убираем знаки препинания	 и цифры
// все эти строки работают быстрей, чем один eregi_replace!
$contents=str_replace (' -', ' ', $contents);
$contents=str_replace ('.', ' ', $contents);
$contents=str_replace (',', ' ', $contents);
$contents=str_replace ('!', ' ', $contents);
$contents=str_replace ('?', ' ', $contents);
$contents=str_replace (':', ' ', $contents);
$contents=str_replace (';', ' ', $contents);
$contents=str_replace (')', ' ', $contents);
$contents=str_replace ('(', ' ', $contents);
$contents=str_replace ('"', ' ', $contents);
// убираем заглавные буквы
$contents=strtolower ($contents);
// разбиваем на слова, убираем слова, короче 3х букв
$contents=explode (" ", $contents);
// вот и функция пригодилась...
array_walk ($contents, 'sw');
 
// убираем повторяющиеся слова
$contents=array_unique ($contents);
 
// соединяем слова
$contents=implode (" ", $contents);
 
// формируем соответствующую строку в индексе.
$fullfile.=$file."| ".$contents." n";
 
// индекс-файл будет иметь вид:
// имя_файла|индекс_для_данного_файла n
// имя_файла|индекс_для_данного_файла n
// имя_файла|индекс_для_данного_файла n
echo ($file." проиндексирован<br>");
// переходим к следующему файлу
endif;
endwhile;
closedir($handle);
// убираем двойные пробелы
while (stristr($fullfile, " ")) $fullfile=str_replace (" "," ",$fullfile);
// индекс готов, сохраняем его
$fp = fopen($indexfile, "w+");
fwrite($fp, $fullfile);
fclose($fp);
// считаем, как долго работал скрипт
$ddd=microtime();
$ddd=((double)strstr($ddd, ' ')+(double)substr($ddd,0,strpos($ddd,' ')));
echo ("<br>Время индексации: ".(number_format(($ddd-$ttt),3))." секунд<br>");
echo ("Размер индекса: ".(number_format((round ((filesize($indexfile))/1024)) , 0, ".",".")))." Kb";
?> 

 

Изменено пользователем iCast

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Гость Михаил

@iCast,Спасибо :popkorn: 

Но я обошелся другим способом:

<!DOCTYPE html>
<html>
<head>
	<title>Массивы</title>
	<meta charset="utf-8">
</head>
<body>
<?php 
$dir_patch = "./Music/";
	$scan = scandir($dir_patch);

$i = 1;
while ($i <= 31) {
	$i = $i + 1;
	echo $music=<<<HTML
	<div style="width:300px;">
	<audio style="float:left;display:block; height:40px;" src="./Music/$scan[$i]" controls="controls"></audio>\n
	<br>
	</div>
HTML;

}
?>
</body>
</html> 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
GhostlyP

<?
$dir_patch = './Music/';
$scan = scandir($dir_patch);
for($i=0; $i<=30; $i++){echo '<div style="width: 300px;"><audio style="float: left; display: block; height: 40px;" src="'.$dir_patch.''.$scan[$i].'"></audio><br /></div>';}
?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×