我在azure上运行PHP应用程序并遇到一些奇怪的行为:此代码段在控制台命令中运行:
public function fire(Illuminate\Contracts\Cache\Repository $cache) {
$cache->forever('someKey', 'someValue');
var_dump($cache->get('someKey'));
}
输出结果为:
NULL
执行该命令后通过wincache_ucache_get访问该值也会返回NULL(带前缀和不带)。有人知道这个吗?
P.S。:根据phpinfo()启用wincache usercache:wincache.ucenabled On
经过一些调试后,我知道了更多的事实:
在一个孤立的php文件中wincache_ucache_set
和wincache_ucache_get
完美地工作。
但是,wincache_ucache_set
中对Illuminate\Cache\WinCacheStore
的调用会返回false
。
答案 0 :(得分:2)
因为php运行时中有一个设置wincache.enablecli
来控制是否在CLI模式下启用了wincache
。
默认情况下,它设置为0,因此函数wincache_ucache_set()
在artisan命令中无效。
您可以参考Azure官方关于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'));
}