PHP и Файлы (поиск)

arXon

Новичок
PHP и Файлы (поиск)

Всем привет!
Надо написать программульку на PHP.
Вводим "слово" нажимаем "OK"
и далее процесс программы такой:
1. входим в каталог
2. во всех текстовых файлах ищем слово наше
3. где есть слово выводим название файла в браузер как ссылка
4. при нажатии на нее открывается файл в браузере

прочитал все про файлы теретически все ясно но вот релиазовать не получается

может кто подскажет где можно прочитать про это
буду благодарен

а если есть простой скриптик у кого тоже было бы не плохо
спасибо
 

Demiurg

Guest
какой из пунктов не понятен для реализации ?
 

arXon

Новичок
вот в каталог зашел без проблем
далее считал и вывел в браузел список файло тоже
все гут

а вот открыть их по ссылке не могу
с помощью fpassthru($file)
 

Demiurg

Guest
зачем fpassthru ? у тебя файлы находятся в переделах document_root ?
 

arXon

Новичок
<?php
if ($dir = opendir('D:/PHP_FILES')) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
echo "<a href='index.php'>".$file."</a><br>\n";
}
}
closedir($dir);
}
?>

здесь я считал все из каталога
и в браузере вывел список файлов
а как мне выбранный открыть
 

IntenT

SkyDiver
[m]fopen[/m] -> [m]fgets[/m]
[m]file[/m]
[m]file_get_contents[/m]

как говорится - выбирай любой
 

Demiurg

Guest
Если файл в пределах document_root, то можно завать ссылку на него самого.
 

IntenT

SkyDiver
тут еще нет ни строчки кода по поиску строки. поэтому файл придется открывать с любом случае
 

arXon

Новичок
КАК

<?php
if ($dir = opendir('D:/PHP_FILES')) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
$fp = fopen($file,"r");

echo "<a href='index.php'??? ТУТ КАК ???>".$file."</a><br>\n";
}
}
closedir($dir);
}
?>
 

sage

Новичок
Тут никак.

1). Открываешь файл для чтения
2). [m]fgets[/m] или [m]file[/m] или [m]file_get_contents[/m]
Ищешь слово, запоминаешь имя файла, выводишь его.
3). Закрываешь файл.
 

Dmitry22

Guest
хм...а если нужно сделать постраничный вывод, то это что же, нужно будет каждый раз от страницы к странице одну и ту же работу совершать?
 

IntenT

SkyDiver
значит не делай постраничный вывод.
или кешируй результаты.
или передавай номер файла, с которого начинать поиск
или придумай сам как решить проблему
 

Dmitry22

Guest
или придумай сам как решить проблему
наверное можно создавать временный файл в котором хранить результаты и привязывать его к юзеру с помощью сессии, или совсем все в сессию запихать.
или кешируй результаты.
Это как?
 

Demiurg

Guest
Dmitry22
ты никогда не задумывался, как ищет яндыкс ?
 

Dmitry22

Guest
Demiurg
Сейчас узнаю: - "как ищет яндекс".

-~{}~ 23.04.04 00:47:

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

-~{}~ 23.04.04 00:50:

Demiurg
это я к тому, что ты предлагаешь кэшировать контент страниц в базу и работать с ней. Если я тебя правильно понял.
 

Demiurg

Guest
Dmitry22
это я к:
>>или кешируй результаты.
>Это как?
 

Dmitry22

Guest
Demiurg
Ну да, так и понял. Просто по ходу возникла такая идея.
 

arXon

Новичок
СПАСИБО РАЗОБРАЛСЯ :)

вот код кому интересно

index.php------------------------------------------------

<html>
<body>
<form action=index.php method="POST">
Введите слово: <input type=text name="name"><br>
<input type=submit value="Нажмите кнопку, чтобы запустить сценарий!"><BR>

</form>
</body>
</html>
<?PHP
@$names = $_REQUEST["name"];
if ($names == ""){
exit;
}
$dir = 'D:/PHP_FILES';
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fp=fopen("$dir/$file" , "rb");

while (@($i<count($sim-1))){
@$sim=fgets($fp);
if (stristr($sim,$names)==true) {
echo "<a href='index2.php?file=$dir/$file'>".$file."</a><BR>";
break;
}
}
fclose($fp);
}
}
closedir($handle);
}
?>

index2.php----------------------------------------------


<?PHP
$file=$_REQUEST["file"];
$fp=fopen("$file" , "rb");
fpassthru($fp);
?>
 
Сверху