Какое-то время назад 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.