такая жесть PHP: <? class Cacher_Driver_File implements Cacher_Interface { /*.....*/ function Save($cache,$ident){ if(is_array($cache)) $cache=serialize($cache); print $cache; // выводит всё норм,см ниже чё file_put_contents($this->GetDir($ident),$cache); // а в файле теряется строчка die(); } /*....*/ } ?> $cache: HTML: <b>Говорит Containers_Index_Index::ActionIndex<br>My Prams: p1, p2, p3<br> <a href="/zlo;p1,p2,p3/">Link</a> </b> File: HTML: <b>Говорит Containers_Index_Index::ActionIndex<br>My Prams: <br> <a href="/zlo;p1,p2,p3/">Link</a> </b>
Пил много? Убей файл. И запусти код повторно. Это раз. А два, проверь что у тебя файл не перезаписывается дважды каким-нибудь вызовом.
да я сам в ужасе я всё это делал уже, там же die стоит, не может он перезаписываться, вся система умирает может это глюк какой, функция вызывается функцией, которая вызвается как callback но как возможна перезапись после die... Зы. Это кеш шаблонизаторский
вообще система такая PHP: <? ob_start(); ob_start(); //Tpl Starting // Tpl Compiling // Tpl Evaling // Tpl Call CacheFunc // CacheFunc Call Cacher::Save; here die() // printing result //Gzip Encode print ob_get_contents(); ob_end_flush(); ?>
Ну хрен его знает. После die() еще срабатывает register_shutdown('callback') и ob_handler вроде как. Ммм. Есть вариант что он у тебя пишется в разные места. Т.е. ты смотришь не тот файл (какой-нибудь старый) Если дашь минимальный рабочий код, попробую отдебажить.
ты уверен что они закрываются одним ob_end_flush()? Мне помнится что если они вложены, то каждому нужен свой.
DarkElf нет не в одном классе Simpliest всё дефолтное я старые удаляю, тоесть перед запуском папка пустая. пробовал писать в другие места а минимальный код работает =\ мне кажется дело в шаблонизаторе тоесть вот это p1, p2, p3 значение перменной. подстановка в шаблон происходит при евале. потом евалнутая дата идёт в кеш. но где здесь может происходить переподстановка неясно и вообще, перед сохранением кеш правильный
Ну, ты же сам понимаешь, если $data у тебя содержит уже plain-string без переменных, то ничего в нее переподставиться не может. Только повторный eval где-нибудь еще. Раз минималка работает, попробуй занятся подстановкой кода вместо блоков eval. Upd: блин 100% у тебя где-то есть еще точка входа. Я как раз с этим долбился последние два дня в ZF, придурки используют 5ть мест для получения instance одного и того же класса.
попробовал вообще без ob_* тоже самое это было в багах где-то там подругому автоподстановка SID не будет работать
Mr.M.I.T. попробуй в самом конце основного файла выбросить эксепшн и посмотреть по трассировке, что там и где происходит)
ха измеил шаблончик HTML: <b>{$result}<br>My Prams: {if(is_array($params))}{implode(", ",$params)}{/if} <br> <a href="{Request::BindUri(array("index","index","zlo",array("p1","p2","p3")))}">Link</a> </b> на HTML: <b>{$result}<br>My Prams: {implode(", ",$params)} <br> <a href="{Request::BindUri(array("index","index","zlo",array("p1","p2","p3")))}">Link</a> </b> и этот шаблон вообще не скешировался, а скешировался только главный(последний, тот в который этот подставляется) и всё там правильно бляя, не могу больше!
Есть еще вариант с двумя кешами 1.opcode кешер. 2.кешем браузера. Может у тебя выводится echo старого варианта, а в файл пишется новый.
Когда у меня PHP висит как FCGI с WinCache - то обновить в браузере до одного места. Пока я не перезапускаю пул приложения целиком - изменений в коде не видит. У меня нет больше идей. Ошибка где-то тривиальная. Но чтобы найти надо ковырять код. Он имел ввиду перед die() можешь просто сделать debug_print_backtrace(), хотя вряд ли поможет.
интересная вещь произошла, но я не понял почему 1. изменил код, воткнул трассировку 2. запустил скрипт, вывело трассировку. И О ЧУДО, в файл правильно записало! 3. блин, удалил файлы, запустил снова. 4. Трассировка та же!! файлы другие о лоло колокол звенит да нет, всё видит. это точно
Во всём виновата гипножаба. блин, почему я свои косяки пхп сюда не выкладываю, а тупо с ними мирюсь. У меня по ману одно, на практике другое. Но сейчас вот так и не вспомню где чего.