2010-07-14 6 views
0

У меня есть модифицированная версия PHP, которая скомпилирована в PHP, на PHP. Меня не интересует дискуссия о том, почему я не должен этого делать; передовой опыт, стандарты и т. д .; поэтому, пожалуйста, не делайте этого.Как я могу кэшировать или оценивать измененную версию PHP?

Он не модифицирован в ядре, но грубо использует скрипт PHP для изменения каждого файла PHP до его оценки. Из-за удара производительности modfiying каждый файл, я в настоящее время кэширования каждого файла, однако это не является идеальным решением, потому что:

  • две копии каждого файла хранится
  • Можно изменить неправильный файл
  • серверов с паршивым хостингом не позволяют file_put_contents(), поэтому кэш должен быть обновлен на локальном сервере

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

Я хотел бы знать, есть ли лучший способ сделать это, предпочтительно тот, который работает на серверах, которые не позволяют file_put_contents().

+1

Я пока не понимаю сценарий. У вас есть модифицированная версия PHP, работающая на сервере? Модифицировано, как в ядре? И куда входит удаленный хостинг? Что вы подразумеваете под «компиляцией каждого файла в PHP»? Для чего вы клонируете файлы PHP? Когда происходит оценка каждого файла? Я уверен, что ситуация имеет смысл, но сейчас это трудно понять. –

+2

Сделайте 'file_put_contents' требование и двигайтесь вперед. – salathe

+0

См. Выше изменения Пекка. Salathe - серверы, которые я использую, не имеют 'file_put_contents', и у меня нет денег, чтобы их изменить, так что это неприемлемо. Если вы не хотите сделать «богатым» требование. – peterjwest

ответ

1

Имеет ли ваш сервер доступ к кэшам общей памяти? APC, memcache и т. Д.? APC звучит как подходящая для этого.

+0

Что-то вроде APC было бы очень полезно, если бы я мог модифицировать каждый файл PHP до того, как он будет кэшироваться с помощью APC. Вы знаете, возможно ли это? – peterjwest

+0

Поскольку вы находитесь в среде совместного размещения, я сомневаюсь, что вы могли бы использовать любые глобальные перехватчики, чтобы поймать файл перед тем, как перейти к байт-коду. Тем не менее, вы можете просто использовать APC на высоком уровне для кэширования измененного источника строк ваших файлов, а затем использовать метод eval(), который вы упомянули. Преимущество APC заключается в том, что вы можете легко кэшировать как до, так и после версии содержимого каждого файла. – sunetos

+0

Чтобы уточнить, я имею в виду сохранение источника с помощью apc_store/apc_fetch. – sunetos

Смежные вопросы