【问题标题】:Cannot find save handler 'redis'找不到保存处理程序“redis”
【发布时间】:2015-07-21 04:56:47
【问题描述】:

我在 Azure 上运行 PHP 5.4 托管的 Web 应用程序。为了管理会话处理,我在 Azure 上配置了一个 Redis 缓存实例。

我已经设置了会话保存路径和处理程序:

session.save_handler = redis
session.save_path = "tcp://kbcache.redis.cache.windows.net:6379?auth=***"

我还配置了 Redis 扩展:

PHP_EXTENSIONS  bin\php_igbinary.dll
APPSETTING_PHP_EXTENSIONS   bin\php_igbinary.dll
PHP_EXTENSIONS02    bin\php_redis.dll
APPSETTING_PHP_EXTENSIONS02 bin\php_redis.dll

但是,当我浏览我的网站时,我会收到以下消息:

警告:session_start():找不到保存处理程序 'redis' - 会话 在 D:\home\site\wwwroot\index.php(22) 中启动失败:eval() 的代码 在第 2 行

我错过了什么?

【问题讨论】:

  • 我挖掘了 PHP 日志,发现了这个错误: PHP Warning: PHP Startup: Unable to load dynamic library 'D:\home\site\wwwroot\bin\php_redis.dll' - The specified module找不到。我已将该 DLL 加载到该文件夹​​中,并在我的 php.ini 文件中指定了它。

标签: php session azure redis


【解决方案1】:

[更新前帖]

部署 PHP 项目时,我们需要在 Azure 上启用扩展。 请看我的网站文件夹结构:

我将 DLL 文件复制到名为 ext 的文件夹中。 这些 dll 的版本应该是 VC9 和非线程安全 (nts) 兼容的。

我在文件夹名称ini 中创建了一个extension.ini。内容如下:

extension=d:\home\site\ext\php_igbinary.dll
extension=d:\home\site\ext\php_redis.dll
zend_extension=d:\home\site\ext\php_xdebug-2.3.3-5.4-vc9-x86_64.dll
session.save_handler = redis
session.save_path = "tcp://**.redis.cache.windows.net:6379?auth=**

最后,我在 Azure 门户上添加了“PHP_INI_SCAN_DIR”配置面板:

它对我有用。

【讨论】:

  • 谢谢你,在最后一篇文章之后让它工作了!欢呼
【解决方案2】:

其实,我在我的环境中尝试过 PHPRedis 扩展,效果很好。

按照您的描述,我认为您使 Redis 扩展的配置变得复杂。

我遵循了这些步骤:

1.切换到PHP version 5.4

2.从page 下载 PHPRedis 扩展。 由于我使用的PHP版本是version 5.4 TS,所以我下载了phpredis_5.4_vc9_ts

3.解压下载文件后,请将这些DLL文件复制到您的PHPext文件夹中。看来你需要注意这一点。

将此代码添加到您的PHP.ini 文件中

extension=php_igbinary.dll
extension=php_redis.dll

session.save_handler = redis
session.save_path = "tcp://**.redis.cache.windows.net:6379?auth=**

4.创建Page并测试Redis代码:

$redis=new Redis();
$redis->pconnect('tcp://**.redis.cache.windows.net', 6379);
$redis->auth('**+**=');
$redis->set('key', 'hello '); 
$redis->append('key', 'world '); 
echo $redis->get('key');

【讨论】:

  • 运气不佳,我将我的 PHP 设置为 5.4,从您的链接下载了 DLL。我在我的 ini 文件中添加了以下代码: extension=d:\home\site\ext\php_igbinary.dll extension=d:\home\site\ext\php_redis.dll session.save_handler = redis session.save_path = "tcp: //**.redis.cache.windows.net:6379?auth=**" 但我仍然收到这些错误:PHP 警告:PHP 启动:无法加载动态库 'd:\home\site\ext\ php_igbinary.dll' - 找不到指定的模块。 - 和 php_redis.dll 文件的相同错误
  • 由于我也在使用 Azure 来托管我的 Web 应用程序,因此我需要按照以下方式配置我的 PHP:azure.microsoft.com/en-gb/documentation/articles/… - 但我不相信这会有所作为
  • 你用的是NTS版本吗?
【解决方案3】:

有类似的问题。确保 redis dll 文件存在并在 php.ini 中启用,同时确保 redis 文件夹具有完整的写入权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多