alpine鏡像安裝php5-apache2環境,自定義的php.ini配置內容不生效問題的定位過程

在製作php5的鏡像過程中,本來打算使用nginx作爲web服務器的,後來發現實際使用過程中,有的php程序包中會存在.htaccess文件,該文件是apache2的資源訪問配置文件,一般用來做請求路徑重寫,如果使用nginx服務器的話,就需要將.htaccess文件的內容轉換成對應的nginx路徑重寫指令,所以又將web服務器換成了大名鼎鼎的apache2,這樣就可以直接使用程序包裏的.htaccess文件了,於是安裝了php5-apache2依賴包:

apk add php5-apache2

安裝好之後就可以測試一下php程序了,爲了防止有中文亂碼的問題,還添加了自定義的php.ini配置文件,設置了default_charset="",這樣一些php的頁面展示就會根據代碼中配置的字符集展示頁面,不會出現中文亂碼的問題,使用該基礎鏡像製作好了php應用鏡像後,部署到kubernetes,訪問頁面,結果發現是有中文亂碼問題,於是添加了phpinfo頁面,查看了一下php配置,發現default_charset字段的默認值確實是UTF-8,導致了有的php代碼中使用的gb2312字符集會出現中文亂碼的問題,可是我明明設置了默認字符集爲空,爲啥通過phpinfo查看配置時卻顯示是UTF-8呢?難道是自定義的配置沒有生效?於是直接進入到容器,用find命令查找所有.ini文件,除了conf.d目錄的一些啓用擴展的.ini文件,只有一個php.ini文件了,而且文件裏面的default_charset配置確實是我自定義的空值,那到底是什麼原因導致自定義的配置文件沒有加載呢?通過在容器裏直接php -i,查看defatult_charset的值,也確實是空值,說明我添加的自定義配置是沒有問題的,瀏覽器訪問php頁面也就是通過了一個apache2轉發的環節,問題應該是出在apache2這個環節了,於是查看php5-module.conf,發現裏面只有

LoadModule php5_module modules/libphp5.so
DirectoryIndex index.php index.html
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

並沒有指定php配置文件,於是就在php5-module.conf文件中添加 PHPIniDir 指令,修改後的配置內容如下:

LoadModule php5_module modules/libphp5.so
PHPIniDir /etc/php5/
DirectoryIndex index.php index.html
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

我自定義的php.ini在/etc/php5/目錄,然後重新打鏡像,部署到kubernetes,再次查看頁面,沒有中文亂碼問題了,同時查看phpinfo,發現default_charset配置的值已經爲空了,說明我自定義的配置生效了,至此問題算是解決了。

至於沒有修改配置之前,使用的是哪裏的php.ini,我猜測應該是安裝的php5-apache2依賴裏面有了一份內置的php.ini,apache2加載php5_module時,如果不指定php.ini的目錄,則會使用libphp5.so自帶的php.ini配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章