<rmcreative>

RSS

Все заметки с тегом «stacktrace»

Можно уточнить:

    (1)
  1. PHP и юникод в стрэктрейсе

    12 марта 2012

    Какое-то время назад creocoder наткнулся на ????? вместо значения параметра в логах ошибок Yii. После анализа проблемы стало ясно, что нашёлся баг в PHP.

    Exception::getTraceAsString и Exception::__toString не работают с юникодом в значениях параметров при построении stacktrace. В результате для

    <?php
    function test($arg){
        throw new Exception();
    }
     
    try {
        test('тест');
    }
    catch(Exception $e) {
        echo $e->getTraceAsString();
        echo (string)$e;
    }

    получаем

    d:\web\usr\local\php54>php.exe d:\src\exception_wrong_trace\test.php
    #0 D:\src\exception_wrong_trace\test.php(7): test('????')
    #1 {main}exception 'Exception' in D:\src\exception_wrong_trace\test.php:3
    Stack trace:
    #0 D:\src\exception_wrong_trace\test.php(7): test('????')
    #1 {main}
    

    Обойти можно собрав строку руками на основе массива, полученного через Exception::getTrace.

    В Yii пока решили это не фиксить. Заслал баг на php.net.

    3 комментария