Неустойчивая ошибка. Исчезает при введении дополнительной переменной.

Popoff

popoff.donetsk.ua
Неустойчивая ошибка. Исчезает при введении дополнительной переменной.

Здравствуйте!

Недавно столкнулся с ошибкой на сайте. Долго копал. Обнаружил, что ошибка исчезает при самых разнообразных модификациях кода в самых разнообразных местах. То есть нет такого, что в одном месте поменял и ошибка исчезла. Можно в одном месте оставить, а поменять в другом и тогда ошибка тоже может исчезнуть.

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

Вот один из вариантов модификации кода, применение которого устойчиво влияет на появление/исчезновение ошибки.

Код, вызывающий ошибку:

PHP:
return template_load('vote.index.single.allow'.$s_xml,array(
  's_title' => xmlfilter_parse($r_cms['s_title'],$a_data['a_param'])
  ));
Код, не вызывающий ошибку:

PHP:
$s=xmlfilter_parse($r_cms['s_title'],$a_data['a_param']);
return template_load('vote.index.single.allow'.$s_xml,array(
  's_title' => $s
  ));
Или ещё можно вот так поменять и ошибка тоже исчезнет:

PHP:
$a=array(
  's_title' => xmlfilter_parse($r_cms['s_title'],$a_data['a_param'])
  );
return template_load('vote.index.single.allow'.$s_xml,$a);
Возможно, кто-нибудь сталкивался с таким поведением и может что-нибудь предложить, как решить проблему?
 

kruglov

Новичок
romy4
Ну, думаю тем, что это не выяснение и устранение причин, а шаманизм с неизвестными гарантиями успеха.
 

romy4

invoke [brain]
Popoff
стандартной нет такой фунции, может она у тебя возвращает что-то типа ссылки на объект?
какое определение ф-ции?
 

kruglov

Новичок
Я думаю, там php делает core dumped, посему это скорее всего баг в php.
 

Popoff

popoff.donetsk.ua
Пока что накопал, что если вместо xmlfilter_parse() поставить вызов такой функции:

PHP:
function f($s,$a)
{
  $i=$q;
  return $s;
}
То ошибка возникает. Фишка в этой строке:
PHP:
$i=$q;
если её убрать, то ошибка исчезает. Никакие сообщения в журнал ошибок при этом не пишутся. Если $q инициализировать, то ошибка тоже исчезает.

Если использовать промежуточную переменную, как в моём первом посте, то ошибка исчезает и в журнале появляется сообщение о неинициализированной переменной $q.

romy4
http://popoff.donetsk.ua/text/work/libs/xmlfilter/

-~{}~ 09.05.07 00:07:

Вот скрипт для воспроизведения ошибки:

PHP:
<?php

// нужен собственный обработчик ошибок
function _debug_handler()
{
  // и внутри обязательно нужен вызов debug_backtrace()
  debug_backtrace();
}

set_error_handler('_debug_handler');

function a()
{
  // первые два аргумента - любые, но должны быть обязательно
  // третий - неопределённая переменная
  b(1,2,$q);
}

// видимо, любая функция
function b($a,$b,$c)
{
}

// ошибки должны быть обязательно внутри функции
a();

?>
РНР 4.4.7 crashes от такого скрипта. На домашнем компе 4.3.4 - работает нормально.

может, кто попробует у себя?
 
Сверху