Проблема с оператором .=

tasmanian devil

Новичок
Проблема с оператором .=

Привет!

Столкнулся с такой проблемой:

PHP:
$this->tags[$tag] .= $value;
Вот такой код - важны оператор .= (или +=) и обращение к элементу массива - приводит к обвалу Apache. Решает проблему замена кода на эквивалентный

PHP:
$this->tags[$tag] = $this->tags[$tag] . $value;
Ошибка проявляется на Apache 2.2.x и 1.3.x, и на php 5.2.x. В php 4.4.x все замечательно работает. Ошибка проявляется на двух системах и в разных местах программы, так что это не локальная особенность. Кроме того, она проявляется не всегда. Срабатывает часть из таких мест, да и та не в 100% случаев, а при каких-то определенных обстоятельствах. Т.е. этот код преспокойно проходится пять раз и падает на шестой. А иногда и не падает.

В чем может быть проблема? Я уже все мозги поломал...
 

Апокалипсис

тех дир matras.ru
PHP Version 5.2.3
Apache 2.2

PHP:
class test
{
 private $tags;
 
 public function __construct()
 {
  $this->tags = array("1"=>"тест","2"=>"ещё тест");
  
  $value = "999";
  $tag=1;
  $this->tags[$tag] .=$value;
 
  var_dump($this->tags);
 }
}
$a = new test();
Код:
array(2) { [1]=>  string(7) "тест999" [2]=>  string(8) "ещё тест" }
Генерация: 0.0001

Всё ок
 

tasmanian devil

Новичок
Ошибка проявляется не всегда. Срабатывает часть из них, да и та не в 100% случаев, а при каких-то определенных обстоятельствах. Т.е. этот код преспокойно проходится пять раз и падает на шестой. А иногда и не падает.
 

Апокалипсис

тех дир matras.ru
А откуда уверенность что тут?
может логи подскажут в чём проблема?
зы//
прогнал код в цикле 1 000 000 раз - выполнился за 5.393
 

dimagolov

Новичок
tasmanian devil
допиши тест, который начал Апокалипсис, сделай там цикл (больше 6 раз как ты пишешь) и таки определи падает на нем твой апач, или нет. как убедишься, что у тебя проблема имеет место быть (на тесте, а не на всем коде), выложишь код теста, а мы попробуем у себя.

пока же это все беспредметно.
 

tasmanian devil

Новичок
Автор оригинала: Апокалипсис
А откуда уверенность что тут?
может логи подскажут в чём проблема?
зы// прогнал код в цикле 1 000 000 - выполнился за 5.393
Уверенности у меня нету, конечно же. Но есть причины искать ошибку в этой строке. Проект большой, она там далеко не одна из десятка. Падает именно на этой строке, это точно, ну и глючит еще штук пять подобных, но не все в проекте. Замена этой строки на эквивалентную (см. выше) проблему решает. Еще интересный момент - иногда проблему решает обращение к элементу массива переж присваиванием, например, выведение его в лог. Кстати, если уж на то пошло - в похожем месте у меня сегодня падал phpMySQLAdmin. Ну в общем улик достаточно, я думаю.

У меня есть подозрение, что специально эту ошибку так просто не увидеть. Но есть надежда, что кто-то сталкивался с подобным.
 

Апокалипсис

тех дир matras.ru
Падает именно на этой строке, это точно,
откуда уверенность? может это совпадение просто


сделай так несколько раз:

PHP:
  for($i=0; $i<=1000000;$i++){
  $a = new test();
  }
// на машине без нагрузки выполняется 5 сек
 

berkut

Новичок
офф: неоднократно сталкивался с плавающим багом на php 4.3.10 на функции debug_backtrace() - в зависимости от уже исполненого кода, апач падал. правда на одном и том-же коде падал всегда.
 

fixxxer

К.О.
Партнер клуба
собери с дебагом, добейся падения под gdb, сделай backtrace и репорть баг ;)

-~{}~ 07.11.07 23:30:

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