WinCache кеширует некорректные файлы CakePHP - PullRequest
1 голос
/ 15 ноября 2011

У меня странная проблема с WinCache, и, возможно, это не лучший форум. Я проверил SuperUser, но есть 0 результатов относительно WinCache. Кажется, что поддержка в сети слабая, но по крайней мере SO уже обсуждала это раньше.

У меня есть работающий сайт и сайт разработки на одном сервере (платформа CakePHP, Windows Server 2008 R2, IIS 7.5, PHP 5.3, FastCGI, WinCache 1.1). Живой сайт находится на порте 80, а dev на 81. У IIS есть два веб-сайта, каждый из которых указывает на свою корневую папку в Inetpub \ wwwroot. Каждый сайт работает в своем пуле приложений.

Через некоторое время после внесения изменений в сайт разработчика сайт начал давать ошибки. После некоторой болезненной отладки я обнаружил, что происходит следующая (совершенно неубедительная) цепочка событий:

  1. Живой PHP-скрипт загружается как обычно после GET-запроса
  2. Живой PHP-скрипт POST к себе как обычно после выбора пользователя
  3. PHP-скрипт Dev обрабатывает POST-запросы и ошибки, когда параметры формы не соответствуют ожидаемым.

Если я проверяю свойства WinCache через веб-интерфейс через порт 80 (действующий сайт), я вижу, что корнем документа является Inetpub \ wwwroot \ Live - как и ожидалось. Однако, если я просматриваю список кэшированных файлов на вкладке кэш файлов, я вижу, что некоторые файлы кэшируются дважды. При наведении курсора мне сообщают, что один из Inetpub \ wwwroot \ Dev, а другой из Inetpub \ wwwroot \ Live.

Как это возможно? Почему IIS использует один в GET-запросе, а другой в POST? Я знаю, что CakePHP выбирает, какие файлы загружать, основываясь на отформатированном URL, но файл index.php, который обрабатывает маршрутизацию, находится в Inetpub \ wwwroot \ Live, поэтому, по-видимому, никогда не сможет запросить файл в другом корне документа. Мне кажется, что PHP запрашивает IIS для файла, но IIS теряет свои шарики при взаимодействии с WinCache.

Пока что я не вижу способа отключить WinCache для одного сайта, но даже если бы мог, я бы больше ему не доверял.

Будем весьма благодарны за любые предложения по этому неприятному вопросу.

1 Ответ

2 голосов
/ 29 января 2012

У меня нет проблем.

Попробуйте: Используйте Wincache 1.2 (бета)

Не используйте "."в имени AppPool.

(Опция.) Создайте ProcessUser для каждого AppPool.

Найдите файлы сеансов с именем "wincache_session_ *" в нашем каталоге сеансов.

Скопируйте файл wincache.php из «[AppDir 86] \ IIS [Wincache] \ wincache.php» в каждом веб-каталоге и откройте его через http.

...