2016-02-10 3 views
1

Я бегу приложения PHP на лазури и я испытываю какое-то странное поведение: Этот фрагмент кода runns в консоли команду:Laravel + Wincache на MS Azure: Не хранящие значения

public function fire(Illuminate\Contracts\Cache\Repository $cache) { 
    $cache->forever('someKey', 'someValue'); 

    var_dump($cache->get('someKey')); 
} 

Выход есть:

NULL 

Доступ к значению через wincache_ucache_get после выполнения команды также возвращает NULL (с ​​префиксом и без). Кто-нибудь подскажет это?


PS: В соответствии с phpinfo(), включен wincache usercache: wincache.ucenabled На


После некоторых более отладки я знаю еще несколько фактов:

в изолированном файле PHP wincache_ucache_set и wincache_ucache_get работа совершенно.

Однако звонок в wincache_ucache_set в Illuminate\Cache\WinCacheStore возвращается false.

ответ

1

Как есть настройка wincache.enablecli в php runtime для управления включением wincache в режиме CLI.

По умолчанию установлено 0, так что функция wincache_ucache_set() не может работать в командах мастеров.

Вы можете обратиться к руководству на Лазурном чиновника о Changing PHP_INI_SYSTEM configuration settings, чтобы установить

wincache.enablecli=1

в дополнительных параметрах конфигурации PHP.

Тогда следующий фрагмент кода должен хорошо работать:

public function fire() 
    { 
     wincache_ucache_set('foo','goo',0); 
     var_dump(wincache_ucache_get('foo')); 
    } 

или как:

use Cache; 
public function fire() 
    { 

     Cache::forever('someKey', 'someValue'); 
     var_dump(Cache::get('someKey')); 

    } 
+0

Спасибо за ваш ответ! Но он не работает для меня: я устанавливаю 'wincache.enablecli = 1',' phpinfo() 'reports' wincache.enablecli On On'. Теперь 'wincache_ucache_set' возвращает' true' в команде artisan; 'wincache_ucache_get' в сценариях CGI не возвращает правильное значение. Возможно ли, что существуют отдельные хранилища для CGI и CLI? – marstato

+2

Кажется, что 'wincache' создаст разные экземпляры пользовательского кэша для разных пользователей. Здесь команды мастеров в cli и http-запросах в cgi - разные пользователи. И они не могут делиться своими кэшами пользователей. Возможно, нам нужны некоторые другие типы кешей. Как «файл, массив», который будет использовать одни и те же локальные файлы для кэширования значений или «redis», которые могут совместно использовать значения для разных пользователей. –

+0

Я могу подтвердить, что @ GaryLiu-MSFT правильно; WinCache создает отдельный кеш для процессов, выполняемых CLI, и процессов, запущенных с помощью fastcgi. Источник: Я являюсь владельцем WinCache. – DropPhone