Где я не права в написании этих строк:

zerok

Новичок
Где я не права в написании этих строк:

PHP:
if ($style[$data['alias']]) { 
     $skin = $style[$data['alias']]; 
     $_SESSION['skin']= $skin; 
} else { 
    $skin = ceil(rand(1, $maxrand)); 
    if (!$_SESSION['skin'] or ($_SESSION['skin'] != $skin)) { 
         $_SESSION['skin']= $skin; 
    } else if ($_SESSION['skin'] == $skin) { 
        while($_SESSION['skin'] == $skin) { 
             $skin = ceil(rand(1, $maxrand)); 
        }
       $_SESSION['skin']= $skin; 
    } 
}
$maxrand = 7;
Для страниц alias которых присутствует в массиве style стиль берется из массива.
Для страниц у которых стиля там не присутствует стиль генерится рандомайзом из диапазона всех стилей, но проверяется чтоб предыдущий стиль был не равен текущему.

В саппорте зенон мне сказали что цикл

PHP:
        while($_SESSION['skin'] == $skin) { 
             $skin = ceil(rand(1, $maxrand)); 
        }
вызывают зацикливание при любых условиях. Скрипт
выполняется 300 секунд и завершается по cputime.
Мы закомментировали эти строки и проблема разрешилась.

Закоментарили они их при помощи значка #

Я не права ? Где именно ?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
> Где именно ?
хочется ответить "в геноме", но будет непонятно и обидно, а это не моя цель

суть в том, что мы не можем никак знать, что содержится в $style, $data и $_SESSION. Мы не знаем, что в Зенон думают и почему.
Поэтому топик надо закрыть, а Вам нанять программиста или изучать дебаг.

Подробней:
http://phpclub.ru/talk/showthread.php?s=&threadid=73429&rand=60
 

Фанат

oncle terrible
Команда форума
grigori, ты чего такой жестокий?
если здесь регистер глобалсы виноваты, то это отладкой еще поймать надо.

-~{}~ 19.04.10 17:24:

Хотя, конечно, смысл этих шаманских заклинаний от меня ускользает
 

zerok

Новичок
Спасибо за намек про php_flag register_globals

выключила его в .htaccess Обычно все что я пишу рассчитано на выключенный флаг.

Объясню смысл проблемы. На сайте время от времени наблюдаются тормоза. Я связываю их наличие с задержкой ответа mysql базы. В связи с этим компании зенон была послана жалоба.

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

Может ли команда rand в диапазоне с 1 до 7 выдавать в течение 300 мс отработки скрипта одну и туже цифру ?
Я лично в это не верю.

Все остальное в коде не существенно. И в принципе можно стереть.

-~{}~ 19.04.10 17:59:

Автор оригинала: *****

если здесь регистер глобалсы виноваты, то это отладкой еще поймать надо.

-~{}~ 19.04.10 17:24:

Хотя, конечно, смысл этих шаманских заклинаний от меня ускользает
Чем именно могут быть виноваты регистер глобалсы ?

Странице передается только один параметр (page=NNN)

Сессии как то особенно работают, когда они включены ?

Включила отладку всех переменных во время работы скрипта.
Код:
style array:
array(6) {
  ["index"]=>
  string(1) "1"
  ["nevroz"]=>
  string(1) "5"
  ["alkogolizm"]=>
  string(1) "2"
  ["tabakokurenie"]=>
  string(1) "3"
  ["korrektsiya-vesa"]=>
  string(1) "4"
  ["igromanii"]=>
  string(1) "6"
}
data alias array:
string(0) ""
style not exist
var_dump($skin)
float(5)
session is = $skin
while start var_dump($_SESSION)
array(2) {
  ["img_text"]=>
  string(26) "Мы подарим Вам новую жизнь"
  ["skin"]=>
  float(5)
}
before randvar_dump($skin)
float(5)
after randvar_dump($skin)
float(4)
var_dump($k)
int(1)
var_dump($_SESSION)
array(2) {
  ["img_text"]=>
  string(26) "Мы подарим Вам новую жизнь"
  ["skin"]=>
  float(4)
}
 

Фанат

oncle terrible
Команда форума
у зенона действительно все всегда работает.
Но хостер здесь по-моему ни при чем.

про регистер глобалсчитать здесь
http://www.phpfaq.ru/sessions#bugs
но я не знаю, в этом ли заключается проблема.
 

dimagolov

Новичок
1. заменить rand на mt_rand
2. добавить в цикл счетчик и в случае если он превышает $maxrand, то делать $skin = ($_SESSION['skin'] + 1) % $maxrand
 

fixxxer

К.О.
Партнер клуба
>В саппорте зенон мне сказали что цикл
>while($_SESSION['skin'] == $skin) {

Похоже, при register globals on условие будет верным всегда.
 

zerok

Новичок
fixxxer

спасибо всем. я поняла в чем засада. Глобалс выключила. Как то привыкла, что по умолчанию он выключен и расслабилась.

$_SESSION['skin'] переименовано в $_SESSION['skin_number']
Добавлен счетчик цикла допустим до 5 оборотов, если за 5 оборотов не сгенерили то присваеваем, что вышло.

Не приницпиально, что стиль повторится. .. Это всего лиш "случайная раскраска страницы"

Правда тормоза так и остались (четное количество проблем видимо )
 

zerok

Новичок
dimagolov

Во время выполнения скрипта ?
Просто проблема "плавающая", она есть не всегда. То есть то нет.

Даже на одной и той же странице.

Ок.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
забылся, я с глобалсами не работал уже лет 5

-~{}~ 19.04.10 20:48:

zerok
извини, просто не ругайся так в привате :)
 
Сверху