我正在尝试在运行 WordPress 的 Azure App Service 实例上安装 ImageMagick。Azure App Service 正在运行 PHP 7.3.3 x64,否则一切正常。
- 我访问了这个网页来获取正确的 zip 文件下载:https://mlocati.github.io/articles/php-windows-imagick.html
phpinfo()
说我正在运行x64
MSVC15
非线程安全的 PHP 7.3.3,所以我下载了:php_imagick-3.4.3-7.3-nts-vc15-x64.zip
ImageMagick-7.0.7-11-vc15-x64.zip
- 我将这两个 zip 文件解压到目录中各自的子目录中
D:\home\site\ext
。 - 我在 创建了一个空文件
D:\home\site\ext\extensions.ini
。 - 在 Azure App Service 配置区域,我添加了环境变量
PHP_INI_SCAN_DIR=D:\home\site\ext\
。 - 我在其中
extensions.ini
输入了以下一行:extension=D:\home\site\ext\php_imagick-3.4.3-7.3-nts-vc15-x64\php_imagick.dll
。 - 然后我重新启动了 Azure 应用服务。从那时起,PHP 在启动时立即崩溃。
为了调查,我打开了 Kudu 并从目录运行了 PHP 命令行界面
wwwroot
:cd D:\home\site\wwwroot\ php -f phpinfo.php
- 这会导致 PHP 立即崩溃。它不会向标准输出写入任何内容
stderr
(因此运行时php -f phpinfo.php > out.txt 2> err.txt
会返回零字节文件out.txt
和err.txt
)。 - 我的全球
php.ini
已经有display_errors = On
和display_startup_errors = On
。
- 这会导致 PHP 立即崩溃。它不会向标准输出写入任何内容
- 除了 FastCGI 扩展意外退出之外,Azure 中没有任何地方记录任何内容。
- 注释掉该
#extension=D:\home\site\ext...
行之后,PHP 运行正常。
我假设这可能是缺少系统依赖项(例如 VisualC++ Redistributables)的问题,但 Azure 声称所有当前的 VisualC++ Redistributables 都已预先安装(而且我们无论如何都无法安装自己的)。
有没有什么办法可以调查启动时进程崩溃的问题?
我知道一个选项是 WinDbg,但我不知道如何在 Azure App Service 中获取崩溃转储。