Linux

Apache 重啟不載入新的 php.ini

  • October 30, 2012

在今天更新 CPanel 之前從未遇到過這個問題?也許這就是問題的一部分?

我只有一個 php.ini 文件

# /usr/local/bin/php --info | grep php.ini
Configure Command =>  './configure'  '--disable-cgi' '--disable-fileinfo' '--enable-bcmath' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-soap' '--enable-sockets' '--enable-zip' '--prefix=/usr/local' '--with-bz2' '--with-config-file-path=/usr/local/lib' '--with-config-file-scan-dir=/usr/local/lib/php.ini.d' '--with-curl=/opt/curlssl/' '--with-curlwrappers' '--with-freetype-dir=/usr' '--with-gd' '--with-imap=/opt/php_with_imap_client/' '--with-imap-ssl=/usr' '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libdir=lib64' '--with-libexpat-dir=/usr' '--with-libxml-dir=/opt/xml2' '--with-libxml-dir=/opt/xml2/' '--with-mcrypt=/opt/libmcrypt/' '--with-mysql=/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-mysqli=/usr/bin/mysql_config' '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-pcre-regex=/opt/pcre' '--with-pdo-mysql=shared' '--with-pdo-sqlite=shared' '--with-pic' '--with-png-dir=/usr' '--with-pspell' '--with-sqlite=shared' '--with-tidy=/opt/tidy/' '--with-xmlrpc' '--with-xpm-dir=/usr' '--with-xsl=/opt/xslt/' '--with-zlib' '--with-zlib-dir=/usr' '--with-gettext'
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
Scan this dir for additional .ini files => /usr/local/lib/php.ini.d

# /usr/bin/php --info | grep php.ini
<tr><td class="e">Configure Command </td><td class="v"> './configure'  '--disable-fileinfo' '--enable-bcmath' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-soap' '--enable-sockets' '--enable-zip' '--prefix=/usr' '--with-bz2' '--with-config-file-path=/usr/local/lib' '--with-config-file-scan-dir=/usr/local/lib/php.ini.d' '--with-curl=/opt/curlssl/' '--with-curlwrappers' '--with-freetype-dir=/usr' '--with-gd' '--with-imap=/opt/php_with_imap_client/' '--with-imap-ssl=/usr' '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libdir=lib64' '--with-libexpat-dir=/usr' '--with-libxml-dir=/opt/xml2' '--with-libxml-dir=/opt/xml2/' '--with-mcrypt=/opt/libmcrypt/' '--with-mysql=/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-mysqli=/usr/bin/mysql_config' '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-pcre-regex=/opt/pcre' '--with-pdo-mysql=shared' '--with-pdo-sqlite=shared' '--with-pic' '--with-png-dir=/usr' '--with-pspell' '--with-sqlite=shared' '--with-tidy=/opt/tidy/' '--with-xmlrpc' '--with-xpm-dir=/usr' '--with-xsl=/opt/xslt/' '--with-zlib' '--with-zlib-dir=/usr' </td></tr>
<tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/usr/local/lib </td></tr>
<tr><td class="e">Loaded Configuration File </td><td class="v">/usr/local/lib/php.ini </td></tr>
<tr><td class="e">Scan this dir for additional .ini files </td><td class="v">/usr/local/lib/php.ini.d </td></tr>

每次我重新啟動 apache 時,我似乎仍然在執行舊的。沒有什麼變化。

我從 php.ini 中刪除了 phpinfo() 和 ini_set() 但我仍然無法使用它們。

# service httpd -k restart
[Fri Oct 26 15:27:10 2012] [warn] module hostinglimits_module is already loaded, skipping
[Fri Oct 26 15:27:10 2012] [warn] NameVirtualHost 127.0.0.1:8081 has no VirtualHosts

vhosts 或 .htaccess 下也沒有 php.ini 文件。

# /usr/bin/php -v
PHP 5.3.15 (cgi-fcgi) (built: Aug  4 2012 21:33:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
   with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
   with the ionCube PHP Loader v4.2.2, Copyright (c) 2002-2012, by ionCube Ltd., and
   with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies
   with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH

# /usr/local/bin/php -v
PHP 5.3.15 (cli) (built: Aug  4 2012 21:34:27)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
   with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
   with the ionCube PHP Loader v4.2.2, Copyright (c) 2002-2012, by ionCube Ltd., and
   with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies
   with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH

錯誤日誌中也沒有顯示任何內容。我們得到的唯一錯誤是在虛擬主機下,error_log 說 phpinfo 和 ini_set 被禁用。

編輯:兩個 php 二進製文件都使用相同的 php.ini 文件

編輯:使用 suexec 將 php 作為 mod_fgcid.so 執行

編輯:從 SSH 我看到從兩個二進製文件載入的 php.ini 文件中 PHP 的正確值

從 apache 使用 php 時

$$ 26-Oct-2012 20:25:34 UTC $$PHP 警告:出於安全原因,第 1 行 /home/jake/public_html/phpinfo.php 中的 phpinfo() 已被禁用 編輯: /usr/bin/php 是正確的 PHP 文件。忘了提。它是包裝腳本中的一個。

因為您在伺服器上安裝了多個 PHP,所以您需要指定要載入的預設 PHP 模組。這可以通過 root WHM in 來完成Home »Service Configuration »Configure PHP and suEXEC。選擇正確的版本,保存並重新啟動 Apache。

看起來你有不止一個 php,最好的辦法是創建一個簡單的phpinfo();腳本,看看它使用哪個 php.ini 並確保你正在編輯正確的 php.ini(如果文件不存在,你可能想要符號連結將其複製到另一個或從原始碼樹中複製一個新的)。

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