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

我用LAMP堆栈安装了一个CentOS 7 vmnetworking服务器。 在过去的几天里,我一直在尝试使LDAPS连接工作到Windows Server 2008 R2域控制器。

我已经能够连接到我的DC: ldapsearch -H "ldaps://server.ad.com" -D "domain\user-name" -W几天。 我也能够使用openssl s_client -connect server.ad.com -prexit命令来validationSSL证书(因为我正在使用自签名证书)。

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

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

我想弄清楚为什么PHP从命令行正确执行,而不是浏览到/通过Apache运行。 任何信息/想法来帮助解决这个将不胜感激,谢谢!

如果它从命令行工作,而不是通过Apache,那么这是几件事情之一。

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

我想他们是相互关联的,但我build议尝试禁用SELinux的页面,并从那里去。

正如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