php 在命令行中執行的結果與在 Apache 中瀏覽時的結果不同
我用 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,那麼它就是其中之一。
- 執行程式碼的使用者(你 vs apache)
- 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