|
|
|
| При исполнении скрипта выдает результаты как надо, но пишет ошибку:
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\avart.ua\www\basa_search.php on line 37
Мне нужно сделать поиск по всем разделам. Разделов у меня много. Поэтому когда запускаю скрипт, он слишком долго выполняется - где-то примерно с минуту. Можно ли ускорить время выполнения? Как сделать, чтобы не выскакивала ошибка? | |
|
|
|
|
|
|
|
для: Лена
(21.10.2008 в 10:40)
| | ограничение вемени выполнения меняется с помощью вызова функции set_time_limit().
Впрочем, увеличивать этот предел на хостинге могут и запретить.
А что касатется скорости поиска, то это полностью определяется структурой базы и алгоритмами, реализующими собственно логику поиска.
Вслепую тут ничего не скажешь. | |
|
|
|
|
 1.4 Кб |
|
|
для: Trianon
(21.10.2008 в 11:32)
| | Вот я могу показать кусок, где осуществляется поиск по базе.
Что из этого может тормозить обработку? | |
|
|
|
|
автор: x? (21.10.2008 в 17:37) |
|
|
для: Лена
(21.10.2008 в 11:43)
| | из этого может сильно тормозить GROUP BY и ORDER BY
и то что возвращается похоже приличный объём данных.
я так думаю.
не заметил есть-ли LIMIT в запросе | |
|
|
|
|
|
|
|
для: x?
(21.10.2008 в 17:37)
| | Лена, Вы точно привели код из файла basa_search.php?
> из этого может сильно тормозить GROUP BY и ORDER BY
PHP не считает время выполнения запроса за execution time. | |
|
|
|
|
|
|
|
для: BinLaden
(22.10.2008 в 10:43)
| | Код из файла basa_search.php привела точно, один в один.
К нему при определенных условиях мы переходим из файла go_search.php:
<?php
//продолжили сессию
session_start();
//если слово у нас не одно, а несколько
$one_word = strtok($_SESSION['word']," ");
while ($one_word){
switch($_SESSION['area']){
// Поиск в заголовках (по базе)
case 1:{
include("basa_search.php");
break;
}
// поиск в текстах статей(в индексных файлах)
case 2:{
include("go_index5.5.php");
break;
}
}
}
?>
|
Если надо, могу дать основной файл поиска search.php (где определяются пост-данные и переменные сессии), из которого делается редирект на go_search.php
Вот еще что не могу понять: пишет, что для исполнения скрипта время истекло, а значит, по логике вещей, результатов быть не должно, но в то же время над надписью Maximum execution time.... выдаются правильные результаты - ссылки на заголовки, которые находятся в базе, то есть несмотря на ошибку(фатальную!) сервер как-то умудряется выдать результат. | |
|
|
|
|
|
|
|
для: Лена
(22.10.2008 в 14:14)
| | > //если слово у нас не одно, а несколько
> $one_word = strtok($_SESSION['word']," ");
> while ($one_word){
В большинстве случаев (кроме того, когда будет строка "0 ...") при таком коде будет зацикливание.
Скорее всего, Вы забыли приписать в цикле
<?php
# ...
$one_word = strtok(' ');
?>
|
И в цикле вообще не должно быть include/require.
Вам нужно сформировать запрос, чтобы было, например, "SELECT ... WHERE MATCH (`main_text`) AGAINST ('слов*' IN BOOLEAN MODE) AND MATCH (`main_text`) AGAINST ('вороб*' IN BOOLEAN MODE) AND ...", а не искать несколько раз. К тому же в таком случае Вы сможете указать логику "и"/"или" (сейчас у Вас всегда "или"). | |
|
|
|
|
|
|
|
для: BinLaden
(22.10.2008 в 15:54)
| | Переделала. Все получилось. Вы мне еще раз помогли. Спасибо | |
|
|
|