2016-02-10 88 views
1

我運行在Azure上一個PHP應用程序,我遇到一些奇怪的行爲:在一個控制檯命令這個片段runns:Laravel + WINCACHE在MS天青:不存儲值

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_setwincache_ucache_get完美地工作。

但是,wincache_ucache_setIlluminate\Cache\WinCacheStore的呼叫返回false

回答

1

由於在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')); 

    } 
+0

謝謝您的回答!但它不適用於我:我設置'wincache.enablecli = 1','phpinfo()'報告'wincache.enablecli On On'。現在,'wincache_ucache_set'在工匠命令中返回'true'; CGI腳本中的'wincache_ucache_get'不會返回正確的值。 CGI和CLI可能有單獨的商店嗎? – marstato

+2

似乎'wincache'會爲不同的用戶創建不同的'user cache'實例。這裏cli中的artisan命令和cgi中的http請求是不同的用戶。而且他們無法分享他們的用戶緩存。也許我們需要一些其他緩存類型。像「文件,數組」,它將利用相同的本地文件來緩存值,或「'redis」,它可以將值分享給不同的用戶。 –

+0

我可以證實@ GaryLiu-MSFT是正確的; WinCache爲由CLI執行的進程與通過fastcgi啓動的進程創建單獨的緩存。來源:我是WinCache的當前所有者。 – DropPhone