Перейти к публикации
  • Объявления

    • TheAndrey

      Правила раздела "Техподдержка"   17.03.2018

      Вы должны как можно подробне описась проблему. От этого зависит скорость нахождения решения проблемы. При необходимости прикрепляйте скриншоты. Укажите на какой CMS работает ваш сайт. При проблемах с Javascript рекомендуется указать данные из консоли Javascript, это ускорит решение проблемы.
  • 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>';}
?>

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


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

×