Только переменные могут быть переданы по ссылке в sfException - PullRequest
0 голосов
/ 20 октября 2011

У меня странная проблема, и я не могу понять, почему это происходит.Сначала немного предыстории.У меня приложение Symfony 1.4 установлено примерно на 10 производственных серверах.Все они работают под управлением PHP 5.3.0, но я не уверен, что все они настроены одинаково (это зависит от администраторов, и я знаком только с частями файла php.ini).Итак ... Несколько дней назад на одном из серверов появилась странная ошибка.После каждого вызова метода forward в классе действия (единственное, что важно для него для незнакомых людей Symfony, это то, что он что-то делает и выдает sfStopException, который наследует класс sfException): «Неустранимая ошибка: только переменные могут быть переданыссылка "ошибка генерируется.Я искал в Интернете причину, и вот что я нашел - the-stickman.com/web-development/php/php-505-fatal-error-only-variables-can-be-passed-by-ссылка/.Я думаю, что этот пост прекрасно описывает проблему и решение.Пока все нормально - ничего странного ... Пока я не увидел, где была сгенерирована ошибка - ... / lib / vendor / symfony / lib / exception / sfException.class.php в строке 293, которая обозначает этот метод:

/**
 * Returns an excerpt of a code file around the given line number.
 *
 * @param string $file  A file path
 * @param int    $line  The selected line number
 *
 * @return string An HTML string
 */
static protected function fileExcerpt($file, $line)
{
    if (is_readable($file))
    {
        // THIS LINE GENERATES THE ERROR
        $content = preg_split('#<br />#', highlight_file($file, true)); 

        $lines = array();
        for ($i = max($line - 3, 1), $max = min($line + 3, count($content)); $i <= $max; $i++)
        {
            $lines[] = '<li'.($i == $line ? ' class="selected"' : '').'>'.$content[$i - 1].'</li>';
        }

        return '<ol start="'.max($line - 3, 1).'">'.implode("\n", $lines).'</ol>';
    }
}

Итак ... имея в виду объяснение, почему возникает этот тип ошибки, я понимаю, в чем проблема, но не могу придумать хорошего решения.Эта часть кода на самом деле не важна для моего приложения - она ​​просто отображает код php-файлов в трассировке стека Symfony (не большая боль, что я не могу увидеть это на одном рабочем сервере, имея в виду, что он не должендаже там не будет)Но единственное решение (быстрое), которое я нашел, это просто прокомментировать часть этого кода.Теперь пользователи могут использовать мое приложение, но это не делает меня счастливым, потому что я не нашел чистого решения (я не люблю взламывать собственное приложение).Итак ... Надеюсь, я достаточно хорошо описал проблему, и кто-то может дать мне хотя бы несколько идей ... Спасибо:).

РЕДАКТИРОВАТЬ: и вот php.ini из двух частей:- часть 1 - http://pastie.org/2733955- часть 2 - http://pastie.org/2733961Я могу вставить больше информации о конфигурации php, но мне нужно знать, что будет интересно - php.ini - единственная конфигурация php, с которой я немного знаком ... Cheers:).

1 Ответ

0 голосов
/ 20 октября 2011

Измените $content = preg_split('#<br />#', highlight_file($file, true));
на $content = preg_split('#<br />#', ($hf = highlight_file($file, true)) );
, и это должно сработать.(А если нет, тогда мы будем на шаг ближе к ответу.)

Хотя, если честно, я не уверен, почему это вызвало бы приступ.Согласно документации, второй параметр preg_split передается по значению.Черт, ни одна из этих функций в этом фрагменте не требует передачи по ссылке.Но опять же, вы сказали, что это происходило на одном серверах, так что это может быть ошибка конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...