Проблемы с постраничным выводом

Ventura_forever

Новичок
Проблемы с постраничным выводом

Я начинающий (сегодня начал ПХП учить).
Необходимо написать скрипт поиска фоток по описанию в файле и выводе по 10 штук. Всё написал кроме разбитого вывода, а точнее не знаю как сделать переход. Что я имею ввиду?
Смотрите сами:
это test.php

<html>
<head><title>Тест</title></head>
<body>
<?
if ($from==0)
{$f=file("test.txt"); //присваиваем массиву файл с данными
for ($i=0;$i<sizeof($f);$i++) //проверяем в каждой строке
if (preg_match("/$text/i",$f[$i])) //нет ли там слова $text
$ar[]=$f[$i]; //если есть, то записываем в массив
}
if (sizeof($ar)==0) echo "По вашему запросу ничего не найдено";
else
{
$total_photo_number=sizeof($ar); //общее количество фоток
$photos_per_page=10; // количество фоток на странице
$total_pages = ceil($total_photo_number/$photos_per_page);//получаем количество страниц

// запускаем цикл - количество итераций равно количеству страниц
for ($i=0; $i<$total_pages; $i++){
// получаем значение $from (как $page_number) для использования в формировании ссылки
$page_number=$i*$photos_per_page;
// если $page_number (фактически это проверка того является ли $from текущим) не соответствует текущей странице,
// выводим ссылку на страницу со значением $from равным $page_number
if ($page_number!=$from) echo "<a href='".$PHP_SELF./*"?text=".$text.*/"?from=".$page_number."'> ".($i+1)." </a>";
// иначе просто выводим номер страницы - данная строка необязательна,
// пропустив ее вы просто получите линк на текущую страницу
else echo $i+1; // если page_number - текущая страница - ничего не выводим (ссылку не делаем)
}
}
?>
</body>
</html>


Проанализируйте пожалуйста это. передаются параметры $text и $from. Изначально $from=0, а вот при переходе по ссылке на 2-ую страницу - сохраняется ли в оперативе значение $ar?
 

Фанат

oncle terrible
Команда форума
нет, не сохранится.
никакого оператива нет.
вот здесь об этом спецуиально написано [f]na_tanke[/f]

так что, надо все операции выполнять при каждом обращении к скрипту.

Если будут еще вопросы - обращайся.
 

Ventura_forever

Новичок
Так это очень неоптимизировано - к примеру поиск по базе в 1000 записей, при переходе на следующую страницу нужно опять искать?
И ещё вопрос. Я где-то читал, что ПХП - это интерпретируемый язык. Что это такое? И какой тогда АСП?
 

Popoff

popoff.donetsk.ua
2Ventura_forever: это, по-твоему 10 строк? Мне же просто лень будет их читать, а тем более вникать.. %) Думаю, не одному мне:
п.3
 

Popoff

popoff.donetsk.ua
примеру поиск по базе в 1000 записей, при переходе на следующую страницу нужно опять искать
если у тебя всего-навсего какая-то 1000 записей, то проще будет искать каждый раз заново. а если записей хотя бы 10^6 и у тебя *очень сложные* запросы на поиск, то можно воспользоваться временными таблицами, в которых ты будешь сохранять результаты поиска.
кстати, как мне кажется, на этом форуме, например, и сделано =)
 

Фанат

oncle terrible
Команда форума
интерпретируемый - это тоже очень неоптимизированно :)
Это значит, что программа все время находится в исходных кодах, а компилируется в машинные каждый раз при исполнении.
АСП - такой же.
С - компилируемый. Если очень хочется оптимизма - пиши на нем :)
 

Ventura_forever

Новичок
>интерпретируемый - это тоже очень неоптимизированно :)
>Это значит, что программа все время находится в исходных кодах, а компилируется в машинные каждый раз при исполнении.
>АСП - такой же.

Понятно, а мне говорили АСП быстрее работает... Понятно - при каждом обращении к скрипту он компилируется и выполняется... а почему нельзя его заранее скомпилировать?

Popuf - что ты имел ввиду под словом *очень сложные*? А если у меня не база, а просто текстовый файл? оесть например на форумах, в Гугле и т.д. формируется временная (ну на пол-часика) таблица с результатами поиска, а остальные сайты каждый раз выполняют поиск и выводят кусочек в 10/20/50/100 записей?
 

Фанат

oncle terrible
Команда форума
про АСП, во-первых - врали, а во-вторых - быстродействие определяется не только интерпретируемостью ,а кучей других параметров.
и в-третьих - быстродействие - не главный параметр в выборе языка. Во всяком случае - не единственный.
В общем, зря ты его сюда приплел.

Почему нельзя? потому, что такова структура языка. Так он задуман, со своими возможностями и ограничениями, накладываемыми способом исполнения.

Давай ты не будешь растекаться мыслью по древу, а спрашивать что-то одно.
Если тебя интересует про языки врообще - велкам ту оффтопик.

Если постраничный вывод - вот и давай о нем.

Ты, пожалуйста, читай внимательно, что тебе пишут.
Никто не писал про гугль и про ВСЕ форумы.
Писалось про ЕДИНСТВЕННЫЙ форум, конкретно про этот.

Гугль очень врядли кэширует результаты запросов, я думаю.
разве что - если человек запрашивает вторую страницу.
Вообще, гугль - это отдельная тема для разговора.
Это не твоя несчастная тысяча в текстовом файле.

И вот ствоим файлом я тебя понять не могу.
Что значить это твое "если".
Ты сам не знаешь, что у тебя за файл?
что у тебя в нем за быстродействие?
Нук так возьми и померяй.
И либо просто ничего больше на фопрум не пиши, если окажется, что все твои теоретические страхи тут не при чем, либо напиши КОНКРЕТНО:
Такая-то операция выполняется столько-то.
А мне надо - столько-то
Как мне ее оптимизировать.

А заниматься гаданием на кофейной гуще здесь не любят.
Тебе дали эмпирический ответ - забей.
Хочешь конкретики - приведи сначала конкретику сам.
Ясно?
 

Ventura_forever

Новичок
Ясно, но понимаешь, я читаю ПХП третий час... :) всего
Насчёт Гугла - ты хочешь сказать, что он не кэширует запросы???!!! Ты чего, а если я захочу просмотреть три страницы (по 10 результатов), то он что - будет три раза по всей базе искать? Врят ли.
"если" - означает, что у меня просто текстовый файл, но возможно сделаю базу.
Насколько я понял в случае с базой проблем по быстродействию не будет - а вот что с файлом? проверить (1000 записей*1 Кб каждая) 10Мб не накладно ли будет каждый раз?
 

nagash

Guest
1 000 записей умножить на один килобайт и получается 10 мегобайт...
хороший у тебя там калькулятор стоит... мне такой пригодился бы - зарплату считать!
 

Nakmar

Guest
Ventura_forever, ну Фанат тебе же ясно написал, ты или конкретно или думай про себя, чего разводишь?

Нет, значение $ar нигде не сохраняется, если ты его сам не сохранишь (передашь по ссылке на след. страницу).
 

Ventura_forever

Новичок
Да уменя опечатка там - 1 мег.... :)
Nakmar - а как передать по ссылке на следующую страницу? :)
Методом GET? так размер URL ограничен 1024 непомню чего (байт или килобайт)...
Конкретный вопрос - какой алгоритм используется в крупных серваках, типа поисковых системах, огромных форумах и т.д. ведь если при переходе на следующие страницы будет заново проводится поиск по огромной базе, то сервер сдохнет... :)
Насколько я понял там используются временные таблицы?
Ещё один вопрос - можно ли оценить время выполнения поиска по шаблону в текстовом файле обьёмом 1-2 Мегабайта?
А в принципе я со скриптом разобрался - если будут проблемы - напишу...
 

Ventura_forever

Новичок
Вот уже появился вопрос:
Есть ли в ПХП функция, которая возвращает URL, по которому к скрипту обратились. Зачем это мне? Просто при переходе на следующую страницу необходимо заново осуществлять поиск, а значит передавать сам текст запроса, а как нам известно в URL'е он кодируется в виде %AA, есть ли тогда функция, которая текст кодирует в 16-ричное представление?
 

nagash

Guest
новые вопросы координально отличающиеся от начального пиши в новый топик...

$_SERVER['HTTP_REFERER'] но это неправильно...
лутше гетом передавать все переменный снова
 

Ventura_forever

Новичок
>лутше гетом передавать все переменный снова
Я так и делаю, а вот с текстом не выходит - в переменно например записано - "поиск", и в URL он пишет ...&find=поиск&... а нужно &find=&%EF%EE%E8%F1%EA.. - необходимо текст преобразовать в 16-ричный формат - понятно?
 

Ventura_forever

Новичок
Сэнкс, так бы и сразу...
А в принципе этот метод лучше использовать или есть другие? Я имею ввиду для передачи скрипту прошлого значения...
 

nagash

Guest
при поиске желательно данные гетом передавать... чтобы пользователи друг другу могли показывать результаты поиска....
 
Сверху