X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Генератор страниц. Как реализовать иначе?
Licoric
Licoric
Topic Starter сообщение 20.2.2014, 13:55; Ответить: Licoric
Сообщение #1


[PHP]<?php
$allstr = 300; // всего строк в сабиндексе - задается руками
$header = "<!--#include virtual=\"header.html\"-->\n";
$footer = "\n<!--#include virtual=\"footer.html\"-->";
$host = "*";
$user = "*";
$pass = "*";
$bd = "*";
$db = mysql_connect ($host, $user, $pass) or die ("Не могу создать соединение");
mysql_select_db($bd) or die (mysql_error());
mysql_query('SET NAMES cp1251');
set_time_limit(0);
$query = "SELECT tovar FROM tvr_tbl WHERE
UCASE(SUBSTRING(tovar,1,1))=\"А\"
or UCASE(SUBSTRING(tovar,1,1))=\"Б\"
ORDER BY tovar ASC";
$res = mysql_query($query) or die(mysql_error());
$stroki = ceil((mysql_num_rows ($res)) / $allstr);
$x = 1;
$sub = 1;
setlocale(LC_ALL, 'ru_RU.CP1251');
while ($row = mysql_fetch_array($res)) {
$tovar = ucwords(strtolower($row['tovar']));
if ($x == 1){$index .= " <a href=\"sub_family_".$sub.".html\">".$tovar; }
if ($x == $allstr){$index .= " - ".$tovar."</a><br>\n"; $x = 0; $sub++; }
$x++;
}
$somecontent = $header."<h3>Выберите диапазон каталога:</h3>\n".$index." - ".$tovar."</a>".$footer;;
$handle = fopen("index.html", "w");
if (fwrite($handle, $somecontent) === FALSE) {
echo "Не могу произвести запись в файл /index/index.html.";
exit;
}
fclose($handle);
$file_name = 1; // счетчик в имени файлов:
for ($x=0; $file_name<=$stroki;) {
$query_page = "SELECT * FROM tvr_tbl WHERE
UCASE(SUBSTRING(tovar,1,1))=\"А\"
or UCASE(SUBSTRING(tovar,1,1))=\"Б\"
ORDER BY tovar ASC limit ".$x.", ".$allstr."";
unset($tovar);
$res_page = mysql_query($query_page) or die(mysql_error());
while ($row_page = mysql_fetch_array($res_page)) {
$id = $row_page['id'];
$tovar .= "<a href=catalog.php?tovar=".$id.">".ucwords(strtolower($row_page['tovar']))."</a><br>\n";
}
$catalog = $header."<br><a href=\"index.php\">&larr; назад</a><br><br>\n".$tovar.$footer;
$handle_per = fopen("sub_family_".$file_name.".html", "w");
if (fwrite($handle_per, $catalog) === FALSE) {
echo "Не могу произвести запись в файл sub_family_".$file_name.".html.";
exit;
}
echo "Файл sub_family_".$file_name.".html сгенерирован.<br>";
unset($tovar);
fclose($handle_per);
$file_name++;
$x = $x+$allstr;
}
?>[/PHP]
суть этого кода. Берем записи по запросу. Делим на группы по 300 строк (для удобства просмотра). Получаются "диапазоны". Все "диапазоны" на главку, внутри диапазона сами строки этого диапазона. Через цикл запросами генерируем сами эти диапазоны.
В итоге нужно разбить гигантскую базу на "офлайновый" просмотр по алфавиту.

Теперь особенности:
- База целиком весит около 450 мегабайт.
- Занимает порядка 2 700 000 строк.
- импорт базы в мускул был около двух-трех часов
- генерация куска базы в хтмл файлы идет около 2-3 часов. Может больше. *Тестовые загоны показывали большое время. Сейчас скрипт первый пошел в работу. Скажу потом время создания первого и последнего файла для точной картины времени генерации.
- кусок базы это примерно 500 000 строк
- массивами это не сделать (я не допер как) - постоянно пишет, что нет памяти. Идея с массивами заключается в том, что бы за 1 запрос вытащить все данные и далее без мускула их сортировать и делить. Наработки показали, что надежней (проще) будет через кучу запросов. По крайней мере стабильно работает.

Вопрос в зал: как бы поступили вы?

Что-то уже после всего меня осенило, что можно было бы всю базу запихнуть в текстовый файл и его еще раз распарсить в отдельные хтмл файлы.
При генерации одного этапа загрузка мускула около 45%. 2 скрипта одновременно вешают сервак наглухо.

В общем давайте поговорим о коде))) Примеры, варианты, теория.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 20.2.2014, 14:22; Ответить: Licoric
Сообщение #2


*расчетное время - 6 часов генерации. Треть файлов готова. За 2 часа примерно.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 20.2.2014, 15:18; Ответить: Licoric
Сообщение #3


***Подсказали идею - пойду попробую реализовать

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Арбитражники, как ведете учет расходов и доходов?
12 Boymaster 1923 Вчера, 21:03
автор: MisterBit
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрая индексация страниц сайта и обратных ссылок - 2Index
38 2Index 6642 18.4.2024, 12:56
автор: 2Index
Горячая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
29 freeax 4816 17.4.2024, 1:19
автор: sergio11
Горячая тема (нет новых ответов) Как вы отдыхаете от работы за компом
148 adw-kupon.ru 19712 8.4.2024, 10:37
автор: Skyworker
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
18 uahomka 3107 5.4.2024, 5:53
автор: Skyworker


 



RSS Текстовая версия Сейчас: 20.4.2024, 5:41
Дизайн