Прододжение темы про некорректную работу алгоритма косолидации
Macik |
|
---|---|
Установил последнее исправление №914 Не помогло. Включил отладку и залез в код. Вот, что выясняется: if (preg_match_all('#\burl\((\'|")?([^\)"\']+)\1?\)#i', $file_code, $mt, PREG_SET_ORDER)) { foreach ($mt as $m) { $filename = empty($relative_path) ? $m[2] : $relative_path . '/' . $m[2]; $filename = str_replace($current_path, '', realpath($filename)); if (!$filename) { continue; } if ($filename[0] === '/') { $filename = mb_substr($filename, 1); } $file_code = str_replace($m[0], 'url("' . $filename . '")', $file_code); } }
- проблема не в регулярном выражении, оно отрабатывает нормально (по крайней мере с последними правками). Теперь подробнее... В итоге на одном (для примера) из шагов цикла имеем (строки 4005-4007) следующие входные данные:
Стал копать дальше пришел к выводу, что проблема в функции
В моем примере (в строке 4006) получается Поэкпериментировал:
и только когда все слэши идут в одном формате и без открывающего слеша работает правильно:
Так что, как решение проблемы надо проверять (и отрезать) ведущий слэш в Добавлено 3 минуты спустя:
Да, и в https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
|
Отредактировано: Macik (17.05.2012 12:35, 12 лет назад) |
Trustmaster |
|
---|---|
Спасибо за исследование! Я бы продолжал безрезультатно пожимать плечами, т.к. Windows для разработки и тестирования не использую и не догадался бы, что дело в слешах. В самое ближайшее время исправлю слеши на прямые и уберу слеш в начале. May the Source be with you!
|
Macik |
|
---|---|
Проверил свежую версию. Еще не все чисто (точнее говоря все еще не работает под windows ): при первом запуске (с включенной консолидацией) на теме HTMLkickstart вылезло вот такое: илл. С этим пока не разбирался. А вот с url ресурсами такая картина: илл. - туда попадает полный (файловый) путь, плюс ко всему он там «изувечен». залез в код:
Видимо дело вот в этой строке: здесь str_replace не отрабатывает т.к. в $current_path у нас пусть с «правильными» (замененными ранее) слэшами, а realpath нам возвращает windows-style «xxx\xxx\». Таким образом в $filename оказывается полный файловый путь с обратными слэшами.
Добавлено 10 минут спустя: Поковырял ошибку с «@import» надо править регулярное выражение в 4004 строке:
оно жадное и захватывает сразу 2 строки из файла themes/kickstart/style.css и получается: $m[0] = '@import url(http://fonts.googleapis.com/css?family=Arimo:400,700);@import url(css/modalbox.css);' что и вызывает ошибку с первого скриншота. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
|
Отредактировано: Macik (01.06.2012 21:32, 12 лет назад) |