我有一个在Azure App Service上运行的Webapp。我正在尝试在 Kudu 调试 CMD 控制台中测试部署后脚本。
php -d extension=php_redis.dll -f postdeploy.php
这是我的部署后.php文件
<?php
ini_set('error_reporting', -1);
ini_set("display_errors", 1);
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "'n";
}
set_exception_handler('exception_handler');
$redis = new Redis();
...
?>
我收到以下错误
Fatal error: Class 'Redis' not found in D:'home'site'deployments'tools'PostDeploymentActions'postdeploy.php on line 13
PHP Warning: PHP Startup: Unable to load dynamic library 'D:'Program Files (x86)'PHP'v5.6'ext'php_redis.dll' - The specified module could not be found.
in Unknown on line 0
我将正确版本的php_redis.dll上传到 PostDeploymentActions 文件夹。这与 Web 应用通过门户中的应用设置使用的二进制文件相同 PHP_EXTENSIONS = bin'php_redis.dll
。但是,我不确定如何为此脚本加载此脚本。
有没有办法在 Kudu 部署后脚本中加载php_redis.dll?
我尝试了php -d extension=./php_redis.dll -f postdeploy.php
,php -d extension=%~dp0php_redis.dll -f postdeploy.php
和其他奇怪的组合,但没有运气。
请尝试通过 ini 设置添加 PHP 扩展,请参阅Configure via ini settings
部分的 https://azure.microsoft.com/en-us/documentation/articles/web-sites-php-configure/#how-to-enable-extensions-in-the-default-php-runtime。
一般:
- 使用键
PHP_INI_SCAN_DIR
和值将应用设置添加到 Web 应用d:'home'site'ini
- 在
d:'home'site'ini
中创建一个名为extensions.ini
的配置文件 - 使用相同的配置将配置设置添加到
extensions.ini
文件您将在 php.ini 文件中使用的语法。例如:扩展名 =php_redis.dll。 - 重新启动 Web 应用服务。
通过这种方法,您可以将 PHP 扩展配置到 Kudu 控制台站点的 PHP 运行时中。通过App Settings
配置只会将扩展配置到 IIS 中。
如有任何进一步的问题,请随时告诉我。