max_execution_time

Pegas

Новичок
max_execution_time

Какое рекомендуется время выполнения скрипта? К примеру по умолчанию у меня стоит 30 секунд, однако при пострении массива элементов выполнение превышает лимит 30 сек.
вот алгоритм:
PHP:
// Извлекаем данные из ДБ и формируем их в массив

function get_data($level, $usertable)
  {
  $res=mysql_query("SELECT * FROM ".$usertable." WHERE idp=".$level.";");
  if (0==mysql_num_rows($res))
    return -1;
  else
    {
    $i=1;
    while ($data=mysql_fetch_array($res, MYSQL_ASSOC))
    if (-1!=($tmp=get_data($data["id"], $usertable)))
      {
      $tmp[0]=$data;
      ksort ($tmp);
      $out[$i++]=$tmp;
      }
    else
      $out[$i++]=$data;
    return $out;
    }
  }
 

Demiurg

Guest
и ты надеешься, что пользователь будет ждать 30 секунд ?
 

Pegas

Новичок
а как это обойти? другой алгоритм? или вообще принцип/подход?
 

rotoZOOM

ACM maniac
другой алгоритм и/или принцип подход :)
Скажи что тебе надо и тебе возможно посоветует как это сделать правильно
 

Фанат

oncle terrible
Команда форума
неужели пользователю требвется весь массив?
а сколько в нём элементов, что аж не хватает 30 секунд на получение?
 

SiMM

Новичок
> $res=mysql_query("SELECT * FROM ".$usertable." WHERE idp=".$level.";");
Эта конструкция вообще не должна работать.
[m]mysql_query[/m]
 

Pegas

Новичок
пхп выдает ошибку

Fatal error: Maximum execution time of 60 seconds exceeded .....

в этой строке
PHP:
...
$res=mysql_query("SELECT * FROM ".$usertable." WHERE idp=".$level.";");
...
всего 189xx элементов
 

Фанат

oncle terrible
Команда форума
189 или 18900?
а сама эта функция вызывается сколько раз?
а запрос сколько времени выполняется?
 

Pegas

Новичок
немногим более 18900 и это не предел.
фунция один раз вызывается один раз
 

Фанат

oncle terrible
Команда форума
а зачем юзеру столько данных? он их все прочтёт?
или ты, наверное, не знаешь, что такое БД и не умеешь с ней работать?
 

Pegas

Новичок
ответ в принципе понятен... изменить подход.... может посоветуете как?
 

Tor

Новичок
руками
а какой ответ ты хотел на свой вопрос?
"у меня в подвале стучит, помогите"
 

Pegas

Новичок
мне нужно пострить меню такого порядка
заголовок1->заголовок2->заголовок3

данные в БД хранятся в таком виде:

level | id | pid | name

1|1|0|МЕТАЛЛ
2|2|1|АРМАТУРА
3|3|2|Арматура 6 мм
4|4|3|100100
4|5|3|1
4|6|3|23844.00
4|7|3|19870.00
3|8|2|Арматура 8 мм
4|9|8|100200
4|10|8|1
4|11|8|23064.00
4|12|8|19220.00
3|13|2|Арматура 10 мм
4|14|13|100300
4|15|13|1
4|16|13|21300.00
4|17|13|17750.00
2|18|1|БАЛКА
3|19|18|Балка №10
4|20|19|200100
4|21|19|0
4|22|19|10800.00
4|23|19|9000.00
3|24|18|Лист нерж.
4|25|24|Лист нерж.0,8х1,0х2,0
5|26|25|501010
5|27|25|0
5|28|25|0.00
5|29|25|0.00
4|30|24|Лист нерж.1,0х1,25х2,5
5|31|30|501015
5|32|30|1
5|33|30|0.00
5|34|30|0.00

т.е. должно получиться

МЕТАЛЛ->АРМАТУРА->Арматура 8 мм
 

Tor

Новичок
и так все 18900 записей?
сколько это строк на странице получится? - 4-6 тысяч
и пользователю это надо?
организуй поиск, постраничную выборку и т.д.
 

demongloom

Новичок
А почему бы и нет? Кто мешает для внутреннего пользования использовать долго работающие скрипты?

Между прочем, проблемма довольно серьезная.
Есть несколько вариантов решений.
1. Переписать код, оптимизировать и т.д.
2.
Указать в php.ini max_execution_time.
Для пользователей IIS сюрприз. Вне зависимости от php->max_execution_time, можно получить cgi_timeout. Что бы решить эту проблему нужно (примерный перевод с русского):
в IIS -> Web -> Settings -> Home Catalog -> Settings -> Process Settings -> Cgi timeout = xxx seconds. Но что бы эта опция сработала, нужно указать Default Web Site -> Settings -> Home Catalog -> Sequrity -> Low level (низкий уровень защиты).
 

tashkentchi

Новичок
Автор оригинала: Pegas
немногим более 18900 и это не предел.
фунция один раз вызывается один раз
У тебя функция вызывает себя рекурсивно и выполняется 18900 раз. Лучше одним запросом выбери таблицу в массив и потом разбирайся
 

Opik

Новичок
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2203 у тебя немного похожая задача.
 
Сверху