提问人:enlace 提问时间:6/3/2023 最后编辑:enlace 更新时间:6/4/2023 访问量:72
为什么我在 Apache 上file_get_contents遇到“无法找到包装器 https”错误,尽管在 php.ini 中配置了 openssl?
Why am I getting 'Unable to find the wrapper https' error with file_get_contents on Apache, despite openssl config in php.ini?
问:
当我通过 apache 执行file_get_contents时,我收到错误:“无法找到包装器 https”。 我已经在php.ini中配置了extension=openssl。 我尝试通过使用
echo var_dump(stream_get_wrappers());
结果显示
.
看来https包装器确实不见了。
但是file_get_contents在 PHP 交互式 shell 下运行良好,并且stream_get_wrappers显示包装器已加载为
Apache 和 PHP Shell 之间出现这些不同行为的原因可能是什么? 非常感谢您的任何提示
环境:Apache 2.4.57 Win64 + PHP 8.2 (8.2.6) VS16 x64 线程安全
我通过安装另一个Apache版本来解决这个问题。php.ini 和 httpd.conf 是相同的。 特别感谢大家的友好支持@hakre
答:
Apache 和 PHP Shell 之间出现这些不同行为的原因可能是什么?
这可以直接回答:两者都有不同的PHP配置。
您的 PHP shell 启用了 https 包装器,而您的 Apache PHP 禁用了它。
这通常很容易被忽视,尤其是在开始时,因为我们认为这都是 PHP,所以假设这必须是一样的。
但事实是,PHP有许多不同的所谓服务器应用程序编程接口(SAPI),它们都有自己的配置。
与PHP手册比较:php_sapi_name()
在 shell 中,PHP 通常是命令行界面 (CLI) SAPI。
在 Web 服务器中,如 Apache,这取决于,它可以是通用网关接口 (CGI)、Apache 模块或快速 CGI (FCGI) 进程管理器 (FPM)。
一个潜在的陷阱
定义的 SAPI 可能并不明显,因为例如,可以将其定义为 。(参考文献)
apache
apache2handler
后果
enlace 随后在评论中询问了两个特定的 PHP SAPI 配置:
- 在哪里可以找到 shell 的 php 配置文件?
对于 shell,execute ,输出包含 PHP ini 文件在开头的位置(管道 to,因为它包含大量信息)。php -i
more
- 如何正确配置php .ini(用于apache)。我确实启用了,但它不起作用。
extension=openssl
对于 apache Web 服务器,请仔细检查您编辑了正确的 ini 文件,使用 phpinfo()
将 ini 位置和设置显示为默认/有效。
一些SAPI(如Apache中的一些SAPI)也允许您在服务器配置本身中配置PHP设置。有关更多详细信息,请参阅 PHP 手册中有关配置的部分。该部分称为运行时配置。
此外,还要确定 SAPI,以便更好地了解运行时是什么以及如何配置它。
评论
C:\workspace\php\php.ini
extension=openssl
extension=openssl.dll
extension_dir
phpinfo()
评论