Кэширование APC с переменными включает

Я провел некоторое исследование кэширования APC с PHP и обнаружил, что условные включения просто не работают. Нравится:

if($a) {
    include('a.php');
} else {
    include('b.php');
}

Мой вопрос: могу ли я обойти это с включением переменных? Такие как:

if($a) {
    $file = 'a.php';
} else {
    $file = 'b.php';
}
include($file);

Будет ли последний код успешно кэширован APC?


person Community    schedule 08.07.2009    source источник


Ответы (3)


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

Если вы привязаны к условным включениям, вы должны учитывать, что, возможно, это не имеет большого значения. :)

person Evert    schedule 08.07.2009

Пакет APC включает в себя файл apc.php (он находится где-то в /usr/share/doc/, я думаю, так что сделайте копию), который покажет вам, какие файлы кэшируются (вам нужно отредактировать его и установить пароль, чтобы увидеть полный путь) - вы точно знаете, что это не работает, или вы исходите из китайского шепота, который, кажется, окружает APC?

person Greg    schedule 08.07.2009

Увидел этот пост сейчас.
Подумал, может кому пригодится.

При использовании APC, если используется apc.stat=0, то относительные пути не будут работать в include, require и т. д.
Необходимо использовать абсолютные пути.

Например:
Рассмотрим сценарий внутри папки с именем myfolder.

Относительные пути вызовут ошибки:

<?php include 'script2.php'; ?>

Вместо этого используйте абсолютный путь:

<?php include $_SERVER['DOCUMENT_ROOT'] . '/myfolder/script2.php'; ?>

Дополнительные сведения см. по следующим ссылкам:
https://bugs.php.net/bug.php?id=59493
http://www.phpbb.com/community/viewtopic.php?f=46&t=2112260&p=12919262#p12919262

person Anish    schedule 07.07.2012