Apache-2.2

php 在命令行中執行的結果與在 Apache 中瀏覽時的結果不同

  • December 1, 2016

我用 LAMP 堆棧設置了一個 CentOS 7 vm 網路伺服器。在過去的幾天裡,我一直試圖讓 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命令來驗證 SSL 證書(因為我使用的是自簽名證書)。

但是,每當我瀏覽到 /var/www/html/test/index.php 中的 PHP 網頁時,我總是在嘗試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 執行時卻沒有。任何有助於解決此問題的資訊/想法將不勝感激,謝謝!

如果它可以從命令行執行但不能通過 Apache,那麼它就是其中之一。

  1. 執行程式碼的使用者(你 vs apache)
  2. SELinux 正在阻礙

我想它們是相互關聯的,但我建議嘗試禁用 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

引用自:https://serverfault.com/questions/677013