Какое-то время назад creocoder наткнулся на ?????
вместо значения параметра в логах ошибок Yii. После анализа проблемы стало ясно, что нашёлся баг в PHP.
Exception::getTraceAsString
и Exception::__toString
не работают с юникодом в значениях параметров при построении stacktrace. В результате для
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.