За последние 24 часа нас посетили 21775 программистов и 1014 роботов. Сейчас ищут 635 программистов ...

file_put_contents или другие глюки

Тема в разделе "Прочие вопросы по PHP", создана пользователем Mr.M.I.T., 2 янв 2010.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    такая жесть
    PHP:
    1. <?
    2. class Cacher_Driver_File implements Cacher_Interface {
    3. /*.....*/
    4.     function Save($cache,$ident){
    5.         if(is_array($cache)) $cache=serialize($cache);
    6.                         print $cache; // выводит всё норм,см ниже чё
    7.         file_put_contents($this->GetDir($ident),$cache); // а в файле теряется строчка
    8.                         die();
    9.     }
    10. /*....*/
    11. }
    12. ?>
    $cache:
    HTML:
    1. <b>Говорит Containers_Index_Index::ActionIndex<br>My Prams:
    2.  
    3. p1, p2, p3<br>
    4. <a href="/zlo;p1,p2,p3/">Link</a>
    5. </b>
    File:
    HTML:
    1. <b>Говорит Containers_Index_Index::ActionIndex<br>My Prams:
    2.  
    3. <br>
    4. <a href="/zlo;p1,p2,p3/">Link</a>
    5. </b>
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Пил много?

    Убей файл.
    И запусти код повторно. Это раз.
    А два, проверь что у тебя файл не перезаписывается дважды каким-нибудь вызовом.
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    да я сам в ужасе

    я всё это делал уже,
    там же die стоит, не может он перезаписываться, вся система умирает

    может это глюк какой, функция вызывается функцией, которая вызвается как callback
    но как возможна перезапись после die...

    Зы. Это кеш шаблонизаторский
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вообще система такая
    PHP:
    1. <?
    2.  
    3. //Tpl Starting
    4. // Tpl Compiling
    5. //  Tpl Evaling
    6. //    Tpl Call CacheFunc
    7. //      CacheFunc Call Cacher::Save; here die()
    8.  
    9.  
    10. // printing result
    11.  
    12.  
    13. //Gzip Encode
    14. ?>
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Mr.M.I.T.
    пошерсти деструкторы своих классов))
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну хрен его знает.
    После die() еще срабатывает register_shutdown('callback')
    и ob_handler вроде как.

    Ммм. Есть вариант что он у тебя пишется в разные места. Т.е. ты смотришь не тот файл (какой-нибудь старый)

    Если дашь минимальный рабочий код, попробую отдебажить.
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ты уверен что они закрываются одним ob_end_flush()? Мне помнится что если они вложены, то каждому нужен свой.
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    DarkElf
    нет не в одном классе
    Simpliest
    всё дефолтное
    я старые удаляю, тоесть перед запуском папка пустая. пробовал писать в другие места
    а минимальный код работает =\

    мне кажется дело в шаблонизаторе
    тоесть вот это p1, p2, p3 значение перменной. подстановка в шаблон происходит при евале.
    потом евалнутая дата идёт в кеш.

    но где здесь может происходить переподстановка неясно
    и вообще, перед сохранением кеш правильный
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну, ты же сам понимаешь, если $data у тебя содержит уже plain-string без переменных, то ничего в нее переподставиться не может.
    Только повторный eval где-нибудь еще.

    Раз минималка работает, попробуй занятся подстановкой кода вместо блоков eval.

    Upd: блин 100% у тебя где-то есть еще точка входа. Я как раз с этим долбился последние два дня в ZF, придурки используют 5ть мест для получения instance одного и того же класса.
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    попробовал вообще без ob_*
    тоже самое
    это было в багах где-то
    там подругому автоподстановка SID не будет работать
     
  11. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Mr.M.I.T.

    попробуй в самом конце основного файла выбросить эксепшн и посмотреть по трассировке, что там и где происходит)
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ха
    измеил шаблончик
    HTML:
    1. <b>{$result}<br>My Prams:
    2.  
    3. {if(is_array($params))}{implode(", ",$params)}{/if}
    4. <br>
    5. <a href="{Request::BindUri(array("index","index","zlo",array("p1","p2","p3")))}">Link</a>
    6. </b>
    на
    HTML:
    1. <b>{$result}<br>My Prams:
    2.  
    3. {implode(", ",$params)}
    4. <br>
    5. <a href="{Request::BindUri(array("index","index","zlo",array("p1","p2","p3")))}">Link</a>
    6. </b>
    и этот шаблон вообще не скешировался, а скешировался только главный(последний, тот в который этот подставляется)
    и всё там правильно

    бляя, не могу больше!
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Есть еще вариант с двумя кешами
    1.opcode кешер.
    2.кешем браузера.

    Может у тебя выводится echo старого варианта, а в файл пишется новый.
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    DarkElf
    всмысле? не понял, где выбросить?
    Simpliest
    не, я же жму в браузере обновить
     
  15. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Когда у меня PHP висит как FCGI с WinCache - то обновить в браузере до одного места.
    Пока я не перезапускаю пул приложения целиком - изменений в коде не видит.

    У меня нет больше идей. Ошибка где-то тривиальная. Но чтобы найти надо ковырять код.

    Он имел ввиду перед die()

    можешь просто сделать debug_print_backtrace(), хотя вряд ли поможет.
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    интересная вещь произошла, но я не понял почему

    1. изменил код, воткнул трассировку
    2. запустил скрипт, вывело трассировку. И О ЧУДО, в файл правильно записало!
    3. блин, удалил файлы, запустил снова.
    4. Трассировка та же!! файлы другие
    о лоло колокол звенит

    да нет, всё видит. это точно
     
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    бгг...
    ты съел мой мозг.

    Upd: Или давай код - посмотрю, или потом расскажешь, в чем было дело :)
     
  18. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    там много кода, долго объяснять что к чему
    завта если чё кину =) если доживу
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    во всём была виновата Опера
     
  20. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Во всём виновата гипножаба.

    блин, почему я свои косяки пхп сюда не выкладываю, а тупо с ними мирюсь.

    У меня по ману одно, на практике другое. Но сейчас вот так и не вспомню где чего.
     
  21. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    а вот не мирись а выкладывай, а то и поговорить не о чём. Вдруг кому то интересно будет!!!
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    что опера отправляет ещё один лишний запрос на поиск фавиконки в корне сайта
     
  24. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Mr.M.I.T.
    =) НГ жёг. В хламину нажрался!
     
  25. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    что есть НГ?