Php 在命令行中执行的结果与在 Apache 中浏览时执行的结果不同

Php 在命令行中执行的结果与在 Apache 中浏览时执行的结果不同

我使用 LAMP 堆栈设置了一个 CentOS 7 vm web 服务器。过去几天,我一直在尝试建立与 Windows Server 2008 R2 域控制器的 LDAPS 连接。

ldapsearch -H "ldaps://server.ad.com" -D "domain\user-name" -W几天来,我能够使用以下命令连接到我的 DC:我还能够使用openssl s_client -connect server.ad.com -prexit命令来验证 SSL 证书(因为我使用的是自签名证书)。

但是,每当我浏览 /var/www/html/test/index.php 中的 PHP 网页时,我总是在尝试时收到“无法联系 LDAP 服务器”错误ldap_bind()。昨天我尝试从命令行运行 PHP 文件:php /var/www/html/test/index.php并发现我的 PHP ldap_bind() 每次使用命令行时都能正常工作。

在互联网上搜索,我发现 PHP-CLI 和 PHP Apache 通常会使用不同的 php.ini 文件,但运行该php --ini命令只会显示位于 /etc/php.ini 中的单个 php.ini 文件。

我正在尝试弄清楚为什么 PHP 从命令行正确执行,但在浏览/通过 Apache 运行时却不行。任何有助于解决此问题的信息/想法都将不胜感激,谢谢!

答案1

如果它可以通过命令行工作,但不能通过 Apache 工作,那么它就是少数几种情况之一。

  1. 运行代码的用户(你 vs Apache)
  2. SELinux 正在阻碍

我猜它们有点相互关联,但我建议尝试禁用 SELinux 的页面,然后从那里开始。

答案2

正如 GregL 所说,这很SELinux相关,我今天遇到了同样的问题,但我不记得SELinux已经启用了该功能。

[root@centos7 ~]# getsebool -a | grep http | grep ldap
httpd_can_connect_ldap --> off

因此,如果你不想全局禁用 SELinux,请授权它

setsebool -P httpd_can_connect_ldap on

也许您需要启用其他功能(远程数据库访问,...),请检查

getsebool -a | grep httpd

相关内容