2017-08-14 123 views
0

所以我遇到了一些問題,我只是希望我能理解。有一個乾淨的安裝PHP的乾淨的Centos機器。它也安裝了mongoDB驅動程序。當通過瀏覽器訪問網絡應用程序時,它一直抱怨mongo客戶端不存在。遵循所有安裝程序,php.ini包含extension=mongo.so,並重新啓動httpd。 PHP info()不包含Mongo conf。最終工作的是將mongo.ini文件添加到/etc/php.d目錄,並將其寫入extension=mongo.soPHP - - ini「(none)」,不加載擴展

我得到一個偷偷摸摸的懷疑php.ini未被正確加載,但我不明白爲什麼。我之所以這樣想的原因是,其中一個是在添加mongo.ini之後才起作用。其次,CLI和瀏覽器gui輸出的PHP info()不匹配。

cli output

和來自GUI

gui output

的這些都被扯斷秒開。沒有進行配置更改或重新啓動。出於某種原因,CLI輸出表示加載的配置文件是預期的/etc/php.ini。但瀏覽器GUI顯示爲(none)。這裏發生了什麼?這就是爲什麼extension=mongo.so永遠不會從php.ini文件加載?

版本

Apache/2.4.6 
PHP/5.4.16 
CentOS Linux release 7.3.1611 

[[email protected] etc]# find/-name php.ini 
/etc/php.ini 

是如此,甚至適當的地方呢?或者我應該搬到不同的論壇?

更新

閱讀Grigory Ilizirov的意見,並做了一些研究之後,我想,如果他想將它張貼在問題得到解答。看起來像Apache的PHP配置沒有被加載。我剛剛假定/etc/php.ini文件是需要編輯的。現在我只需要弄清楚我將如何做到這一點。

更新2

恢復到一個乾淨的安裝,並再次做了一切。這一次,CLI和web GUI的結果與以前相同,但現在mongo儘管在/etc/php.d/mongo.ini中添加了,但仍不會加載。懷疑SELinux干擾了Apache。 mongo.ini不再顯示在其他.ini文件節中。禁用SELinux並重新啓動允許它加載到Apache。

FINAL

這確實是一個SELinux的問題。那麼,這對於未來用戶來說屬於SO嗎?

+0

您使用的Apache? –

+0

@GrigoryIlizirov是的。 apache 2.4.6 – mahbad

+1

您需要編輯位於\ apache \ apahce2.4.6 \ bin \ php.ini中的php.ini ...針對cli和php的web的php是不同的 –

回答

0

確實SELinux干擾了Apache訪問PHP配置文件。添加安全上下文修復了它。

semanage fcontext -at httpd_sys_content_t '/etc/php.ini' 
semanage fcontext -at httpd_sys_content_t '/etc/php.d/(/.*)?' 
restorecon -Rv /etc/ 
systemctl restart httpd 

apache found the config file

0

你需要確保你的PHP已經安裝了MongoDB extension.try使用PHP -m看看你是否安裝了MongoDB。

然後從https://github.com/mongodb/mongo-php-driver-legacy下載源代碼。

請按照下列步驟來安裝該擴展:

tar zxvf mongo-x.x.x.tgz -C ../ 
cd mongo-x.x.x/ 
phpize 
./configure --with-php-config=/usr/local/php/bin/php-config 
make clean 
make 
make install 
extension=mongo.so //add this line to php.ini 

安裝後試運行PHP -m一遍,看看是否擴展安裝成功。

欲瞭解更多信息,你應該閱讀PHP文檔。 http://php.net/manual/en/mongo.installation.php#mongo.installation.fedora

+0

'pecl'被用來安裝mongo。 mongo現在工作正常。我試圖理解的是爲什麼只有在將'extension = mongo.so'加入'/etc/php.d/mongo.ini'而不是將它寫入'/etc/php.ini'後才能成功運行。正如你和文檔所述? – mahbad